From 3204287f9695f4e6875fc2c5b42dc0ad6740731d Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 10 Jul 2024 14:46:51 +1000 Subject: [PATCH 001/344] Fix sponsors workflow --- .github/workflows/generate-sponsor-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-sponsor-image.yml b/.github/workflows/generate-sponsor-image.yml index b8bb0c4ac..2c915c5d8 100644 --- a/.github/workflows/generate-sponsor-image.yml +++ b/.github/workflows/generate-sponsor-image.yml @@ -25,7 +25,7 @@ jobs: SPONSORKIT_GITHUB_LOGIN: wailsapp - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v6 with: commit-message: "chore: update sponsors.svg" add-paths: "website/static/img/sponsors.svg" From ffcfa1b0e7b7d3bdc78efbcc9d6a894b02588e62 Mon Sep 17 00:00:00 2001 From: Francesco Luzzi <81475751+FrancescoLuzzi@users.noreply.github.com> Date: Wed, 10 Jul 2024 07:00:19 +0200 Subject: [PATCH 002/344] fix: compute dropped file path before css handling (#3595) * fix: compute dropped file path before css handling * udpate changelog * Update website/src/pages/changelog.mdx Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: Lea Anthony Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../frontend/runtime/desktop/draganddrop.js | 20 +++++++++---------- .../frontend/runtime/runtime_debug_desktop.js | 14 ++++++------- .../frontend/runtime/runtime_prod_desktop.js | 2 +- website/src/pages/changelog.mdx | 4 ++++ 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/v2/internal/frontend/runtime/desktop/draganddrop.js b/v2/internal/frontend/runtime/desktop/draganddrop.js index 143b4228e..1582df6d4 100644 --- a/v2/internal/frontend/runtime/desktop/draganddrop.js +++ b/v2/internal/frontend/runtime/desktop/draganddrop.js @@ -130,16 +130,6 @@ function onDrop(e) { } e.preventDefault(); - if (!flags.useDropTarget) { - return; - } - - // Trigger debounce function to deactivate drop targets - if(flags.nextDeactivate) flags.nextDeactivate(); - - // Deactivate all drop targets - Array.from(document.getElementsByClassName(DROP_TARGET_ACTIVE)).forEach(el => el.classList.remove(DROP_TARGET_ACTIVE)); - if (CanResolveFilePaths()) { // process files let files = []; @@ -154,6 +144,16 @@ function onDrop(e) { } window.runtime.ResolveFilePaths(e.x, e.y, files); } + + if (!flags.useDropTarget) { + return; + } + + // Trigger debounce function to deactivate drop targets + if(flags.nextDeactivate) flags.nextDeactivate(); + + // Deactivate all drop targets + Array.from(document.getElementsByClassName(DROP_TARGET_ACTIVE)).forEach(el => el.classList.remove(DROP_TARGET_ACTIVE)); } /** diff --git a/v2/internal/frontend/runtime/runtime_debug_desktop.js b/v2/internal/frontend/runtime/runtime_debug_desktop.js index 888fd742a..bd8c27bed 100644 --- a/v2/internal/frontend/runtime/runtime_debug_desktop.js +++ b/v2/internal/frontend/runtime/runtime_debug_desktop.js @@ -503,12 +503,6 @@ return; } e.preventDefault(); - if (!flags.useDropTarget) { - return; - } - if (flags.nextDeactivate) - flags.nextDeactivate(); - Array.from(document.getElementsByClassName(DROP_TARGET_ACTIVE)).forEach((el) => el.classList.remove(DROP_TARGET_ACTIVE)); if (CanResolveFilePaths()) { let files = []; if (e.dataTransfer.items) { @@ -522,6 +516,12 @@ } window.runtime.ResolveFilePaths(e.x, e.y, files); } + if (!flags.useDropTarget) { + return; + } + if (flags.nextDeactivate) + flags.nextDeactivate(); + Array.from(document.getElementsByClassName(DROP_TARGET_ACTIVE)).forEach((el) => el.classList.remove(DROP_TARGET_ACTIVE)); } function CanResolveFilePaths() { return window.chrome?.webview?.postMessageWithAdditionalObjects != null; @@ -767,4 +767,4 @@ }); window.WailsInvoke("runtime:ready"); })(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuIF8gICAgICAgX18gICAgICBfIF9fXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xuXG4vKipcbiAqIFNlbmRzIGEgbG9nIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgd2l0aCB0aGUgZ2l2ZW4gbGV2ZWwgKyBtZXNzYWdlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xuXG5cdC8vIExvZyBNZXNzYWdlIGZvcm1hdDpcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxuXHR3aW5kb3cuV2FpbHNJbnZva2UoJ0wnICsgbGV2ZWwgKyBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIHRyYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dUcmFjZShtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdUJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nUHJpbnQobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gZGVidWcgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ0QnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIGluZm8gbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0luZm8obWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnSScsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nV2FybmluZyhtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBlcnJvciBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnRScsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gZmF0YWwgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0ZhdGFsKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ0YnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gU2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XG59XG5cbi8vIExvZyBsZXZlbHNcbmV4cG9ydCBjb25zdCBMb2dMZXZlbCA9IHtcblx0VFJBQ0U6IDEsXG5cdERFQlVHOiAyLFxuXHRJTkZPOiAzLFxuXHRXQVJOSU5HOiA0LFxuXHRFUlJPUjogNSxcbn07XG4iLCAiLypcbiBfICAgICAgIF9fICAgICAgXyBfX1xufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbi8vIERlZmluZXMgYSBzaW5nbGUgbGlzdGVuZXIgd2l0aCBhIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIGNhbGxiYWNrXG5cbi8qKlxuICogVGhlIExpc3RlbmVyIGNsYXNzIGRlZmluZXMgYSBsaXN0ZW5lciEgOi0pXG4gKlxuICogQGNsYXNzIExpc3RlbmVyXG4gKi9cbmNsYXNzIExpc3RlbmVyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcbiAgICAgKiBAbWVtYmVyb2YgTGlzdGVuZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcbiAgICAgICAgdGhpcy5tYXhDYWxsYmFja3MgPSBtYXhDYWxsYmFja3MgfHwgLTE7XG4gICAgICAgIC8vIENhbGxiYWNrIGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGdpdmVuIGRhdGFcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxuICAgICAgICB0aGlzLkNhbGxiYWNrID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGRhdGEpO1xuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxuICAgICAgICAgICAgaWYgKHRoaXMubWF4Q2FsbGJhY2tzID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlY3JlbWVudCBtYXhDYWxsYmFja3MuIFJldHVybiB0cnVlIGlmIG5vdyAwLCBvdGhlcndpc2UgZmFsc2VcbiAgICAgICAgICAgIHRoaXMubWF4Q2FsbGJhY2tzIC09IDE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB7fTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYG1heENhbGxiYWNrc2AgdGltZXMgYmVmb3JlIGJlaW5nIGRlc3Ryb3llZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcbiAgICBldmVudExpc3RlbmVyc1tldmVudE5hbWVdID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSB8fCBbXTtcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcbiAgICBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLnB1c2godGhpc0xpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJPZmYodGhpc0xpc3RlbmVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT24oZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25jZShldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIEV2ZW50c09uTXVsdGlwbGUoZXZlbnROYW1lLCBjYWxsYmFjaywgMSk7XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUxpc3RlbmVycyhldmVudERhdGEpIHtcblxuICAgIC8vIEdldCB0aGUgZXZlbnQgbmFtZVxuICAgIGxldCBldmVudE5hbWUgPSBldmVudERhdGEubmFtZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IGxpc3RlbmVycyBmb3IgdGhpcyBldmVudFxuICAgIGlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdKSB7XG5cbiAgICAgICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XG4gICAgICAgIGNvbnN0IG5ld0V2ZW50TGlzdGVuZXJMaXN0ID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5zbGljZSgpO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXG4gICAgICAgIGZvciAobGV0IGNvdW50ID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXS5sZW5ndGggLSAxOyBjb3VudCA+PSAwOyBjb3VudCAtPSAxKSB7XG5cbiAgICAgICAgICAgIC8vIEdldCBuZXh0IGxpc3RlbmVyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV1bY291bnRdO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGV2ZW50RGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIGNvbnN0IGRlc3Ryb3kgPSBsaXN0ZW5lci5DYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICAgIGlmIChkZXN0cm95KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcbiAgICAgICAgICAgICAgICBuZXdFdmVudExpc3RlbmVyTGlzdC5zcGxpY2UoY291bnQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcyB3aXRoIG5ldyBsaXN0IG9mIGxpc3RlbmVyc1xuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcblxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcbiAgICAvLyBQYXJzZSB0aGUgbWVzc2FnZVxuICAgIGxldCBtZXNzYWdlO1xuICAgIHRyeSB7XG4gICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKG5vdGlmeU1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XG59XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBkYXRhXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgZGF0YTogW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKS5zbGljZSgxKSxcbiAgICB9O1xuXG4gICAgLy8gTm90aWZ5IEpTIGxpc3RlbmVyc1xuICAgIG5vdGlmeUxpc3RlbmVycyhwYXlsb2FkKTtcblxuICAgIC8vIE5vdGlmeSBHbyBsaXN0ZW5lcnNcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VFJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lKSB7XG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xuICAgIGRlbGV0ZSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdO1xuXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnRVgnICsgZXZlbnROYW1lKTtcbn1cblxuLyoqXG4gKiBPZmYgdW5yZWdpc3RlcnMgYSBsaXN0ZW5lciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBPbixcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmKGV2ZW50TmFtZSwgLi4uYWRkaXRpb25hbEV2ZW50TmFtZXMpIHtcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXG5cbiAgICBpZiAoYWRkaXRpb25hbEV2ZW50TmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG4vKipcbiAqIE9mZiB1bnJlZ2lzdGVycyBhbGwgZXZlbnQgbGlzdGVuZXJzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIE9uXG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xuICAgIGNvbnN0IGV2ZW50TmFtZXMgPSBPYmplY3Qua2V5cyhldmVudExpc3RlbmVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IGV2ZW50TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lc1tpXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIGxpc3RlbmVyT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggRXZlbnRzT25cbiAqXG4gKiBAcGFyYW0ge0xpc3RlbmVyfSBsaXN0ZW5lclxuICovXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcbiAgICBjb25zdCBldmVudE5hbWUgPSBsaXN0ZW5lci5ldmVudE5hbWU7XG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xuXG4gICAgLy8gQ2xlYW4gdXAgaWYgdGhlcmUgYXJlIG5vIGV2ZW50IGxpc3RlbmVycyBsZWZ0XG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XG4gICAgfVxufVxuIiwgIi8qXG4gXyAgICAgICBfXyAgICAgIF8gX19cbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xuXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gY3J5cHRvUmFuZG9tKCkge1xuXHR2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB1c2luZyBkYSBvbGQtc2tvb2wgTWF0aC5SYW5kb21cbiAqIEkgbGlrZXMgdG8gY2FsbCBpdCBMT0xSYW5kb21cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XG5cdHJldHVybiBNYXRoLnJhbmRvbSgpICogOTAwNzE5OTI1NDc0MDk5MTtcbn1cblxuLy8gUGljayBhIHJhbmRvbSBudW1iZXIgZnVuY3Rpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5XG52YXIgcmFuZG9tRnVuYztcbmlmICh3aW5kb3cuY3J5cHRvKSB7XG5cdHJhbmRvbUZ1bmMgPSBjcnlwdG9SYW5kb207XG59IGVsc2Uge1xuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XG59XG5cblxuLyoqXG4gKiBDYWxsIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB0byBjYWxsIHRoZSBiaW5kaW5nIHdpdGggdGhlXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXG4gKiBiYWNrZW5kIHJlc3BvbmRzLiBUaGlzIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bFxuICogb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3IgaXMgcGFzc2VkIGJhY2suXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXG4gKiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7YW55PX0gYXJnc1xuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XG5cblx0Ly8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcblx0XHR0aW1lb3V0ID0gMDtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHByb21pc2Vcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuXHRcdC8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lEXG5cdFx0dmFyIGNhbGxiYWNrSUQ7XG5cdFx0ZG8ge1xuXHRcdFx0Y2FsbGJhY2tJRCA9IG5hbWUgKyAnLScgKyByYW5kb21GdW5jKCk7XG5cdFx0fSB3aGlsZSAoY2FsbGJhY2tzW2NhbGxiYWNrSURdKTtcblxuXHRcdHZhciB0aW1lb3V0SGFuZGxlO1xuXHRcdC8vIFNldCB0aW1lb3V0XG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJlamVjdChFcnJvcignQ2FsbCB0byAnICsgbmFtZSArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcblx0XHRjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxuXHRcdFx0cmVqZWN0OiByZWplY3QsXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlXG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXlsb2FkID0ge1xuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRhcmdzLFxuXHRcdFx0XHRjYWxsYmFja0lELFxuXHRcdFx0fTtcblxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbndpbmRvdy5PYmZ1c2NhdGVkQ2FsbCA9IChpZCwgYXJncywgdGltZW91dCkgPT4ge1xuXG4gICAgLy8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XG4gICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkge1xuICAgICAgICB0aW1lb3V0ID0gMDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBwcm9taXNlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuICAgICAgICAvLyBDcmVhdGUgYSB1bmlxdWUgY2FsbGJhY2tJRFxuICAgICAgICB2YXIgY2FsbGJhY2tJRDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2FsbGJhY2tJRCA9IGlkICsgJy0nICsgcmFuZG9tRnVuYygpO1xuICAgICAgICB9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xuXG4gICAgICAgIHZhciB0aW1lb3V0SGFuZGxlO1xuICAgICAgICAvLyBTZXQgdGltZW91dFxuICAgICAgICBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoJ0NhbGwgdG8gbWV0aG9kICcgKyBpZCArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xuICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBjYWxsYmFja1xuICAgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxuICAgICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRhcmdzLFxuXHRcdFx0XHRjYWxsYmFja0lELFxuXHRcdFx0fTtcblxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdjJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBiYWNrZW5kIHRvIHJldHVybiBkYXRhIHRvIGEgcHJldmlvdXNseSBjYWxsZWRcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhbGxiYWNrKGluY29taW5nTWVzc2FnZSkge1xuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxuXHRsZXQgbWVzc2FnZTtcblx0dHJ5IHtcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgSW52YWxpZCBKU09OIHBhc3NlZCB0byBjYWxsYmFjazogJHtlLm1lc3NhZ2V9LiBNZXNzYWdlOiAke2luY29taW5nTWVzc2FnZX1gO1xuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XG5cdGxldCBjYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF07XG5cdGlmICghY2FsbGJhY2tEYXRhKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcblx0XHRjb25zb2xlLmVycm9yKGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0Y2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKTtcblxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xuXG5cdGlmIChtZXNzYWdlLmVycm9yKSB7XG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcblx0fSBlbHNlIHtcblx0XHRjYWxsYmFja0RhdGEucmVzb2x2ZShtZXNzYWdlLnJlc3VsdCk7XG5cdH1cbn1cbiIsICIvKlxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vICBcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSAnLi9jYWxscyc7XG5cbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcbndpbmRvdy5nbyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcblx0dHJ5IHtcblx0XHRiaW5kaW5nc01hcCA9IEpTT04ucGFyc2UoYmluZGluZ3NNYXApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS5lcnJvcihlKTtcblx0fVxuXG5cdC8vIEluaXRpYWxpc2UgdGhlIGJpbmRpbmdzIG1hcFxuXHR3aW5kb3cuZ28gPSB3aW5kb3cuZ28gfHwge307XG5cblx0Ly8gSXRlcmF0ZSBwYWNrYWdlIG5hbWVzXG5cdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwKS5mb3JFYWNoKChwYWNrYWdlTmFtZSkgPT4ge1xuXG5cdFx0Ly8gQ3JlYXRlIGlubmVyIG1hcCBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0d2luZG93LmdvW3BhY2thZ2VOYW1lXSA9IHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gfHwge307XG5cblx0XHQvLyBJdGVyYXRlIHN0cnVjdCBuYW1lc1xuXHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXSkuZm9yRWFjaCgoc3RydWN0TmFtZSkgPT4ge1xuXG5cdFx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdIHx8IHt9O1xuXG5cdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0pLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdFx0Ly8gTm8gdGltZW91dCBieSBkZWZhdWx0XG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xuXG5cdFx0XHRcdFx0Ly8gQWN0dWFsIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FsbChbcGFja2FnZU5hbWUsIHN0cnVjdE5hbWUsIG1ldGhvZE5hbWVdLmpvaW4oJy4nKSwgYXJncywgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQWxsb3cgc2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcblx0XHRcdFx0XHRcdHRpbWVvdXQgPSBuZXdUaW1lb3V0O1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb25cblx0XHRcdFx0XHRkeW5hbWljLmdldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XG5cdFx0XHRcdH0oKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSBcIi4vY2FsbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZCgpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dSZWxvYWRBcHAoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FTRFQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldExpZ2h0VGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQUxUJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXREYXJrVGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHdpbmRvdyBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dDZW50ZXIoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dUJyArIHRpdGxlKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgd2luZG93IGdvIGZ1bGxzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0YnKTtcbn1cblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB3aW5kb3cgZnJvbSBmdWxsc2NyZWVuXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2YnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBpbiBmdWxsIHNjcmVlbiBtb2RlIG9yIG5vdC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzRnVsbHNjcmVlblwiKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgU2l6ZSBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7dzogbnVtYmVyLCBoOiBudW1iZXJ9Pn0gVGhlIHNpemUgb2YgdGhlIHdpbmRvd1xuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRTaXplKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFNpemVcIik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXWjonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldE1pblNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcbn1cblxuXG5cbi8qKlxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldEFsd2F5c09uVG9wKGIpIHtcblxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcbn1cblxuXG5cblxuLyoqXG4gKiBTZXQgdGhlIFBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dwOicgKyB4ICsgJzonICsgeSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFBvc2l0aW9uKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcbn1cblxuLyoqXG4gKiBIaWRlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dIaWRlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcbn1cblxuLyoqXG4gKiBTaG93IHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTaG93KCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcbn1cblxuLyoqXG4gKiBNYXhpbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWF4aW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xufVxuXG4vKipcbiAqIFRvZ2dsZSB0aGUgTWF4aW1pc2Ugb2YgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcbn1cblxuLyoqXG4gKiBVbm1heGltaXNlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBtYXhpbWlzZWQgb3Igbm90LlxuICpcbiAqIEBleHBvcnRcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01heGltaXNlZCgpIHtcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc01heGltaXNlZFwiKTtcbn1cblxuLyoqXG4gKiBNaW5pbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xufVxuXG4vKipcbiAqIFVubWluaW1pc2UgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VubWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1pbmltaXNlZCBvciBub3QuXG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTWluaW1pc2VkKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWluaW1pc2VkXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG5vcm1hbCBvciBub3QuXG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTm9ybWFsKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTm9ybWFsXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3VyIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gUiBSZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBHIEdyZWVuXG4gKiBAcGFyYW0ge251bWJlcn0gQiBCbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gQSBBbHBoYVxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QmFja2dyb3VuZENvbG91cihSLCBHLCBCLCBBKSB7XG4gICAgbGV0IHJnYmEgPSBKU09OLnN0cmluZ2lmeSh7cjogUiB8fCAwLCBnOiBHIHx8IDAsIGI6IEIgfHwgMCwgYTogQSB8fCAyNTV9KTtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dyOicgKyByZ2JhKTtcbn1cblxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cblxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xuXG5cbi8qKlxuICogR2V0cyB0aGUgYWxsIHNjcmVlbnMuIENhbGwgdGhpcyBhbmV3IGVhY2ggdGltZSB5b3Ugd2FudCB0byByZWZyZXNoIGRhdGEgZnJvbSB0aGUgdW5kZXJseWluZyB3aW5kb3dpbmcgc3lzdGVtLlxuICogQGV4cG9ydFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vd3JhcHBlci9ydW50aW1lJykuU2NyZWVufSBTY3JlZW5cbiAqIEByZXR1cm4ge1Byb21pc2U8e1NjcmVlbltdfT59IFRoZSBzY3JlZW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTY3JlZW5HZXRBbGwoKSB7XG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6U2NyZWVuR2V0QWxsXCIpO1xufVxuIiwgIi8qKlxuICogQGRlc2NyaXB0aW9uOiBVc2UgdGhlIHN5c3RlbSBkZWZhdWx0IGJyb3dzZXIgdG8gb3BlbiB0aGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJyb3dzZXJPcGVuVVJMKHVybCkge1xuICB3aW5kb3cuV2FpbHNJbnZva2UoJ0JPOicgKyB1cmwpO1xufSIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XG5cbi8qKlxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkU2V0VGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6Q2xpcGJvYXJkU2V0VGV4dFwiLCBbdGV4dF0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJuIHtQcm9taXNlPHtzdHJpbmd9Pn0gVGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcblxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkR2V0VGV4dCgpIHtcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRHZXRUZXh0XCIpO1xufSIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5pbXBvcnQge0V2ZW50c09uLCBFdmVudHNPZmZ9IGZyb20gXCIuL2V2ZW50c1wiO1xuXG5jb25zdCBmbGFncyA9IHtcbiAgICByZWdpc3RlcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VXNlRHJvcFRhcmdldDogdHJ1ZSxcbiAgICB1c2VEcm9wVGFyZ2V0OiB0cnVlLFxuICAgIG5leHREZWFjdGl2YXRlOiBudWxsLFxuICAgIG5leHREZWFjdGl2YXRlVGltZW91dDogbnVsbCxcbn07XG5cbmNvbnN0IERST1BfVEFSR0VUX0FDVElWRSA9IFwid2FpbHMtZHJvcC10YXJnZXQtYWN0aXZlXCI7XG5cbi8qKlxuICogY2hlY2tTdHlsZURyb3BUYXJnZXQgY2hlY2tzIGlmIHRoZSBzdHlsZSBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZVxuICogXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU3R5bGVEcm9wVGFyZ2V0KHN0eWxlKSB7XG4gICAgY29uc3QgY3NzRHJvcFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5KS50cmltKCk7XG4gICAgaWYgKGNzc0Ryb3BWYWx1ZSkge1xuICAgICAgICBpZiAoY3NzRHJvcFZhbHVlID09PSB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZSwgYnV0IFxuICAgICAgICAvLyB0aGUgdmFsdWUgaXMgbm90IGNvcnJlY3QsIHRlcm1pbmF0ZSBmaW5kaW5nIHByb2Nlc3MuXG4gICAgICAgIC8vIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBibG9jayBzb21lIGNoaWxkIGVsZW1lbnRzIGZyb20gYmVpbmcgZHJvcCB0YXJnZXRzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBvbkRyYWdPdmVyIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnb3ZlciBldmVudCBpcyBlbWl0dGVkLlxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGUgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gb25EcmFnT3ZlcihlKSB7XG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGUudGFyZ2V0O1xuXG4gICAgLy8gVHJpZ2dlciBkZWJvdW5jZSBmdW5jdGlvbiB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0c1xuICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xuXG4gICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbnVsbCBvciBlbGVtZW50IGlzIG5vdCBjaGlsZCBvZiBkcm9wIHRhcmdldCBlbGVtZW50XG4gICAgaWYgKCFlbGVtZW50IHx8ICFjaGVja1N0eWxlRHJvcFRhcmdldChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgY3VycmVudEVsZW1lbnQgaXMgZHJvcCB0YXJnZXQgZWxlbWVudFxuICAgICAgICBpZiAoY2hlY2tTdHlsZURyb3BUYXJnZXQoY3VycmVudEVsZW1lbnQuc3R5bGUpKSB7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKERST1BfVEFSR0VUX0FDVElWRSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cbn1cblxuLyoqXG4gKiBvbkRyYWdMZWF2ZSBpcyBjYWxsZWQgd2hlbiB0aGUgZHJhZ2xlYXZlIGV2ZW50IGlzIGVtaXR0ZWQuXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZSBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiBvbkRyYWdMZWF2ZShlKSB7XG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluZCB0aGUgY2xvc2UgZHJvcCB0YXJnZXQgZWxlbWVudFxuICAgIGlmICghZS50YXJnZXQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZS50YXJnZXQpKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XG4gICAgXG4gICAgLy8gVXNlIGRlYm91bmNlIHRlY2huaXF1ZSB0byB0YWNsZSBkcmFnbGVhdmUgZXZlbnRzIG9uIG92ZXJsYXBwaW5nIGVsZW1lbnRzIGFuZCBkcm9wIHRhcmdldCBlbGVtZW50c1xuICAgIGZsYWdzLm5leHREZWFjdGl2YXRlID0gKCkgPT4ge1xuICAgICAgICAvLyBEZWFjdGl2YXRlIGFsbCBkcm9wIHRhcmdldHMsIG5ldyBkcm9wIHRhcmdldCB3aWxsIGJlIGFjdGl2YXRlZCBvbiBuZXh0IGRyYWdvdmVyIGV2ZW50XG4gICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShEUk9QX1RBUkdFVF9BQ1RJVkUpKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoRFJPUF9UQVJHRVRfQUNUSVZFKSk7XG4gICAgICAgIC8vIFJlc2V0IG5leHREZWFjdGl2YXRlXG4gICAgICAgIGZsYWdzLm5leHREZWFjdGl2YXRlID0gbnVsbDtcbiAgICAgICAgLy8gQ2xlYXIgdGltZW91dFxuICAgICAgICBpZiAoZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0KTtcbiAgICAgICAgICAgIGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGltZW91dCB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0cyBpZiBub3QgdHJpZ2dlcmVkIGJ5IG5leHQgZHJhZyBldmVudFxuICAgIGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcbiAgICB9LCA1MCk7XG59XG5cbi8qKlxuICogb25Ecm9wIGlzIGNhbGxlZCB3aGVuIHRoZSBkcm9wIGV2ZW50IGlzIGVtaXR0ZWQuXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZSBcbiAqIEByZXR1cm5zIFxuICovXG5mdW5jdGlvbiBvbkRyb3AoZSkge1xuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIWZsYWdzLnVzZURyb3BUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcblxuICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0c1xuICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShEUk9QX1RBUkdFVF9BQ1RJVkUpKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoRFJPUF9UQVJHRVRfQUNUSVZFKSk7XG5cbiAgICBpZiAoQ2FuUmVzb2x2ZUZpbGVQYXRocygpKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgZmlsZXNcbiAgICAgICAgbGV0IGZpbGVzID0gW107XG4gICAgICAgIGlmIChlLmRhdGFUcmFuc2Zlci5pdGVtcykge1xuICAgICAgICAgICAgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuaXRlbXNdLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0ZpbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVzID0gWy4uLmUuZGF0YVRyYW5zZmVyLmZpbGVzXTtcbiAgICAgICAgfVxuICAgICAgICB3aW5kb3cucnVudGltZS5SZXNvbHZlRmlsZVBhdGhzKGUueCwgZS55LCBmaWxlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIHBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzIGNoZWNrcyB0aGUgYnJvd3NlcidzIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBwb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0c1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDYW5SZXNvbHZlRmlsZVBhdGhzKCkge1xuICAgIHJldHVybiB3aW5kb3cuY2hyb21lPy53ZWJ2aWV3Py5wb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0cyAhPSBudWxsO1xufVxuXG4vKipcbiAqIFJlc29sdmVGaWxlUGF0aHMgc2VuZHMgZHJvcCBldmVudHMgdG8gdGhlIEdPIHNpZGUgdG8gcmVzb2x2ZSBmaWxlIHBhdGhzIG9uIHdpbmRvd3MuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gKiBAcGFyYW0ge2FueVtdfSBmaWxlc1xuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlRmlsZVBhdGhzKHgsIHksIGZpbGVzKSB7XG4gICAgLy8gT25seSBmb3Igd2luZG93cyB3ZWJ2aWV3MiA+PSAxLjAuMTc3NC4zMFxuICAgIC8vIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS93ZWJ2aWV3Mi9yZWZlcmVuY2Uvd2luMzIvaWNvcmV3ZWJ2aWV3MndlYm1lc3NhZ2VyZWNlaXZlZGV2ZW50YXJnczI/dmlldz13ZWJ2aWV3Mi0xLjAuMTgyMy4zMiNhcHBsaWVzLXRvXG4gICAgaWYgKHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzKSB7XG4gICAgICAgIGNocm9tZS53ZWJ2aWV3LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzKGBmaWxlOmRyb3A6JHt4fToke3l9YCwgZmlsZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgT25GaWxlRHJvcCByZXR1cm5zIGEgc2xpY2Ugb2YgZmlsZSBwYXRoIHN0cmluZ3Mgd2hlbiBhIGRyb3AgaXMgZmluaXNoZWQuXG4gKlxuICogQGV4cG9ydFxuICogQGNhbGxiYWNrIE9uRmlsZURyb3BDYWxsYmFja1xuICogQHBhcmFtIHtudW1iZXJ9IHggLSB4IGNvb3JkaW5hdGUgb2YgdGhlIGRyb3BcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSBkcm9wXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyAtIEEgbGlzdCBvZiBmaWxlIHBhdGhzLlxuICovXG5cbi8qKlxuICogT25GaWxlRHJvcCBsaXN0ZW5zIHRvIGRyYWcgYW5kIGRyb3AgZXZlbnRzIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGRyb3AgYW5kIGFuIGFycmF5IG9mIHBhdGggc3RyaW5ncy5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge09uRmlsZURyb3BDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmb3IgT25GaWxlRHJvcCByZXR1cm5zIGEgc2xpY2Ugb2YgZmlsZSBwYXRoIHN0cmluZ3Mgd2hlbiBhIGRyb3AgaXMgZmluaXNoZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VEcm9wVGFyZ2V0PXRydWVdIC0gT25seSBjYWxsIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBkcm9wIGZpbmlzaGVkIG9uIGFuIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGRyb3AgdGFyZ2V0IHN0eWxlLiAoLS13YWlscy1kcm9wLXRhcmdldClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uRmlsZURyb3AoY2FsbGJhY2ssIHVzZURyb3BUYXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkRyYWdBbmREcm9wQ2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MucmVnaXN0ZXJlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZsYWdzLnJlZ2lzdGVyZWQgPSB0cnVlO1xuXG4gICAgY29uc3QgdURUUFQgPSB0eXBlb2YgdXNlRHJvcFRhcmdldDtcbiAgICBmbGFncy51c2VEcm9wVGFyZ2V0ID0gdURUUFQgPT09IFwidW5kZWZpbmVkXCIgfHwgdURUUFQgIT09IFwiYm9vbGVhblwiID8gZmxhZ3MuZGVmYXVsdFVzZURyb3BUYXJnZXQgOiB1c2VEcm9wVGFyZ2V0O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRHJhZ092ZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBvbkRyYWdMZWF2ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRyb3ApO1xuXG4gICAgbGV0IGNiID0gY2FsbGJhY2s7XG4gICAgaWYgKGZsYWdzLnVzZURyb3BUYXJnZXQpIHtcbiAgICAgICAgY2IgPSBmdW5jdGlvbiAoeCwgeSwgcGF0aHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpXG4gICAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBudWxsIG9yIGVsZW1lbnQgaXMgbm90IGNoaWxkIG9mIGRyb3AgdGFyZ2V0IGVsZW1lbnQsIHJldHVybiBudWxsXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayh4LCB5LCBwYXRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBFdmVudHNPbihcIndhaWxzOmZpbGUtZHJvcFwiLCBjYik7XG59XG5cbi8qKlxuICogT25GaWxlRHJvcE9mZiByZW1vdmVzIHRoZSBkcmFnIGFuZCBkcm9wIGxpc3RlbmVycyBhbmQgaGFuZGxlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPbkZpbGVEcm9wT2ZmKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRHJhZ092ZXIpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBvbkRyYWdMZWF2ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRyb3ApO1xuICAgIEV2ZW50c09mZihcIndhaWxzOmZpbGUtZHJvcFwiKTtcbiAgICBmbGFncy5yZWdpc3RlcmVkID0gZmFsc2U7XG59XG4iLCAiLypcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogYXV0bzsgKGRlZmF1bHQpIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWUgT1IgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBPUiBlbGVtZW50IGlzIGlucHV0IG9yIHRleHRhcmVhXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IHNob3c7IHdpbGwgYWx3YXlzIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGhpZGU7IHdpbGwgYWx3YXlzIGhpZGUgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XG5cblRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgbGlrZSBub3JtYWwgQ1NTIHJ1bGVzLCBzbyBuZXN0aW5nIHdvcmtzIGFzIGV4cGVjdGVkXG4qL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZXZlbnQpIHtcbiAgICAvLyBQcm9jZXNzIGRlZmF1bHQgY29udGV4dCBtZW51XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgY29uc3QgZGVmYXVsdENvbnRleHRNZW51QWN0aW9uID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1kZWZhdWx0LWNvbnRleHRtZW51XCIpLnRyaW0oKTtcbiAgICBzd2l0Y2ggKGRlZmF1bHRDb250ZXh0TWVudUFjdGlvbikge1xuICAgICAgICBjYXNlIFwic2hvd1wiOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjYXNlIFwiaGlkZVwiOlxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnRFZGl0YWJsZSBpcyB0cnVlXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgYWN0aW9uIGlzIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0aW9uID0gKHNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb24ucmFuZ2VDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkgPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0YWduYW1lIGlzIGlucHV0IG9yIHRleHRhcmVhXG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSBcIklOUFVUXCIgfHwgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzU2VsZWN0aW9uIHx8ICghZWxlbWVudC5yZWFkT25seSAmJiAhZWxlbWVudC5kaXNhYmxlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGlkZSBkZWZhdWx0IGNvbnRleHQgbWVudVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG59XG4iLCAiLypcbiBfXHQgICBfX1x0ICBfIF9fXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5pbXBvcnQgKiBhcyBMb2cgZnJvbSAnLi9sb2cnO1xuaW1wb3J0IHtldmVudExpc3RlbmVycywgRXZlbnRzRW1pdCwgRXZlbnRzTm90aWZ5LCBFdmVudHNPZmYsIEV2ZW50c09uLCBFdmVudHNPbmNlLCBFdmVudHNPbk11bHRpcGxlfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge0NhbGwsIENhbGxiYWNrLCBjYWxsYmFja3N9IGZyb20gJy4vY2FsbHMnO1xuaW1wb3J0IHtTZXRCaW5kaW5nc30gZnJvbSBcIi4vYmluZGluZ3NcIjtcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi93aW5kb3dcIjtcbmltcG9ydCAqIGFzIFNjcmVlbiBmcm9tIFwiLi9zY3JlZW5cIjtcbmltcG9ydCAqIGFzIEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiO1xuaW1wb3J0ICogYXMgQ2xpcGJvYXJkIGZyb20gXCIuL2NsaXBib2FyZFwiO1xuaW1wb3J0ICogYXMgRHJhZ0FuZERyb3AgZnJvbSBcIi4vZHJhZ2FuZGRyb3BcIjtcbmltcG9ydCAqIGFzIENvbnRleHRNZW51IGZyb20gXCIuL2NvbnRleHRtZW51XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBRdWl0KCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnUScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2hvdygpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1MnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhpZGUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdIJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnZpcm9ubWVudCgpIHtcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpFbnZpcm9ubWVudFwiKTtcbn1cblxuLy8gVGhlIEpTIHJ1bnRpbWVcbndpbmRvdy5ydW50aW1lID0ge1xuICAgIC4uLkxvZyxcbiAgICAuLi5XaW5kb3csXG4gICAgLi4uQnJvd3NlcixcbiAgICAuLi5TY3JlZW4sXG4gICAgLi4uQ2xpcGJvYXJkLFxuICAgIC4uLkRyYWdBbmREcm9wLFxuICAgIEV2ZW50c09uLFxuICAgIEV2ZW50c09uY2UsXG4gICAgRXZlbnRzT25NdWx0aXBsZSxcbiAgICBFdmVudHNFbWl0LFxuICAgIEV2ZW50c09mZixcbiAgICBFbnZpcm9ubWVudCxcbiAgICBTaG93LFxuICAgIEhpZGUsXG4gICAgUXVpdFxufTtcblxuLy8gSW50ZXJuYWwgd2FpbHMgZW5kcG9pbnRzXG53aW5kb3cud2FpbHMgPSB7XG4gICAgQ2FsbGJhY2ssXG4gICAgRXZlbnRzTm90aWZ5LFxuICAgIFNldEJpbmRpbmdzLFxuICAgIGV2ZW50TGlzdGVuZXJzLFxuICAgIGNhbGxiYWNrcyxcbiAgICBmbGFnczoge1xuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyRHJhZzogZmFsc2UsXG4gICAgICAgIGRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnU6IGZhbHNlLFxuICAgICAgICBlbmFibGVSZXNpemU6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0Q3Vyc29yOiBudWxsLFxuICAgICAgICBib3JkZXJUaGlja25lc3M6IDYsXG4gICAgICAgIHNob3VsZERyYWc6IGZhbHNlLFxuICAgICAgICBkZWZlckRyYWdUb01vdXNlTW92ZTogdHJ1ZSxcbiAgICAgICAgY3NzRHJhZ1Byb3BlcnR5OiBcIi0td2FpbHMtZHJhZ2dhYmxlXCIsXG4gICAgICAgIGNzc0RyYWdWYWx1ZTogXCJkcmFnXCIsXG4gICAgICAgIGNzc0Ryb3BQcm9wZXJ0eTogXCItLXdhaWxzLWRyb3AtdGFyZ2V0XCIsXG4gICAgICAgIGNzc0Ryb3BWYWx1ZTogXCJkcm9wXCIsXG4gICAgICAgIGVuYWJsZVdhaWxzRHJhZ0FuZERyb3A6IGZhbHNlLFxuICAgIH1cbn07XG5cbi8vIFNldCB0aGUgYmluZGluZ3NcbmlmICh3aW5kb3cud2FpbHNiaW5kaW5ncykge1xuICAgIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncyh3aW5kb3cud2FpbHNiaW5kaW5ncyk7XG4gICAgZGVsZXRlIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncztcbn1cblxuLy8gKGJvb2wpIFRoaXMgaXMgZXZhbHVhdGVkIGF0IGJ1aWxkIHRpbWUgaW4gcGFja2FnZS5qc29uXG5pZiAoIURFQlVHKSB7XG4gICAgZGVsZXRlIHdpbmRvdy53YWlsc2JpbmRpbmdzO1xufVxuXG5sZXQgZHJhZ1Rlc3QgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciB2YWwgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLnRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1Byb3BlcnR5KTtcbiAgICBpZiAodmFsKSB7XG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodmFsICE9PSB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZS5idXR0b25zICE9PSAxKSB7XG4gICAgICAgIC8vIERvIG5vdCBzdGFydCBkcmFnZ2luZyBpZiBub3QgdGhlIHByaW1hcnkgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZS5kZXRhaWwgIT09IDEpIHtcbiAgICAgICAgLy8gRG8gbm90IHN0YXJ0IGRyYWdnaW5nIGlmIG1vcmUgdGhhbiBvbmNlIGhhcyBiZWVuIGNsaWNrZWQsIGUuZy4gd2hlbiBkb3VibGUgY2xpY2tpbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xufTtcblxud2luZG93LndhaWxzLnNldENTU0RyYWdQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1ZhbHVlID0gdmFsdWU7XG59XG5cbndpbmRvdy53YWlscy5zZXRDU1NEcm9wUHJvcGVydGllcyA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSA9IHZhbHVlO1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICAvLyBDaGVjayBmb3IgcmVzaXppbmdcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpIHtcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZHJhZ1Rlc3QoZSkpIHtcbiAgICAgICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlU2Nyb2xsYmFyRHJhZykge1xuICAgICAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGNsaWNrcyBvbiB0aGUgc2Nyb2xsIGJhclxuICAgICAgICAgICAgaWYgKGUub2Zmc2V0WCA+IGUudGFyZ2V0LmNsaWVudFdpZHRoIHx8IGUub2Zmc2V0WSA+IGUudGFyZ2V0LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmVyRHJhZ1RvTW91c2VNb3ZlKSB7XG4gICAgICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZShcImRyYWdcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gZmFsc2U7XG4gICAgfVxufSk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xuICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gZmFsc2U7XG59KTtcblxuZnVuY3Rpb24gc2V0UmVzaXplKGN1cnNvcikge1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBjdXJzb3IgfHwgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3I7XG4gICAgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgPSBjdXJzb3I7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZykge1xuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xuICAgICAgICBsZXQgbW91c2VQcmVzc2VkID0gZS5idXR0b25zICE9PSB1bmRlZmluZWQgPyBlLmJ1dHRvbnMgOiBlLndoaWNoO1xuICAgICAgICBpZiAobW91c2VQcmVzc2VkID4gMCkge1xuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVSZXNpemUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPT0gbnVsbCkge1xuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I7XG4gICAgfVxuICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MgJiYgd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcykge1xuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJzZS1yZXNpemVcIjtcbiAgICB9XG4gICAgbGV0IHJpZ2h0Qm9yZGVyID0gd2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xuICAgIGxldCBsZWZ0Qm9yZGVyID0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcbiAgICBsZXQgdG9wQm9yZGVyID0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcbiAgICBsZXQgYm90dG9tQm9yZGVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcblxuICAgIC8vIElmIHdlIGFyZW4ndCBvbiBhbiBlZGdlLCBidXQgd2VyZSwgcmVzZXQgdGhlIGN1cnNvciB0byBkZWZhdWx0XG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRSZXNpemUoKTtcbiAgICB9IGVsc2UgaWYgKHJpZ2h0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic2UtcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzdy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiB0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm53LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIgJiYgcmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcIm5lLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyKSBzZXRSZXNpemUoXCJ3LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm4tcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwicy1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAocmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcImUtcmVzaXplXCIpO1xuXG59KTtcblxuLy8gU2V0dXAgY29udGV4dCBtZW51IGhvb2tcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uIChlKSB7XG4gICAgLy8gYWx3YXlzIHNob3cgdGhlIGNvbnRleHRtZW51IGluIGRlYnVnICYgZGV2XG4gICAgaWYgKERFQlVHKSByZXR1cm47XG5cbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnRleHRNZW51LnByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZSk7XG4gICAgfVxufSk7XG5cbndpbmRvdy5XYWlsc0ludm9rZShcInJ1bnRpbWU6cmVhZHlcIik7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsV0FBUyxlQUFlLE9BQU8sU0FBUztBQUl2QyxXQUFPLFlBQVksTUFBTSxRQUFRLE9BQU87QUFBQSxFQUN6QztBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsUUFBUSxTQUFTO0FBQ2hDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxXQUFXLFNBQVM7QUFDbkMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX19cclxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vKipcclxuICogU2VuZHMgYSBsb2cgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB3aXRoIHRoZSBnaXZlbiBsZXZlbCArIG1lc3NhZ2VcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xyXG5cclxuXHQvLyBMb2cgTWVzc2FnZSBmb3JtYXQ6XHJcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxyXG5cdHdpbmRvdy5XYWlsc0ludm9rZSgnTCcgKyBsZXZlbCArIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB0cmFjZSBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1RyYWNlKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnVCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1ByaW50KG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBkZWJ1ZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnRCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBpbmZvIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nSW5mbyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0knLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1dhcm5pbmcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdFJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGZhdGFsIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRmF0YWwobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdGJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNldExvZ0xldmVsKGxvZ2xldmVsKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XHJcbn1cclxuXHJcbi8vIExvZyBsZXZlbHNcclxuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xyXG5cdFRSQUNFOiAxLFxyXG5cdERFQlVHOiAyLFxyXG5cdElORk86IDMsXHJcblx0V0FSTklORzogNCxcclxuXHRFUlJPUjogNSxcclxufTtcclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuLy8gRGVmaW5lcyBhIHNpbmdsZSBsaXN0ZW5lciB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbGJhY2tcclxuXHJcbi8qKlxyXG4gKiBUaGUgTGlzdGVuZXIgY2xhc3MgZGVmaW5lcyBhIGxpc3RlbmVyISA6LSlcclxuICpcclxuICogQGNsYXNzIExpc3RlbmVyXHJcbiAqL1xyXG5jbGFzcyBMaXN0ZW5lciB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heENhbGxiYWNrc1xyXG4gICAgICogQG1lbWJlcm9mIExpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcclxuICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBnaXZlbiBkYXRhXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxyXG4gICAgICAgIHRoaXMuQ2FsbGJhY2sgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhDYWxsYmFja3MgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRGVjcmVtZW50IG1heENhbGxiYWNrcy4gUmV0dXJuIHRydWUgaWYgbm93IDAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGV2ZW50TGlzdGVuZXJzID0ge307XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGBtYXhDYWxsYmFja3NgIHRpbWVzIGJlZm9yZSBiZWluZyBkZXN0cm95ZWRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XHJcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh0aGlzTGlzdGVuZXIpO1xyXG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVyT2ZmKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoZXZlbnREYXRhKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBldmVudCBuYW1lXHJcbiAgICBsZXQgZXZlbnROYW1lID0gZXZlbnREYXRhLm5hbWU7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgbGlzdGVuZXJzIGZvciB0aGlzIGV2ZW50XHJcbiAgICBpZiAoZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSkge1xyXG5cclxuICAgICAgICAvLyBLZWVwIGEgbGlzdCBvZiBsaXN0ZW5lciBpbmRleGVzIHRvIGRlc3Ryb3lcclxuICAgICAgICBjb25zdCBuZXdFdmVudExpc3RlbmVyTGlzdCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uc2xpY2UoKTtcclxuXHJcbiAgICAgICAgLy8gSXRlcmF0ZSBsaXN0ZW5lcnNcclxuICAgICAgICBmb3IgKGxldCBjb3VudCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoIC0gMTsgY291bnQgPj0gMDsgY291bnQgLT0gMSkge1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IG5leHQgbGlzdGVuZXJcclxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdW2NvdW50XTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnREYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcclxuICAgICAgICAgICAgY29uc3QgZGVzdHJveSA9IGxpc3RlbmVyLkNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcclxuICAgICAgICAgICAgICAgIG5ld0V2ZW50TGlzdGVuZXJMaXN0LnNwbGljZShjb3VudCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBjYWxsYmFja3Mgd2l0aCBuZXcgbGlzdCBvZiBsaXN0ZW5lcnNcclxuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSkge1xyXG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xyXG4gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFWCcgKyBldmVudE5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT24sXHJcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09mZihldmVudE5hbWUsIC4uLmFkZGl0aW9uYWxFdmVudE5hbWVzKSB7XHJcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXHJcblxyXG4gICAgaWYgKGFkZGl0aW9uYWxFdmVudE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGFsbCBldmVudCBsaXN0ZW5lcnMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT25cclxuICovXHJcbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xyXG4gICAgY29uc3QgZXZlbnROYW1lcyA9IE9iamVjdC5rZXlzKGV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpICE9PSBldmVudE5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lc1tpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBsaXN0ZW5lck9mZiB1bnJlZ2lzdGVycyBhIGxpc3RlbmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIEV2ZW50c09uXHJcbiAqXHJcbiAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXHJcbiAqL1xyXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcclxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGxpc3RlbmVyLmV2ZW50TmFtZTtcclxuICAgIC8vIFJlbW92ZSBsb2NhbCBsaXN0ZW5lclxyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xyXG5cclxuICAgIC8vIENsZWFuIHVwIGlmIHRoZXJlIGFyZSBubyBldmVudCBsaXN0ZW5lcnMgbGVmdFxyXG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lKTtcclxuICAgIH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cclxuICpcclxuICogQHJldHVybnMgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7XHJcblx0dmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xyXG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHVzaW5nIGRhIG9sZC1za29vbCBNYXRoLlJhbmRvbVxyXG4gKiBJIGxpa2VzIHRvIGNhbGwgaXQgTE9MUmFuZG9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XHJcblx0cmV0dXJuIE1hdGgucmFuZG9tKCkgKiA5MDA3MTk5MjU0NzQwOTkxO1xyXG59XHJcblxyXG4vLyBQaWNrIGEgcmFuZG9tIG51bWJlciBmdW5jdGlvbiBiYXNlZCBvbiBicm93c2VyIGNhcGFiaWxpdHlcclxudmFyIHJhbmRvbUZ1bmM7XHJcbmlmICh3aW5kb3cuY3J5cHRvKSB7XHJcblx0cmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTtcclxufSBlbHNlIHtcclxuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2FsbCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgdG8gY2FsbCB0aGUgYmluZGluZyB3aXRoIHRoZVxyXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXHJcbiAqIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsXHJcbiAqIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIGlzIHBhc3NlZCBiYWNrLlxyXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXHJcbiAqIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge2FueT19IGFyZ3NcclxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XHJcblxyXG5cdC8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdFxyXG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuXHRcdHRpbWVvdXQgPSAwO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgcHJvbWlzZVxyXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuXHRcdHZhciBjYWxsYmFja0lEO1xyXG5cdFx0ZG8ge1xyXG5cdFx0XHRjYWxsYmFja0lEID0gbmFtZSArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuXHRcdH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG5cdFx0dmFyIHRpbWVvdXRIYW5kbGU7XHJcblx0XHQvLyBTZXQgdGltZW91dFxyXG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QoRXJyb3IoJ0NhbGwgdG8gJyArIG5hbWUgKyAnIHRpbWVkIG91dC4gUmVxdWVzdCBJRDogJyArIGNhbGxiYWNrSUQpKTtcclxuXHRcdFx0fSwgdGltZW91dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcclxuXHRcdGNhbGxiYWNrc1tjYWxsYmFja0lEXSA9IHtcclxuXHRcdFx0dGltZW91dEhhbmRsZTogdGltZW91dEhhbmRsZSxcclxuXHRcdFx0cmVqZWN0OiByZWplY3QsXHJcblx0XHRcdHJlc29sdmU6IHJlc29sdmVcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0Y2FsbGJhY2tJRCxcclxuXHRcdFx0fTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1ha2UgdGhlIGNhbGxcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG53aW5kb3cuT2JmdXNjYXRlZENhbGwgPSAoaWQsIGFyZ3MsIHRpbWVvdXQpID0+IHtcclxuXHJcbiAgICAvLyBUaW1lb3V0IGluZmluaXRlIGJ5IGRlZmF1bHRcclxuICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuICAgICAgICB0aW1lb3V0ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBwcm9taXNlXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYSB1bmlxdWUgY2FsbGJhY2tJRFxyXG4gICAgICAgIHZhciBjYWxsYmFja0lEO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgY2FsbGJhY2tJRCA9IGlkICsgJy0nICsgcmFuZG9tRnVuYygpO1xyXG4gICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lb3V0SGFuZGxlO1xyXG4gICAgICAgIC8vIFNldCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcignQ2FsbCB0byBtZXRob2QgJyArIGlkICsgJyB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICcgKyBjYWxsYmFja0lEKSk7XHJcbiAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3RvcmUgY2FsbGJhY2tcclxuICAgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XHJcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGU6IHRpbWVvdXRIYW5kbGUsXHJcbiAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxyXG4gICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRpZCxcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGNhbGxiYWNrSUQsXHJcblx0XHRcdH07XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBjYWxsXHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnYycgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQ2FsbGVkIGJ5IHRoZSBiYWNrZW5kIHRvIHJldHVybiBkYXRhIHRvIGEgcHJldmlvdXNseSBjYWxsZWRcclxuICogYmluZGluZyBpbnZvY2F0aW9uXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGluY29taW5nTWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENhbGxiYWNrKGluY29taW5nTWVzc2FnZSkge1xyXG5cdC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcblx0bGV0IG1lc3NhZ2U7XHJcblx0dHJ5IHtcclxuXHRcdG1lc3NhZ2UgPSBKU09OLnBhcnNlKGluY29taW5nTWVzc2FnZSk7XHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgSW52YWxpZCBKU09OIHBhc3NlZCB0byBjYWxsYmFjazogJHtlLm1lc3NhZ2V9LiBNZXNzYWdlOiAke2luY29taW5nTWVzc2FnZX1gO1xyXG5cdFx0cnVudGltZS5Mb2dEZWJ1ZyhlcnJvcik7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRsZXQgY2FsbGJhY2tJRCA9IG1lc3NhZ2UuY2FsbGJhY2tpZDtcclxuXHRsZXQgY2FsbGJhY2tEYXRhID0gY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cdGlmICghY2FsbGJhY2tEYXRhKSB7XHJcblx0XHRjb25zdCBlcnJvciA9IGBDYWxsYmFjayAnJHtjYWxsYmFja0lEfScgbm90IHJlZ2lzdGVyZWQhISFgO1xyXG5cdFx0Y29uc29sZS5lcnJvcihlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcclxuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0fVxyXG5cdGNsZWFyVGltZW91dChjYWxsYmFja0RhdGEudGltZW91dEhhbmRsZSk7XHJcblxyXG5cdGRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJRF07XHJcblxyXG5cdGlmIChtZXNzYWdlLmVycm9yKSB7XHJcblx0XHRjYWxsYmFja0RhdGEucmVqZWN0KG1lc3NhZ2UuZXJyb3IpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjYWxsYmFja0RhdGEucmVzb2x2ZShtZXNzYWdlLnJlc3VsdCk7XHJcblx0fVxyXG59XHJcbiIsICIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX18gICAgXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gICkgXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fLyAgXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gJy4vY2FsbHMnO1xyXG5cclxuLy8gVGhpcyBpcyB3aGVyZSB3ZSBiaW5kIGdvIG1ldGhvZCB3cmFwcGVyc1xyXG53aW5kb3cuZ28gPSB7fTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTZXRCaW5kaW5ncyhiaW5kaW5nc01hcCkge1xyXG5cdHRyeSB7XHJcblx0XHRiaW5kaW5nc01hcCA9IEpTT04ucGFyc2UoYmluZGluZ3NNYXApO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXNlIHRoZSBiaW5kaW5ncyBtYXBcclxuXHR3aW5kb3cuZ28gPSB3aW5kb3cuZ28gfHwge307XHJcblxyXG5cdC8vIEl0ZXJhdGUgcGFja2FnZSBuYW1lc1xyXG5cdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwKS5mb3JFYWNoKChwYWNrYWdlTmFtZSkgPT4ge1xyXG5cclxuXHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0d2luZG93LmdvW3BhY2thZ2VOYW1lXSA9IHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gfHwge307XHJcblxyXG5cdFx0Ly8gSXRlcmF0ZSBzdHJ1Y3QgbmFtZXNcclxuXHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXSkuZm9yRWFjaCgoc3RydWN0TmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIGlubmVyIG1hcCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcblx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoYmluZGluZ3NNYXBbcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdKS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XHJcblxyXG5cdFx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV1bbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTm8gdGltZW91dCBieSBkZWZhdWx0XHJcblx0XHRcdFx0XHRsZXQgdGltZW91dCA9IDA7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWN0dWFsIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRmdW5jdGlvbiBkeW5hbWljKCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FsbChbcGFja2FnZU5hbWUsIHN0cnVjdE5hbWUsIG1ldGhvZE5hbWVdLmpvaW4oJy4nKSwgYXJncywgdGltZW91dCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWxsb3cgc2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRkeW5hbWljLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAobmV3VGltZW91dCkge1xyXG5cdFx0XHRcdFx0XHR0aW1lb3V0ID0gbmV3VGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWxsb3cgZ2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRkeW5hbWljLmdldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aW1lb3V0O1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gZHluYW1pYztcclxuXHRcdFx0XHR9KCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn1cclxuIiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkQXBwKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVNEVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TGlnaHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FMVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0RGFya1RoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQbGFjZSB0aGUgd2luZG93IGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93Q2VudGVyKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgd2luZG93IHRpdGxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1QnICsgdGl0bGUpO1xyXG59XHJcblxyXG4vKipcclxuICogTWFrZXMgdGhlIHdpbmRvdyBnbyBmdWxsc2NyZWVuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXRicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV2ZXJ0cyB0aGUgd2luZG93IGZyb20gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXZicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgaW4gZnVsbCBzY3JlZW4gbW9kZSBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc0Z1bGxzY3JlZW4oKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc0Z1bGxzY3JlZW5cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dzOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8e3c6IG51bWJlciwgaDogbnVtYmVyfT59IFRoZSBzaXplIG9mIHRoZSB3aW5kb3dcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93R2V0U2l6ZSgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFNpemVcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNYXhTaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldE1pblNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXejonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIHdpbmRvdyBBbHdheXNPblRvcCBvciBub3Qgb24gdG9wXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRBbHdheXNPblRvcChiKSB7XHJcblxyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVRQOicgKyAoYiA/ICcxJyA6ICcwJykpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRQb3NpdGlvbih4LCB5KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dwOicgKyB4ICsgJzonICsgeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIFBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt4OiBudW1iZXIsIHk6IG51bWJlcn0+fSBUaGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93R2V0UG9zXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogSGlkZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dIaWRlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXSCcpO1xyXG59XHJcblxyXG4vKipcclxuICogU2hvdyB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTaG93KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUycpO1xyXG59XHJcblxyXG4vKipcclxuICogTWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWF4aW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dNJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIE1heGltaXNlIG9mIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU1heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdCcpO1xyXG59XHJcblxyXG4vKipcclxuICogVW5tYXhpbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXVScpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgbWF4aW1pc2VkIG9yIG5vdC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTWF4aW1pc2VkKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNNYXhpbWlzZWRcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNaW5pbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dNaW5pbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV20nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWluaW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5taW5pbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1pbmltaXNlZCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01pbmltaXNlZCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWluaW1pc2VkXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgbm9ybWFsIG9yIG5vdC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTm9ybWFsKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNOb3JtYWxcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG91ciBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IFIgUmVkXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBHIEdyZWVuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBCIEJsdWVcclxuICogQHBhcmFtIHtudW1iZXJ9IEEgQWxwaGFcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRCYWNrZ3JvdW5kQ29sb3VyKFIsIEcsIEIsIEEpIHtcclxuICAgIGxldCByZ2JhID0gSlNPTi5zdHJpbmdpZnkoe3I6IFIgfHwgMCwgZzogRyB8fCAwLCBiOiBCIHx8IDAsIGE6IEEgfHwgMjU1fSk7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dyOicgKyByZ2JhKTtcclxufVxyXG5cclxuIiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGFsbCBzY3JlZW5zLiBDYWxsIHRoaXMgYW5ldyBlYWNoIHRpbWUgeW91IHdhbnQgdG8gcmVmcmVzaCBkYXRhIGZyb20gdGhlIHVuZGVybHlpbmcgd2luZG93aW5nIHN5c3RlbS5cclxuICogQGV4cG9ydFxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi93cmFwcGVyL3J1bnRpbWUnKS5TY3JlZW59IFNjcmVlblxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtTY3JlZW5bXX0+fSBUaGUgc2NyZWVuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNjcmVlbkdldEFsbCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOlNjcmVlbkdldEFsbFwiKTtcclxufVxyXG4iLCAiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbjogVXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBicm93c2VyIHRvIG9wZW4gdGhlIHVybFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFxyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEJyb3dzZXJPcGVuVVJMKHVybCkge1xyXG4gIHdpbmRvdy5XYWlsc0ludm9rZSgnQk86JyArIHVybCk7XHJcbn0iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG5cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgU2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDbGlwYm9hcmRTZXRUZXh0KHRleHQpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkNsaXBib2FyZFNldFRleHRcIiwgW3RleHRdKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtzdHJpbmd9Pn0gVGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkR2V0VGV4dCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkNsaXBib2FyZEdldFRleHRcIik7XHJcbn0iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG5cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5cclxuaW1wb3J0IHtFdmVudHNPbiwgRXZlbnRzT2ZmfSBmcm9tIFwiLi9ldmVudHNcIjtcclxuXHJcbmNvbnN0IGZsYWdzID0ge1xyXG4gICAgcmVnaXN0ZXJlZDogZmFsc2UsXHJcbiAgICBkZWZhdWx0VXNlRHJvcFRhcmdldDogdHJ1ZSxcclxuICAgIHVzZURyb3BUYXJnZXQ6IHRydWUsXHJcbiAgICBuZXh0RGVhY3RpdmF0ZTogbnVsbCxcclxuICAgIG5leHREZWFjdGl2YXRlVGltZW91dDogbnVsbCxcclxufTtcclxuXHJcbmNvbnN0IERST1BfVEFSR0VUX0FDVElWRSA9IFwid2FpbHMtZHJvcC10YXJnZXQtYWN0aXZlXCI7XHJcblxyXG4vKipcclxuICogY2hlY2tTdHlsZURyb3BUYXJnZXQgY2hlY2tzIGlmIHRoZSBzdHlsZSBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBjaGVja1N0eWxlRHJvcFRhcmdldChzdHlsZSkge1xyXG4gICAgY29uc3QgY3NzRHJvcFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5KS50cmltKCk7XHJcbiAgICBpZiAoY3NzRHJvcFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGNzc0Ryb3BWYWx1ZSA9PT0gd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBkcm9wIHRhcmdldCBhdHRyaWJ1dGUsIGJ1dFxyXG4gICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBub3QgY29ycmVjdCwgdGVybWluYXRlIGZpbmRpbmcgcHJvY2Vzcy5cclxuICAgICAgICAvLyBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYmxvY2sgc29tZSBjaGlsZCBlbGVtZW50cyBmcm9tIGJlaW5nIGRyb3AgdGFyZ2V0cy5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBvbkRyYWdPdmVyIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnb3ZlciBldmVudCBpcyBlbWl0dGVkLlxyXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZVxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gb25EcmFnT3ZlcihlKSB7XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQ7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBkZWJvdW5jZSBmdW5jdGlvbiB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0c1xyXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbnVsbCBvciBlbGVtZW50IGlzIG5vdCBjaGlsZCBvZiBkcm9wIHRhcmdldCBlbGVtZW50XHJcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcclxuICAgICAgICAvLyBjaGVjayBpZiBjdXJyZW50RWxlbWVudCBpcyBkcm9wIHRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgaWYgKGNoZWNrU3R5bGVEcm9wVGFyZ2V0KGN1cnJlbnRFbGVtZW50LnN0eWxlKSkge1xyXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKERST1BfVEFSR0VUX0FDVElWRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIG9uRHJhZ0xlYXZlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnbGVhdmUgZXZlbnQgaXMgZW1pdHRlZC5cclxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGVcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIG9uRHJhZ0xlYXZlKGUpIHtcclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmQgdGhlIGNsb3NlIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgIGlmICghZS50YXJnZXQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZS50YXJnZXQpKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcclxuICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xyXG5cclxuICAgIC8vIFVzZSBkZWJvdW5jZSB0ZWNobmlxdWUgdG8gdGFjbGUgZHJhZ2xlYXZlIGV2ZW50cyBvbiBvdmVybGFwcGluZyBlbGVtZW50cyBhbmQgZHJvcCB0YXJnZXQgZWxlbWVudHNcclxuICAgIGZsYWdzLm5leHREZWFjdGl2YXRlID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0cywgbmV3IGRyb3AgdGFyZ2V0IHdpbGwgYmUgYWN0aXZhdGVkIG9uIG5leHQgZHJhZ292ZXIgZXZlbnRcclxuICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoRFJPUF9UQVJHRVRfQUNUSVZFKSkuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKERST1BfVEFSR0VUX0FDVElWRSkpO1xyXG4gICAgICAgIC8vIFJlc2V0IG5leHREZWFjdGl2YXRlXHJcbiAgICAgICAgZmxhZ3MubmV4dERlYWN0aXZhdGUgPSBudWxsO1xyXG4gICAgICAgIC8vIENsZWFyIHRpbWVvdXRcclxuICAgICAgICBpZiAoZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICBmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGltZW91dCB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0cyBpZiBub3QgdHJpZ2dlcmVkIGJ5IG5leHQgZHJhZyBldmVudFxyXG4gICAgZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcbiAgICB9LCA1MCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBvbkRyb3AgaXMgY2FsbGVkIHdoZW4gdGhlIGRyb3AgZXZlbnQgaXMgZW1pdHRlZC5cclxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGVcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIG9uRHJvcChlKSB7XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChDYW5SZXNvbHZlRmlsZVBhdGhzKCkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIGZpbGVzXHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gWy4uLmUuZGF0YVRyYW5zZmVyLml0ZW1zXS5tYXAoKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09ICdmaWxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlcyA9IFsuLi5lLmRhdGFUcmFuc2Zlci5maWxlc107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5ydW50aW1lLlJlc29sdmVGaWxlUGF0aHMoZS54LCBlLnksIGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZsYWdzLnVzZURyb3BUYXJnZXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVHJpZ2dlciBkZWJvdW5jZSBmdW5jdGlvbiB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0c1xyXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgLy8gRGVhY3RpdmF0ZSBhbGwgZHJvcCB0YXJnZXRzXHJcbiAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoRFJPUF9UQVJHRVRfQUNUSVZFKSkuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKERST1BfVEFSR0VUX0FDVElWRSkpO1xyXG59XHJcblxyXG4vKipcclxuICogcG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMgY2hlY2tzIHRoZSBicm93c2VyJ3MgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIHBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYW5SZXNvbHZlRmlsZVBhdGhzKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzICE9IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlRmlsZVBhdGhzIHNlbmRzIGRyb3AgZXZlbnRzIHRvIHRoZSBHTyBzaWRlIHRvIHJlc29sdmUgZmlsZSBwYXRocyBvbiB3aW5kb3dzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge2FueVtdfSBmaWxlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlRmlsZVBhdGhzKHgsIHksIGZpbGVzKSB7XHJcbiAgICAvLyBPbmx5IGZvciB3aW5kb3dzIHdlYnZpZXcyID49IDEuMC4xNzc0LjMwXHJcbiAgICAvLyBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2Uvd2VidmlldzIvcmVmZXJlbmNlL3dpbjMyL2ljb3Jld2VidmlldzJ3ZWJtZXNzYWdlcmVjZWl2ZWRldmVudGFyZ3MyP3ZpZXc9d2VidmlldzItMS4wLjE4MjMuMzIjYXBwbGllcy10b1xyXG4gICAgaWYgKHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzKSB7XHJcbiAgICAgICAgY2hyb21lLndlYnZpZXcucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMoYGZpbGU6ZHJvcDoke3h9OiR7eX1gLCBmaWxlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmb3IgT25GaWxlRHJvcCByZXR1cm5zIGEgc2xpY2Ugb2YgZmlsZSBwYXRoIHN0cmluZ3Mgd2hlbiBhIGRyb3AgaXMgZmluaXNoZWQuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNhbGxiYWNrIE9uRmlsZURyb3BDYWxsYmFja1xyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIHggY29vcmRpbmF0ZSBvZiB0aGUgZHJvcFxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIHkgY29vcmRpbmF0ZSBvZiB0aGUgZHJvcFxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyAtIEEgbGlzdCBvZiBmaWxlIHBhdGhzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPbkZpbGVEcm9wIGxpc3RlbnMgdG8gZHJhZyBhbmQgZHJvcCBldmVudHMgYW5kIGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZHJvcCBhbmQgYW4gYXJyYXkgb2YgcGF0aCBzdHJpbmdzLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7T25GaWxlRHJvcENhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIGZvciBPbkZpbGVEcm9wIHJldHVybnMgYSBzbGljZSBvZiBmaWxlIHBhdGggc3RyaW5ncyB3aGVuIGEgZHJvcCBpcyBmaW5pc2hlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlRHJvcFRhcmdldD10cnVlXSAtIE9ubHkgY2FsbCB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgZHJvcCBmaW5pc2hlZCBvbiBhbiBlbGVtZW50IHRoYXQgaGFzIHRoZSBkcm9wIHRhcmdldCBzdHlsZS4gKC0td2FpbHMtZHJvcC10YXJnZXQpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gT25GaWxlRHJvcChjYWxsYmFjaywgdXNlRHJvcFRhcmdldCkge1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkRyYWdBbmREcm9wQ2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbGFncy5yZWdpc3RlcmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZmxhZ3MucmVnaXN0ZXJlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgdURUUFQgPSB0eXBlb2YgdXNlRHJvcFRhcmdldDtcclxuICAgIGZsYWdzLnVzZURyb3BUYXJnZXQgPSB1RFRQVCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB1RFRQVCAhPT0gXCJib29sZWFuXCIgPyBmbGFncy5kZWZhdWx0VXNlRHJvcFRhcmdldCA6IHVzZURyb3BUYXJnZXQ7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRyYWdPdmVyKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBvbkRyYWdMZWF2ZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIG9uRHJvcCk7XHJcblxyXG4gICAgbGV0IGNiID0gY2FsbGJhY2s7XHJcbiAgICBpZiAoZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIGNiID0gZnVuY3Rpb24gKHgsIHksIHBhdGhzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIG51bGwgb3IgZWxlbWVudCBpcyBub3QgY2hpbGQgb2YgZHJvcCB0YXJnZXQgZWxlbWVudCwgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFjaGVja1N0eWxlRHJvcFRhcmdldChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsbGJhY2soeCwgeSwgcGF0aHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBFdmVudHNPbihcIndhaWxzOmZpbGUtZHJvcFwiLCBjYik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPbkZpbGVEcm9wT2ZmIHJlbW92ZXMgdGhlIGRyYWcgYW5kIGRyb3AgbGlzdGVuZXJzIGFuZCBoYW5kbGVycy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBPbkZpbGVEcm9wT2ZmKCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgb25EcmFnTGVhdmUpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRyb3ApO1xyXG4gICAgRXZlbnRzT2ZmKFwid2FpbHM6ZmlsZS1kcm9wXCIpO1xyXG4gICAgZmxhZ3MucmVnaXN0ZXJlZCA9IGZhbHNlO1xyXG59XHJcbiIsICIvKlxyXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGF1dG87IChkZWZhdWx0KSB3aWxsIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51IGlmIGNvbnRlbnRFZGl0YWJsZSBpcyB0cnVlIE9SIHRleHQgaGFzIGJlZW4gc2VsZWN0ZWQgT1IgZWxlbWVudCBpcyBpbnB1dCBvciB0ZXh0YXJlYVxyXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IHNob3c7IHdpbGwgYWx3YXlzIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XHJcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogaGlkZTsgd2lsbCBhbHdheXMgaGlkZSB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuXHJcblRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgbGlrZSBub3JtYWwgQ1NTIHJ1bGVzLCBzbyBuZXN0aW5nIHdvcmtzIGFzIGV4cGVjdGVkXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGVmYXVsdENvbnRleHRNZW51KGV2ZW50KSB7XHJcbiAgICAvLyBQcm9jZXNzIGRlZmF1bHQgY29udGV4dCBtZW51XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZGVmYXVsdENvbnRleHRNZW51QWN0aW9uID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1kZWZhdWx0LWNvbnRleHRtZW51XCIpLnRyaW0oKTtcclxuICAgIHN3aXRjaCAoZGVmYXVsdENvbnRleHRNZW51QWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBcInNob3dcIjpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNhc2UgXCJoaWRlXCI6XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0IGhhcyBiZWVuIHNlbGVjdGVkIGFuZCBhY3Rpb24gaXMgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0aW9uID0gKHNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSA9PT0gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRhZ25hbWUgaXMgaW5wdXQgb3IgdGV4dGFyZWFcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gXCJJTlBVVFwiIHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzU2VsZWN0aW9uIHx8ICghZWxlbWVudC5yZWFkT25seSAmJiAhZWxlbWVudC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpZGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxufVxyXG4iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcbmltcG9ydCAqIGFzIExvZyBmcm9tICcuL2xvZyc7XHJcbmltcG9ydCB7ZXZlbnRMaXN0ZW5lcnMsIEV2ZW50c0VtaXQsIEV2ZW50c05vdGlmeSwgRXZlbnRzT2ZmLCBFdmVudHNPbiwgRXZlbnRzT25jZSwgRXZlbnRzT25NdWx0aXBsZX0gZnJvbSAnLi9ldmVudHMnO1xyXG5pbXBvcnQge0NhbGwsIENhbGxiYWNrLCBjYWxsYmFja3N9IGZyb20gJy4vY2FsbHMnO1xyXG5pbXBvcnQge1NldEJpbmRpbmdzfSBmcm9tIFwiLi9iaW5kaW5nc1wiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XHJcbmltcG9ydCAqIGFzIFNjcmVlbiBmcm9tIFwiLi9zY3JlZW5cIjtcclxuaW1wb3J0ICogYXMgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCI7XHJcbmltcG9ydCAqIGFzIENsaXBib2FyZCBmcm9tIFwiLi9jbGlwYm9hcmRcIjtcclxuaW1wb3J0ICogYXMgRHJhZ0FuZERyb3AgZnJvbSBcIi4vZHJhZ2FuZGRyb3BcIjtcclxuaW1wb3J0ICogYXMgQ29udGV4dE1lbnUgZnJvbSBcIi4vY29udGV4dG1lbnVcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBRdWl0KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdRJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTaG93KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdTJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIaWRlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdIJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkVudmlyb25tZW50XCIpO1xyXG59XHJcblxyXG4vLyBUaGUgSlMgcnVudGltZVxyXG53aW5kb3cucnVudGltZSA9IHtcclxuICAgIC4uLkxvZyxcclxuICAgIC4uLldpbmRvdyxcclxuICAgIC4uLkJyb3dzZXIsXHJcbiAgICAuLi5TY3JlZW4sXHJcbiAgICAuLi5DbGlwYm9hcmQsXHJcbiAgICAuLi5EcmFnQW5kRHJvcCxcclxuICAgIEV2ZW50c09uLFxyXG4gICAgRXZlbnRzT25jZSxcclxuICAgIEV2ZW50c09uTXVsdGlwbGUsXHJcbiAgICBFdmVudHNFbWl0LFxyXG4gICAgRXZlbnRzT2ZmLFxyXG4gICAgRW52aXJvbm1lbnQsXHJcbiAgICBTaG93LFxyXG4gICAgSGlkZSxcclxuICAgIFF1aXRcclxufTtcclxuXHJcbi8vIEludGVybmFsIHdhaWxzIGVuZHBvaW50c1xyXG53aW5kb3cud2FpbHMgPSB7XHJcbiAgICBDYWxsYmFjayxcclxuICAgIEV2ZW50c05vdGlmeSxcclxuICAgIFNldEJpbmRpbmdzLFxyXG4gICAgZXZlbnRMaXN0ZW5lcnMsXHJcbiAgICBjYWxsYmFja3MsXHJcbiAgICBmbGFnczoge1xyXG4gICAgICAgIGRpc2FibGVTY3JvbGxiYXJEcmFnOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlRGVmYXVsdENvbnRleHRNZW51OiBmYWxzZSxcclxuICAgICAgICBlbmFibGVSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgIGRlZmF1bHRDdXJzb3I6IG51bGwsXHJcbiAgICAgICAgYm9yZGVyVGhpY2tuZXNzOiA2LFxyXG4gICAgICAgIHNob3VsZERyYWc6IGZhbHNlLFxyXG4gICAgICAgIGRlZmVyRHJhZ1RvTW91c2VNb3ZlOiB0cnVlLFxyXG4gICAgICAgIGNzc0RyYWdQcm9wZXJ0eTogXCItLXdhaWxzLWRyYWdnYWJsZVwiLFxyXG4gICAgICAgIGNzc0RyYWdWYWx1ZTogXCJkcmFnXCIsXHJcbiAgICAgICAgY3NzRHJvcFByb3BlcnR5OiBcIi0td2FpbHMtZHJvcC10YXJnZXRcIixcclxuICAgICAgICBjc3NEcm9wVmFsdWU6IFwiZHJvcFwiLFxyXG4gICAgICAgIGVuYWJsZVdhaWxzRHJhZ0FuZERyb3A6IGZhbHNlLFxyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gU2V0IHRoZSBiaW5kaW5nc1xyXG5pZiAod2luZG93LndhaWxzYmluZGluZ3MpIHtcclxuICAgIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncyh3aW5kb3cud2FpbHNiaW5kaW5ncyk7XHJcbiAgICBkZWxldGUgd2luZG93LndhaWxzLlNldEJpbmRpbmdzO1xyXG59XHJcblxyXG4vLyAoYm9vbCkgVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cclxuaWYgKCFERUJVRykge1xyXG4gICAgZGVsZXRlIHdpbmRvdy53YWlsc2JpbmRpbmdzO1xyXG59XHJcblxyXG5sZXQgZHJhZ1Rlc3QgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIHZhbCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUudGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkpO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodmFsICE9PSB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmJ1dHRvbnMgIT09IDEpIHtcclxuICAgICAgICAvLyBEbyBub3Qgc3RhcnQgZHJhZ2dpbmcgaWYgbm90IHRoZSBwcmltYXJ5IGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5kZXRhaWwgIT09IDEpIHtcclxuICAgICAgICAvLyBEbyBub3Qgc3RhcnQgZHJhZ2dpbmcgaWYgbW9yZSB0aGFuIG9uY2UgaGFzIGJlZW4gY2xpY2tlZCwgZS5nLiB3aGVuIGRvdWJsZSBjbGlja2luZ1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbndpbmRvdy53YWlscy5zZXRDU1NEcmFnUHJvcGVydGllcyA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkgPSBwcm9wZXJ0eTtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUgPSB2YWx1ZTtcclxufVxyXG5cclxud2luZG93LndhaWxzLnNldENTU0Ryb3BQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BQcm9wZXJ0eSA9IHByb3BlcnR5O1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSA9IHZhbHVlO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuICAgIC8vIENoZWNrIGZvciByZXNpemluZ1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKSB7XHJcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyYWdUZXN0KGUpKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlU2Nyb2xsYmFyRHJhZykge1xyXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXHJcbiAgICAgICAgICAgIGlmIChlLm9mZnNldFggPiBlLnRhcmdldC5jbGllbnRXaWR0aCB8fCBlLm9mZnNldFkgPiBlLnRhcmdldC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmVyRHJhZ1RvTW91c2VNb3ZlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gY3Vyc29yIHx8IHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yO1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgPSBjdXJzb3I7XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnKSB7XHJcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgbW91c2VQcmVzc2VkID0gZS5idXR0b25zICE9PSB1bmRlZmluZWQgPyBlLmJ1dHRvbnMgOiBlLndoaWNoO1xyXG4gICAgICAgIGlmIChtb3VzZVByZXNzZWQgPiAwKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZShcImRyYWdcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVSZXNpemUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPT0gbnVsbCkge1xyXG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MgJiYgd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcykge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcInNlLXJlc2l6ZVwiO1xyXG4gICAgfVxyXG4gICAgbGV0IHJpZ2h0Qm9yZGVyID0gd2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGxlZnRCb3JkZXIgPSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IHRvcEJvcmRlciA9IGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcbiAgICBsZXQgYm90dG9tQm9yZGVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuXHJcbiAgICAvLyBJZiB3ZSBhcmVuJ3Qgb24gYW4gZWRnZSwgYnV0IHdlcmUsIHJlc2V0IHRoZSBjdXJzb3IgdG8gZGVmYXVsdFxyXG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHNldFJlc2l6ZSgpO1xyXG4gICAgfSBlbHNlIGlmIChyaWdodEJvcmRlciAmJiBib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInNlLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzdy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIHRvcEJvcmRlcikgc2V0UmVzaXplKFwibnctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAodG9wQm9yZGVyICYmIHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJuZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyKSBzZXRSZXNpemUoXCJ3LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlcikgc2V0UmVzaXplKFwibi1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInMtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAocmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcImUtcmVzaXplXCIpO1xyXG5cclxufSk7XHJcblxyXG4vLyBTZXR1cCBjb250ZXh0IG1lbnUgaG9va1xyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgLy8gYWx3YXlzIHNob3cgdGhlIGNvbnRleHRtZW51IGluIGRlYnVnICYgZGV2XHJcbiAgICBpZiAoREVCVUcpIHJldHVybjtcclxuXHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIENvbnRleHRNZW51LnByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxud2luZG93LldhaWxzSW52b2tlKFwicnVudGltZTpyZWFkeVwiKTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQSxXQUFTLGVBQWUsT0FBTyxTQUFTO0FBSXZDLFdBQU8sWUFBWSxNQUFNLFFBQVEsT0FBTztBQUFBLEVBQ3pDO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxRQUFRLFNBQVM7QUFDaEMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFdBQVcsU0FBUztBQUNuQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFP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 diff --git a/v2/internal/frontend/runtime/runtime_prod_desktop.js b/v2/internal/frontend/runtime/runtime_prod_desktop.js index 7be603d44..430bedfef 100644 --- a/v2/internal/frontend/runtime/runtime_prod_desktop.js +++ b/v2/internal/frontend/runtime/runtime_prod_desktop.js @@ -1 +1 @@ -(()=>{var j=Object.defineProperty;var g=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};g(b,{LogDebug:()=>X,LogError:()=>q,LogFatal:()=>Q,LogInfo:()=>$,LogLevel:()=>Z,LogPrint:()=>J,LogTrace:()=>N,LogWarning:()=>Y,SetLogLevel:()=>_});function u(e,t){window.WailsInvoke("L"+e+t)}function N(e){u("T",e)}function J(e){u("P",e)}function X(e){u("D",e)}function $(e){u("I",e)}function Y(e){u("W",e)}function q(e){u("E",e)}function Q(e){u("F",e)}function _(e){u("S",e)}var Z={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},w={};function v(e,t,n){w[e]=w[e]||[];let o=new y(e,t,n);return w[e].push(o),()=>K(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name;if(w[t]){let n=w[t].slice();for(let o=w[t].length-1;o>=0;o-=1){let i=w[t][o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?m(t):w[t]=n}}function R(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function M(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function m(e){delete w[e],window.WailsInvoke("EX"+e)}function x(e,...t){m(e),t.length>0&&t.forEach(n=>{m(n)})}function K(e){let t=e.eventName;w[t]=w[t].filter(n=>n!==e),w[t].length===0&&m(t)}var c={};function ee(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function te(){return Math.random()*9007199254740991}var D;window.crypto?D=ee:D=te;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(d))}catch(d){console.error(d)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(d))}catch(d){console.error(d)}}));function z(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function B(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};g(T,{WindowCenter:()=>le,WindowFullscreen:()=>we,WindowGetPosition:()=>We,WindowGetSize:()=>ce,WindowHide:()=>xe,WindowIsFullscreen:()=>fe,WindowIsMaximised:()=>ye,WindowIsMinimised:()=>Se,WindowIsNormal:()=>Ie,WindowMaximise:()=>he,WindowMinimise:()=>Te,WindowReload:()=>ne,WindowReloadApp:()=>oe,WindowSetAlwaysOnTop:()=>me,WindowSetBackgroundColour:()=>Ce,WindowSetDarkTheme:()=>se,WindowSetLightTheme:()=>re,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>pe,WindowSetPosition:()=>ve,WindowSetSize:()=>ue,WindowSetSystemDefaultTheme:()=>ie,WindowSetTitle:()=>ae,WindowShow:()=>De,WindowToggleMaximise:()=>Ee,WindowUnfullscreen:()=>de,WindowUnmaximise:()=>be,WindowUnminimise:()=>ke});function ne(){window.location.reload()}function oe(){window.WailsInvoke("WR")}function ie(){window.WailsInvoke("WASDT")}function re(){window.WailsInvoke("WALT")}function se(){window.WailsInvoke("WADT")}function le(){window.WailsInvoke("Wc")}function ae(e){window.WailsInvoke("WT"+e)}function we(){window.WailsInvoke("WF")}function de(){window.WailsInvoke("Wf")}function fe(){return a(":wails:WindowIsFullscreen")}function ue(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function ce(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function pe(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function me(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ve(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function We(){return a(":wails:WindowGetPos")}function xe(){window.WailsInvoke("WH")}function De(){window.WailsInvoke("WS")}function he(){window.WailsInvoke("WM")}function Ee(){window.WailsInvoke("Wt")}function be(){window.WailsInvoke("WU")}function ye(){return a(":wails:WindowIsMaximised")}function Te(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Se(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Ce(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var k={};g(k,{ScreenGetAll:()=>Oe});function Oe(){return a(":wails:ScreenGetAll")}var S={};g(S,{BrowserOpenURL:()=>Le});function Le(e){window.WailsInvoke("BO:"+e)}var I={};g(I,{ClipboardGetText:()=>Pe,ClipboardSetText:()=>Ae});function Ae(e){return a(":wails:ClipboardSetText",[e])}function Pe(){return a(":wails:ClipboardGetText")}var C={};g(C,{CanResolveFilePaths:()=>U,OnFileDrop:()=>Me,OnFileDropOff:()=>ze,ResolveFilePaths:()=>Re});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},p="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function F(e){if(!window.wails.flags.enableWailsDragAndDrop||(e.preventDefault(),!s.useDropTarget))return;let t=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!t||!h(getComputedStyle(t)))return;let n=t;for(;n;)h(n.style)&&n.classList.add(p),n=n.parentElement}function G(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function H(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget&&(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)),U()))){let t=[];e.dataTransfer.items?t=[...e.dataTransfer.items].map((n,o)=>{if(n.kind==="file")return n.getAsFile()}):t=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,t)}}function U(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Re(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function Me(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",F),window.addEventListener("dragleave",G),window.addEventListener("drop",H);let o=e;s.useDropTarget&&(o=function(i,r,l){let d=document.elementFromPoint(i,r);if(!d||!h(getComputedStyle(d)))return null;e(i,r,l)}),W("wails:file-drop",o)}function ze(){window.removeEventListener("dragover",F),window.removeEventListener("dragleave",G),window.removeEventListener("drop",H),x("wails:file-drop"),s.registered=!1}function V(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ve(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX{var j=Object.defineProperty;var g=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};g(b,{LogDebug:()=>X,LogError:()=>q,LogFatal:()=>Q,LogInfo:()=>$,LogLevel:()=>Z,LogPrint:()=>J,LogTrace:()=>N,LogWarning:()=>Y,SetLogLevel:()=>_});function u(e,t){window.WailsInvoke("L"+e+t)}function N(e){u("T",e)}function J(e){u("P",e)}function X(e){u("D",e)}function $(e){u("I",e)}function Y(e){u("W",e)}function q(e){u("E",e)}function Q(e){u("F",e)}function _(e){u("S",e)}var Z={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},w={};function v(e,t,n){w[e]=w[e]||[];let o=new y(e,t,n);return w[e].push(o),()=>K(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name;if(w[t]){let n=w[t].slice();for(let o=w[t].length-1;o>=0;o-=1){let i=w[t][o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?m(t):w[t]=n}}function R(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function M(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function m(e){delete w[e],window.WailsInvoke("EX"+e)}function x(e,...t){m(e),t.length>0&&t.forEach(n=>{m(n)})}function K(e){let t=e.eventName;w[t]=w[t].filter(n=>n!==e),w[t].length===0&&m(t)}var c={};function ee(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function te(){return Math.random()*9007199254740991}var D;window.crypto?D=ee:D=te;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(d))}catch(d){console.error(d)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(d))}catch(d){console.error(d)}}));function z(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function B(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};g(T,{WindowCenter:()=>le,WindowFullscreen:()=>we,WindowGetPosition:()=>We,WindowGetSize:()=>ce,WindowHide:()=>xe,WindowIsFullscreen:()=>fe,WindowIsMaximised:()=>ye,WindowIsMinimised:()=>Se,WindowIsNormal:()=>Ie,WindowMaximise:()=>he,WindowMinimise:()=>Te,WindowReload:()=>ne,WindowReloadApp:()=>oe,WindowSetAlwaysOnTop:()=>me,WindowSetBackgroundColour:()=>Ce,WindowSetDarkTheme:()=>se,WindowSetLightTheme:()=>re,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>pe,WindowSetPosition:()=>ve,WindowSetSize:()=>ue,WindowSetSystemDefaultTheme:()=>ie,WindowSetTitle:()=>ae,WindowShow:()=>De,WindowToggleMaximise:()=>Ee,WindowUnfullscreen:()=>de,WindowUnmaximise:()=>be,WindowUnminimise:()=>ke});function ne(){window.location.reload()}function oe(){window.WailsInvoke("WR")}function ie(){window.WailsInvoke("WASDT")}function re(){window.WailsInvoke("WALT")}function se(){window.WailsInvoke("WADT")}function le(){window.WailsInvoke("Wc")}function ae(e){window.WailsInvoke("WT"+e)}function we(){window.WailsInvoke("WF")}function de(){window.WailsInvoke("Wf")}function fe(){return a(":wails:WindowIsFullscreen")}function ue(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function ce(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function pe(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function me(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ve(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function We(){return a(":wails:WindowGetPos")}function xe(){window.WailsInvoke("WH")}function De(){window.WailsInvoke("WS")}function he(){window.WailsInvoke("WM")}function Ee(){window.WailsInvoke("Wt")}function be(){window.WailsInvoke("WU")}function ye(){return a(":wails:WindowIsMaximised")}function Te(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Se(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Ce(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var k={};g(k,{ScreenGetAll:()=>Oe});function Oe(){return a(":wails:ScreenGetAll")}var S={};g(S,{BrowserOpenURL:()=>Le});function Le(e){window.WailsInvoke("BO:"+e)}var I={};g(I,{ClipboardGetText:()=>Pe,ClipboardSetText:()=>Ae});function Ae(e){return a(":wails:ClipboardSetText",[e])}function Pe(){return a(":wails:ClipboardGetText")}var C={};g(C,{CanResolveFilePaths:()=>U,OnFileDrop:()=>Me,OnFileDropOff:()=>ze,ResolveFilePaths:()=>Re});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},p="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function F(e){if(!window.wails.flags.enableWailsDragAndDrop||(e.preventDefault(),!s.useDropTarget))return;let t=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!t||!h(getComputedStyle(t)))return;let n=t;for(;n;)h(n.style)&&n.classList.add(p),n=n.parentElement}function G(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function H(e){if(!!window.wails.flags.enableWailsDragAndDrop){if(e.preventDefault(),U()){let t=[];e.dataTransfer.items?t=[...e.dataTransfer.items].map((n,o)=>{if(n.kind==="file")return n.getAsFile()}):t=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,t)}!s.useDropTarget||(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)))}}function U(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Re(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function Me(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",F),window.addEventListener("dragleave",G),window.addEventListener("drop",H);let o=e;s.useDropTarget&&(o=function(i,r,l){let d=document.elementFromPoint(i,r);if(!d||!h(getComputedStyle(d)))return null;e(i,r,l)}),W("wails:file-drop",o)}function ze(){window.removeEventListener("dragover",F),window.removeEventListener("dragleave",G),window.removeEventListener("drop",H),x("wails:file-drop"),s.registered=!1}function V(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ve(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX Date: Fri, 12 Jul 2024 07:38:21 +1000 Subject: [PATCH 003/344] chore: update sponsors.svg (#3591) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 58 ++++++++++++++------------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 1a9985e59..4dd23026e 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -100,98 +100,90 @@ text { - - - - - + - + - + - + - + - + - - - - + - + - + + + + - + - + - + Helpers - + - + - + - - - - - + - + - + - + - + - + - + From 9efaedfe3969cb143afa2a02f2ecf7ed4bdd7e77 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 12 Jul 2024 19:04:04 +1000 Subject: [PATCH 004/344] chore: update sponsors.svg (#3604) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 4dd23026e..aaaa4d86c 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -133,19 +133,15 @@ text { - + - - - - - + - + Helpers From dd6eb0fa7574b21b19b59334948a1d0adb598ef0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:30:35 +1000 Subject: [PATCH 005/344] chore: update sponsors.svg (#3618) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index aaaa4d86c..62dd1252a 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -66,28 +66,32 @@ text { Michael Buying Breakfast - tc-hib - + tc-hib + - Tai Groot - + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + + + + Sander + Buying Coffee From 482f19e6b9f6d2d3dd98137b853e2e141f50ffb6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:11:31 +1000 Subject: [PATCH 006/344] chore: update sponsors.svg (#3619) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 62dd1252a..1c38176f4 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -148,42 +148,46 @@ text { Helpers - + - + - + - + - + - + - + - + - + - + + + + + From e941f36267e9d06fe8fe31b60967b9918ca407a5 Mon Sep 17 00:00:00 2001 From: Alex Pliutau Date: Sat, 20 Jul 2024 00:50:16 +0200 Subject: [PATCH 007/344] #3200: Use OutputFilename instead of Name (#3551) * Use OutputFilename instead of Name * #3200: add changelog entry --------- Co-authored-by: Lea Anthony --- v2/pkg/commands/build/packager.go | 4 ++-- website/src/pages/changelog.mdx | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/v2/pkg/commands/build/packager.go b/v2/pkg/commands/build/packager.go index b58cbbdf3..d406256f9 100644 --- a/v2/pkg/commands/build/packager.go +++ b/v2/pkg/commands/build/packager.go @@ -83,10 +83,10 @@ func packageApplicationForDarwin(options *Options) error { return err } // Copy binary - packedBinaryPath := filepath.Join(exeDir, options.ProjectData.Name) + packedBinaryPath := filepath.Join(exeDir, options.ProjectData.OutputFilename) err = fs.MoveFile(options.CompiledBinary, packedBinaryPath) if err != nil { - return errors.Wrap(err, "Cannot move file: "+options.ProjectData.OutputFilename) + return errors.Wrap(err, "Cannot move file: "+options.CompiledBinary) } // Generate Info.plist diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index c268032f1..e0474c1f1 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed +- Fixed MacOS build to use `outputfilename` from wails.json. [#3200](https://github.com/wailsapp/wails/issues/3200) - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi + Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi From 7a40cc59cab47fa8c714f03d1765a5d38957f3ee Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 20 Jul 2024 15:24:11 +1000 Subject: [PATCH 008/344] chore: update sponsors.svg (#3624) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 1c38176f4..b7b9c1cd4 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -148,46 +148,42 @@ text { Helpers - + - + - + - + - + - + - + - + - - - - - + - + From fe9495d776e9bc6060b830afaadd069a2755c2eb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 28 Jul 2024 11:23:53 +1000 Subject: [PATCH 009/344] chore: update sponsors.svg (#3641) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index b7b9c1cd4..7f99b6f27 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -137,15 +137,11 @@ text { - + - - - - - + Helpers From 5b091db26d9255fe587fb0f3c4254b1c584de05e Mon Sep 17 00:00:00 2001 From: taisei <46064673+taisei-86@users.noreply.github.com> Date: Mon, 29 Jul 2024 20:34:19 +0900 Subject: [PATCH 010/344] Fixed an error that occurred when an author name contains a string that is not suitable for JSON (#3638) * fix(pkg): Fixed an issue where wails new would throw an error if the author name contained non-JSON legal characters. * refactor(pkg): Incorporating coderabbit's suggestions * docs: write changelog.mdx * Escape using json package. Add tests. * Update test. --------- Co-authored-by: Lea O'Anthony --- v2/pkg/git/git.go | 29 +++++++++++++++++++--- v2/pkg/git/git_test.go | 44 +++++++++++++++++++++++++++++++++ website/src/pages/changelog.mdx | 1 + 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 v2/pkg/git/git_test.go diff --git a/v2/pkg/git/git.go b/v2/pkg/git/git.go index 319c5672b..a0ac68ca9 100644 --- a/v2/pkg/git/git.go +++ b/v2/pkg/git/git.go @@ -1,7 +1,8 @@ package git import ( - "html/template" + "encoding/json" + "fmt" "runtime" "strings" @@ -30,9 +31,31 @@ func Email() (string, error) { // Name tries to retrieve the func Name() (string, error) { + errMsg := "failed to retrieve git user name: %w" stdout, _, err := shell.RunCommand(".", gitcommand(), "config", "user.name") - name := template.JSEscapeString(strings.TrimSpace(stdout)) - return name, err + if err != nil { + return "", fmt.Errorf(errMsg, err) + } + name := strings.TrimSpace(stdout) + return EscapeName(name) +} + +func EscapeName(str string) (string, error) { + b, err := json.Marshal(str) + if err != nil { + return "", err + } + // Remove the surrounding quotes + escaped := string(b[1 : len(b)-1]) + + // Check if username is JSON compliant + var js json.RawMessage + jsonVal := fmt.Sprintf(`{"name": "%s"}`, escaped) + err = json.Unmarshal([]byte(jsonVal), &js) + if err != nil { + return "", fmt.Errorf("failed to retrieve git user name: %w", err) + } + return escaped, nil } func InitRepo(projectDir string) error { diff --git a/v2/pkg/git/git_test.go b/v2/pkg/git/git_test.go new file mode 100644 index 000000000..238008ec3 --- /dev/null +++ b/v2/pkg/git/git_test.go @@ -0,0 +1,44 @@ +package git + +import ( + "testing" +) + +func TestEscapeName1(t *testing.T) { + type args struct { + str string + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + { + name: "Escape Apostrophe", + args: args{ + str: `John O'Keefe`, + }, + want: `John O'Keefe`, + }, + { + name: "Escape backslash", + args: args{ + str: `MYDOMAIN\USER`, + }, + want: `MYDOMAIN\\USER`, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := EscapeName(tt.args.str) + if (err != nil) != tt.wantErr { + t.Errorf("EscapeName() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("EscapeName() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index e0474c1f1..db40b108d 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed +- Fixed an error that occurred when an author name contains a string that is not suitable for JSON. Fixed by @taiseiotsuka in [PR](https://github.com/wailsapp/wails/pull/3638) - Fixed MacOS build to use `outputfilename` from wails.json. [#3200](https://github.com/wailsapp/wails/issues/3200) - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi + Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi From ddf27038e1742572263b8af08271379d1dadd828 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:19:37 +1000 Subject: [PATCH 011/344] chore: update sponsors.svg (#3661) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 141 ++++++++++++++++---------------- 1 file changed, 71 insertions(+), 70 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 7f99b6f27..05b0a9077 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -1,5 +1,5 @@ - + -Champion - Masato Miura - -Bronze Sponsors - Cody Bentley - +Bronze Sponsors + Cody Bentley + - Kazuya Gokita - + Kazuya Gokita + - Simon Thomas - + Simon Thomas + - CodeRabbit - -Covering Costs - Nick - + CodeRabbit + +Covering Costs + Nick + - Marcus - + Marcus + - John - + John + - Matt Holt - + Matt Holt + - Iain - + Iain + - Julien - + Julien + - Andrei - + Andrei + - Michael - -Buying Breakfast - tc-hib - + Michael + +Buying Breakfast + tc-hib + - Tai Groot - + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - -Buying Coffee + Sander + +Buying Coffee - + - + - + - + - + - + - + - + - + - + - + - + - -Helpers + +Helpers - + - + - + - + - + - + - + - + - + - + + + + + From 2b35861aeebdb2375ec818f3ad3930eb8ed17ede Mon Sep 17 00:00:00 2001 From: "Ian M. Jones" Date: Sat, 10 Aug 2024 08:27:37 +0100 Subject: [PATCH 012/344] Fix doctor command not finding pkg-config on Solus (#3670) * Fix doctor command not finding pkg-config on Solus * Update changelog --- v2/internal/system/packagemanager/eopkg.go | 2 +- website/src/pages/changelog.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/system/packagemanager/eopkg.go b/v2/internal/system/packagemanager/eopkg.go index dbeab96de..936127eac 100644 --- a/v2/internal/system/packagemanager/eopkg.go +++ b/v2/internal/system/packagemanager/eopkg.go @@ -40,7 +40,7 @@ func (e *Eopkg) Packages() packagemap { {Name: "gcc", SystemPackage: true}, }, "pkg-config": []*Package{ - {Name: "pkg-config", SystemPackage: true}, + {Name: "pkgconf", SystemPackage: true}, }, "npm": []*Package{ {Name: "nodejs", SystemPackage: true}, diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index db40b108d..479c9491d 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed an error that occurred when an author name contains a string that is not suitable for JSON. Fixed by @taiseiotsuka in [PR](https://github.com/wailsapp/wails/pull/3638) - Fixed MacOS build to use `outputfilename` from wails.json. [#3200](https://github.com/wailsapp/wails/issues/3200) - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi -+ Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi +- Fixed doctor command not finding pkg-config on Solus. [PR #3670](https://github.com/wailsapp/wails/pull/3670) by [@ianmjones](https://github.com/ianmjones) ## v2.9.1 - 2024-06-18 From fe1f23b0fd52997b16529a7abb2cfdeb52141601 Mon Sep 17 00:00:00 2001 From: Jeremy Jay Date: Tue, 13 Aug 2024 17:49:08 -0400 Subject: [PATCH 013/344] If a field is exported, generate json even in the absence of tags (#3678) * if no JSON tag, check if field is exported * add no-tags binding test case * update changelog for #3678 --- v2/internal/binding/binding.go | 5 +- .../binding_test/binding_notags_test.go | 59 +++++++++++++++++++ .../binding/binding_test/binding_test.go | 1 + v2/internal/typescriptify/typescriptify.go | 8 ++- website/src/pages/changelog.mdx | 1 + 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 v2/internal/binding/binding_test/binding_notags_test.go diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index 568e11b03..b42718bff 100644 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -350,7 +350,10 @@ func (b *Bindings) hasExportedJSONFields(typeOf reflect.Type) bool { for i := 0; i < typeOf.NumField(); i++ { jsonFieldName := "" f := typeOf.Field(i) - jsonTag := f.Tag.Get("json") + jsonTag, hasTag := f.Tag.Lookup("json") + if !hasTag && f.IsExported() { + return true + } if len(jsonTag) == 0 { continue } diff --git a/v2/internal/binding/binding_test/binding_notags_test.go b/v2/internal/binding/binding_test/binding_notags_test.go new file mode 100644 index 000000000..c59a86e1b --- /dev/null +++ b/v2/internal/binding/binding_test/binding_notags_test.go @@ -0,0 +1,59 @@ +package binding_test + +type NoFieldTags struct { + Name string + Address string + Zip *string + Spouse *NoFieldTags +} + +func (n NoFieldTags) Get() NoFieldTags { + return n +} + +var NoFieldTagsTest = BindingTest{ + name: "NoFieldTags", + structs: []interface{}{ + &NoFieldTags{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + export class NoFieldTags { + Name: string; + Address: string; + Zip?: string; + Spouse?: NoFieldTags; + static createFrom(source: any = {}) { + return new NoFieldTags(source); + } + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Name = source["Name"]; + this.Address = source["Address"]; + this.Zip = source["Zip"]; + this.Spouse = this.convertValues(source["Spouse"], NoFieldTags); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice && a.map) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } +} +`, +} diff --git a/v2/internal/binding/binding_test/binding_test.go b/v2/internal/binding/binding_test/binding_test.go index a16dde5ea..32ebbe056 100644 --- a/v2/internal/binding/binding_test/binding_test.go +++ b/v2/internal/binding/binding_test/binding_test.go @@ -50,6 +50,7 @@ func TestBindings_GenerateModels(t *testing.T) { EntityWithDiffNamespacesTest, SpecialCharacterFieldTest, WithoutFieldsTest, + NoFieldTagsTest, } testLogger := &logger.Logger{} diff --git a/v2/internal/typescriptify/typescriptify.go b/v2/internal/typescriptify/typescriptify.go index 85fea9c42..1d22a1b65 100644 --- a/v2/internal/typescriptify/typescriptify.go +++ b/v2/internal/typescriptify/typescriptify.go @@ -553,7 +553,13 @@ func (t *TypeScriptify) getFieldOptions(structType reflect.Type, field reflect.S func (t *TypeScriptify) getJSONFieldName(field reflect.StructField, isPtr bool) string { jsonFieldName := "" - jsonTag := field.Tag.Get("json") + jsonTag, hasTag := field.Tag.Lookup("json") + if !hasTag && field.IsExported() { + jsonFieldName = field.Name + if isPtr { + jsonFieldName += "?" + } + } if len(jsonTag) > 0 { jsonTagParts := strings.Split(jsonTag, ",") if len(jsonTagParts) > 0 { diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 479c9491d..740c6c877 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed MacOS build to use `outputfilename` from wails.json. [#3200](https://github.com/wailsapp/wails/issues/3200) - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi - Fixed doctor command not finding pkg-config on Solus. [PR #3670](https://github.com/wailsapp/wails/pull/3670) by [@ianmjones](https://github.com/ianmjones) +- Fixed binding for struct fields that were exported but had no json tags. [PR #3678](https://github.com/wailsapp/wails/pull/3678) ## v2.9.1 - 2024-06-18 From 0f61873fe89540f14845bba35cf8aaba4db6a56c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:20:59 +1000 Subject: [PATCH 014/344] chore: update sponsors.svg (#3679) Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 05b0a9077..273c41785 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -17,20 +17,24 @@ text { } Bronze Sponsors - Cody Bentley - + Cody Bentley + - Kazuya Gokita - + Kazuya Gokita + - Simon Thomas - + Simon Thomas + - CodeRabbit - + CodeRabbit + + + + Ansar Smagulov + Covering Costs Nick From d36d1718d9ea4c8f6f4558cae2304865e9a2eec0 Mon Sep 17 00:00:00 2001 From: levinit Date: Sun, 18 Aug 2024 18:43:53 +0800 Subject: [PATCH 015/344] Modified ZoomFactor and IsZoomControlEnabled options to be Windows-only options (#3644) --- website/docs/reference/options.mdx | 30 +++++++++---------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- .../current/reference/options.mdx | 24 +++++++-------- website/src/pages/changelog.mdx | 2 ++ 11 files changed, 125 insertions(+), 123 deletions(-) diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index a6026f126..e94c22f47 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -485,21 +485,6 @@ services of Apple and Microsoft. Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
-Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
-Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while -disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -642,6 +627,21 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
+Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
+Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while +disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/ar/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx index b6211936d..bf62be6e3 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebWebDetection permet de rechercher des contenus frauduleux, te Nom: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Nom: ZoomFactor
Type: `float64` - -Ceci définit le facteur de zoom pour WebView2. Il s'agit de l'option correspondant au zoom avant ou arrière défini par l'utilisateur. - -### IsZoomControlEnabled - -Nom : IsZoomControlEnabled
Type : `bool` - -Cela permet de modifier le facteur de zoom par l'utilisateur. Veuillez noter que le facteur de zoom peut être défini dans les options tandis que ne permet pas à l'utilisateur de le modifier à l'exécution (f.e. pour une application vitrine ou similaire). - ### Bind La liste des structs Go définissant des méthodes qui doivent être liées au frontend. @@ -546,6 +534,18 @@ La valeur peut être l'une des valeurs suivantes : | Mica | Utiliser l'effet [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) | | Tabbed | Utiliser Tabbed. C'est un arrière-plan qui est similaire à Mica. | +#### ZoomFactor + +Nom: ZoomFactor
Type: `float64` + +Ceci définit le facteur de zoom pour WebView2. Il s'agit de l'option correspondant au zoom avant ou arrière défini par l'utilisateur. + +#### IsZoomControlEnabled + +Nom : IsZoomControlEnabled
Type : `bool` + +Cela permet de modifier le facteur de zoom par l'utilisateur. Veuillez noter que le facteur de zoom peut être défini dans les options tandis que ne permet pas à l'utilisateur de le modifier à l'exécution (f.e. pour une application vitrine ou similaire). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx index 9329e93d1..6feebc5d3 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetectionは、マルウェアやフィッシング詐欺 名前: EnableFraudulentWebsiteDetection
データ型: `bool` -### ZoomFactor - -名前: ZoomFactor
データ型: `float64` - -WebView2の拡大率を定義します。 これは、Edgeのユーザによるズームインまたはズームアウトに対応するオプションです。 - -### IsZoomControlEnabled - -名前: IsZoomControlEnabled
データ型: `bool` - -このオプションを有効にすると、拡大率をユーザによって変更することができます。 拡大率の変更がユーザに許可されていない間は、オプションで拡大率を設定することができますのでご注意ください (例: キオスクアプリケーションなど)。 - ### Bind フロントエンドにバインドする必要があるメソッドが定義された、構造体インスタンスのスライスです。 @@ -546,6 +534,18 @@ Name: CSSDropValue
Type: `string`
Default: `drop` | Mica | [マイカ](https://learn.microsoft.com/ja-jp/windows/apps/design/style/mica)の効果を使用する | | Tabbed | タブを使用する。 これはマイカに似ている背景です。 | +#### ZoomFactor + +名前: ZoomFactor
データ型: `float64` + +WebView2の拡大率を定義します。 これは、Edgeのユーザによるズームインまたはズームアウトに対応するオプションです。 + +#### IsZoomControlEnabled + +名前: IsZoomControlEnabled
データ型: `bool` + +このオプションを有効にすると、拡大率をユーザによって変更することができます。 拡大率の変更がユーザに許可されていない間は、オプションで拡大率を設定することができますのでご注意ください (例: キオスクアプリケーションなど)。 + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/tr/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/tr/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/tr/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/tr/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx index 8bcf42047..10b83ce43 100644 --- a/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection enables scan services for fraudulent content, s Name: EnableFraudulentWebsiteDetection
Type: `bool` -### ZoomFactor - -Name: ZoomFactor
Type: `float64` - -This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. - -### IsZoomControlEnabled - -Name: IsZoomControlEnabled
Type: `bool` - -This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). - ### Bind A slice of struct instances defining methods that need to be bound to the frontend. @@ -546,6 +534,18 @@ The value can be one of the following: | Mica | Use [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) effect | | Tabbed | Use Tabbed. This is a backdrop that is similar to Mica. | +#### ZoomFactor + +Name: ZoomFactor
Type: `float64` + +This defines the zoom factor for the WebView2. This is the option matching the Edge user activated zoom in or out. + +#### IsZoomControlEnabled + +Name: IsZoomControlEnabled
Type: `bool` + +This enables the zoom factor to be changed by the user. Please note that the zoom factor can be set in the options while disallowing the user to change it at runtime (f.e. for a kiosk application or similar). + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx index 60e0097af..646150f4d 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/reference/options.mdx @@ -420,18 +420,6 @@ EnableFraudulentWebsiteDetection 启用针对欺诈内容(例如恶意软件 名称:EnableFraudulentWebsiteDetection
类型:`bool` -### 缩放比例 - -名称:ZoomFactor
类型:`float64` - -这定义了 WebView2 的缩放比例。 这是匹配 Edge 用户激活放大或缩小的选项 - -### 启用缩放比例 - -名称:IsZoomControlEnabled
类型:`bool` - -这将允许用户更改缩放比例。 请注意,可以在选项中设置缩放比例,但不允许在运行时更改它。 适用于屏幕固定的或类似的应用程序。 - ### 绑定 定义需要绑定到前端的方法的结构实例切片。 @@ -546,6 +534,18 @@ Name: CSSDropValue
Type: `string`
Default: `drop` | Mica | 使用 [Mica](https://learn.microsoft.com/en-us/windows/apps/design/style/mica) 效果 | | Tabbed | 使用 Tabbed。 这是一个类似于 Mica 的背景。 | +#### 缩放比例 + +名称:ZoomFactor
类型:`float64` + +这定义了 WebView2 的缩放比例。 这是匹配 Edge 用户激活放大或缩小的选项 + +#### 启用缩放比例 + +名称:IsZoomControlEnabled
类型:`bool` + +这将允许用户更改缩放比例。 请注意,可以在选项中设置缩放比例,但不允许在运行时更改它。 适用于屏幕固定的或类似的应用程序。 + #### DisablePinchZoom Setting this to `true` will disable pinch zoom gestures. diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 740c6c877..5ef2121eb 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -20,6 +20,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi - Fixed doctor command not finding pkg-config on Solus. [PR #3670](https://github.com/wailsapp/wails/pull/3670) by [@ianmjones](https://github.com/ianmjones) - Fixed binding for struct fields that were exported but had no json tags. [PR #3678](https://github.com/wailsapp/wails/pull/3678) ++ Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi ++ Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit ## v2.9.1 - 2024-06-18 From 9995dae4ada133c1333cdceae01afcc4737188e7 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 18 Aug 2024 21:04:02 +1000 Subject: [PATCH 016/344] Nil pointer check for DnD (#3597) * Nil pointer check for DnD * Update changelog --- v2/internal/frontend/desktop/windows/frontend.go | 5 +++++ website/src/pages/changelog.mdx | 2 ++ 2 files changed, 7 insertions(+) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 71e90e8e5..806f4ffba 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -740,6 +740,11 @@ func (f *Frontend) processMessageWithAdditionalObjects(message string, sender *e return } + if _file == nil { + f.logger.Warning("object at %d is not a file", i) + continue + } + file := (*edge.ICoreWebView2File)(unsafe.Pointer(_file)) defer file.Release() diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 5ef2121eb..368e41030 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed binding for struct fields that were exported but had no json tags. [PR #3678](https://github.com/wailsapp/wails/pull/3678) + Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi + Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit +- Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). + ## v2.9.1 - 2024-06-18 From 3f83b42db574af5a10f0ed959e30056889227414 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Tue, 20 Aug 2024 18:12:56 +1000 Subject: [PATCH 017/344] FIX: Address Mac CGO Crash (#3590) * Copy request to Go memory * Update changelog.mdx * Update v2/pkg/assetserver/webview/responsewriter_darwin.go Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Fix import --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../webview/responsewriter_darwin.go | 24 +++++++++++++++---- website/src/pages/changelog.mdx | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/v2/pkg/assetserver/webview/responsewriter_darwin.go b/v2/pkg/assetserver/webview/responsewriter_darwin.go index 77de3c455..a3c73b6f1 100644 --- a/v2/pkg/assetserver/webview/responsewriter_darwin.go +++ b/v2/pkg/assetserver/webview/responsewriter_darwin.go @@ -69,6 +69,7 @@ import "C" import ( "encoding/json" + "fmt" "net/http" "unsafe" ) @@ -98,16 +99,31 @@ func (rw *responseWriter) Write(buf []byte) (int, error) { rw.WriteHeader(http.StatusOK) - var content unsafe.Pointer var contentLen int if buf != nil { - content = unsafe.Pointer(&buf[0]) contentLen = len(buf) } - if !C.URLSchemeTaskDidReceiveData(rw.r.task, content, C.int(contentLen)) { - return 0, errRequestStopped + if contentLen > 0 { + // Create a C array to hold the data + cBuf := C.malloc(C.size_t(contentLen)) + if cBuf == nil { + return 0, fmt.Errorf("memory allocation failed for %d bytes", contentLen) + } + defer C.free(cBuf) + + // Copy the Go slice to the C array + C.memcpy(cBuf, unsafe.Pointer(&buf[0]), C.size_t(contentLen)) + + if !C.URLSchemeTaskDidReceiveData(rw.r.task, cBuf, C.int(contentLen)) { + return 0, errRequestStopped + } + } else { + if !C.URLSchemeTaskDidReceiveData(rw.r.task, nil, 0) { + return 0, errRequestStopped + } } + return contentLen, nil } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 368e41030..72eca05a5 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed +- Fixed CGO memory issue on Darwin by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/3590) - Fixed an error that occurred when an author name contains a string that is not suitable for JSON. Fixed by @taiseiotsuka in [PR](https://github.com/wailsapp/wails/pull/3638) - Fixed MacOS build to use `outputfilename` from wails.json. [#3200](https://github.com/wailsapp/wails/issues/3200) - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi @@ -24,7 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 + Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). - ## v2.9.1 - 2024-06-18 ### Fixed From 868931fe72002f33a2ae2bc4c80daf90093188db Mon Sep 17 00:00:00 2001 From: Andreas Deininger Date: Tue, 20 Aug 2024 11:22:43 +0200 Subject: [PATCH 018/344] Fix typos (#3628) * Fix typos * Update howdoesitwork.mdx * Added entry to changelog --------- Co-authored-by: Lea Anthony --- website/docs/guides/application-development.mdx | 2 +- website/docs/guides/frontend.mdx | 2 +- website/docs/guides/mac-appstore.mdx | 2 +- website/docs/guides/nixos-font.mdx | 2 +- website/docs/guides/sveltekit.mdx | 4 ++-- website/docs/reference/cli.mdx | 2 +- website/docs/reference/runtime/events.mdx | 2 +- website/docs/reference/runtime/window.mdx | 2 +- website/src/pages/changelog.mdx | 1 + 9 files changed, 10 insertions(+), 9 deletions(-) diff --git a/website/docs/guides/application-development.mdx b/website/docs/guides/application-development.mdx index 78a6df3bc..ae3880fd9 100644 --- a/website/docs/guides/application-development.mdx +++ b/website/docs/guides/application-development.mdx @@ -258,7 +258,7 @@ create files on the fly or process POST/PUT requests. GET requests are always first handled by the `assets` FS. If the FS doesn't find the requested file the request will be forwarded to the `http.Handler` for serving. Any requests other than GET will be directly processed by the `AssetsHandler` if specified. -It's also possible to only use the `AssetsHandler` by specifiy `nil` as the `Assets` option. +It's also possible to only use the `AssetsHandler` by specifying `nil` as the `Assets` option. ## Built in Dev Server diff --git a/website/docs/guides/frontend.mdx b/website/docs/guides/frontend.mdx index 1384087da..2c3c78e42 100644 --- a/website/docs/guides/frontend.mdx +++ b/website/docs/guides/frontend.mdx @@ -45,7 +45,7 @@ The options are as follows: | noautoinjectipc | Disable the autoinjection of `/wails/ipc.js` | | noautoinject | Disable all autoinjection of scripts | -Multiple options may be used provided they are comma seperated. +Multiple options may be used provided they are comma separated. This code is perfectly valid and operates the same as the autoinjection version: diff --git a/website/docs/guides/mac-appstore.mdx b/website/docs/guides/mac-appstore.mdx index d2c3a9458..f14ac3130 100644 --- a/website/docs/guides/mac-appstore.mdx +++ b/website/docs/guides/mac-appstore.mdx @@ -62,7 +62,7 @@ This is an example entitlements file from the [RiftShare](https://github.com/ach ``` **Add the Embedded Provisioning Profile** -The Provisioning Profile created above needs to be added to the root of the applicaton. It needs to be named embedded.provisionprofile. +The Provisioning Profile created above needs to be added to the root of the application. It needs to be named embedded.provisionprofile. #### Build and Sign the App Package diff --git a/website/docs/guides/nixos-font.mdx b/website/docs/guides/nixos-font.mdx index 141e4d68c..02188562e 100644 --- a/website/docs/guides/nixos-font.mdx +++ b/website/docs/guides/nixos-font.mdx @@ -1,6 +1,6 @@ # NixOS FontSize Bug -NixOS/Wayland can cause a bug where the `font-size` css property doesnt affect the rendered page. To fix this add the following to your devShell. +NixOS/Wayland can cause a bug where the `font-size` css property doesn't affect the rendered page. To fix this add the following to your devShell. ```shell shellHook = with pkgs; '' diff --git a/website/docs/guides/sveltekit.mdx b/website/docs/guides/sveltekit.mdx index e0357ca3c..333138f78 100644 --- a/website/docs/guides/sveltekit.mdx +++ b/website/docs/guides/sveltekit.mdx @@ -1,7 +1,7 @@ # SvelteKit This guide will go into: -1. Miminal Installation Steps - The steps needed to get a minimum Wails setup working for SvelteKit. +1. Minimal Installation Steps - The steps needed to get a minimum Wails setup working for SvelteKit. 2. Install Script - Bash script for accomplishing the Minimal Installation Steps with optional Wails branding. 3. Important Notes - Issues that can be encountered when using SvelteKit + Wails and fixes. @@ -108,7 +108,7 @@ wails dev ``` See https://wails.io/docs/guides/frontend for more information. -##### Inital data can be loaded and refreshed from +page.ts/+page.js to +page.svelte. +##### Initial data can be loaded and refreshed from +page.ts/+page.js to +page.svelte. - +page.ts/+page.js works well with load() https://kit.svelte.dev/docs/load#page-data - invalidateAll() in +page.svelte will call load() from +page.ts/+page.js https://kit.svelte.dev/docs/load#rerunning-load-functions-manual-invalidation. diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 9bb41d10c..6c63cf163 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -69,7 +69,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for | -nsis | Generate NSIS installer for Windows | | | -o filename | Output filename | | | -obfuscated | Obfuscate the application using [garble](https://github.com/burrowers/garble) | | -| -platform | Build for the given (comma delimited) [platforms](../reference/cli.mdx#platforms) eg. `windows/arm64`. Note, if you do not give the architecture, `runtime.GOARCH` is used. | platform = `GOOS` environment variable if given else `runtime.GOOS`.
arch = `GOARCH` envrionment variable if given else `runtime.GOARCH`. | +| -platform | Build for the given (comma delimited) [platforms](../reference/cli.mdx#platforms) eg. `windows/arm64`. Note, if you do not give the architecture, `runtime.GOARCH` is used. | platform = `GOOS` environment variable if given else `runtime.GOOS`.
arch = `GOARCH` environment variable if given else `runtime.GOARCH`. | | -race | Build with Go's race detector | | | -s | Skip building the frontend | | | -skipbindings | Skip bindings generation | | diff --git a/website/docs/reference/runtime/events.mdx b/website/docs/reference/runtime/events.mdx index 138e03d73..b9a6196e2 100644 --- a/website/docs/reference/runtime/events.mdx +++ b/website/docs/reference/runtime/events.mdx @@ -18,7 +18,7 @@ JS: `EventsOn(eventName string, callback function(optionalData?: any)): () => vo ### EventsOff -This method unregisters the listener for the given event name, optionally multiple listeneres can be unregistered via `additionalEventNames`. +This method unregisters the listener for the given event name, optionally multiple listeners can be unregistered via `additionalEventNames`. Go: `EventsOff(ctx context.Context, eventName string, additionalEventNames ...string)`
JS: `EventsOff(eventName string, ...additionalEventNames)` diff --git a/website/docs/reference/runtime/window.mdx b/website/docs/reference/runtime/window.mdx index 625cd5e44..4e20f510e 100644 --- a/website/docs/reference/runtime/window.mdx +++ b/website/docs/reference/runtime/window.mdx @@ -235,7 +235,7 @@ JS: `WindowSetBackgroundColour(R, G, B, A)` ### WindowPrint -Opens tha native print dialog. +Opens the native print dialog. Go: `WindowPrint(ctx context.Context)`
JS: `WindowPrint()` diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 72eca05a5..00bf64d14 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 + Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi + Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). +- Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) ## v2.9.1 - 2024-06-18 From 4b6a8e17c5a0558a680e30c73df9afbfe7476607 Mon Sep 17 00:00:00 2001 From: Mohamed Feddad Date: Wed, 21 Aug 2024 01:00:54 +0400 Subject: [PATCH 019/344] fix: failsafe JavaScript event emitter `notifyListeners` (#3695) * fix: failsafe JavaScript event emitter `notifyListeners` * chore: update change log --- v2/internal/frontend/runtime/desktop/events.js | 12 ++++++------ .../frontend/runtime/runtime_debug_desktop.js | 8 ++++---- website/src/pages/changelog.mdx | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/v2/internal/frontend/runtime/desktop/events.js b/v2/internal/frontend/runtime/desktop/events.js index 9548cbc34..619ff5f06 100644 --- a/v2/internal/frontend/runtime/desktop/events.js +++ b/v2/internal/frontend/runtime/desktop/events.js @@ -90,17 +90,17 @@ function notifyListeners(eventData) { // Get the event name let eventName = eventData.name; - // Check if we have any listeners for this event - if (eventListeners[eventName]) { + // Keep a list of listener indexes to destroy + const newEventListenerList = eventListeners[eventName]?.slice() || []; - // Keep a list of listener indexes to destroy - const newEventListenerList = eventListeners[eventName].slice(); + // Check if we have any listeners for this event + if (newEventListenerList.length) { // Iterate listeners - for (let count = eventListeners[eventName].length - 1; count >= 0; count -= 1) { + for (let count = newEventListenerList.length - 1; count >= 0; count -= 1) { // Get next listener - const listener = eventListeners[eventName][count]; + const listener = newEventListenerList[count]; let data = eventData.data; diff --git a/v2/internal/frontend/runtime/runtime_debug_desktop.js b/v2/internal/frontend/runtime/runtime_debug_desktop.js index bd8c27bed..5e95680b8 100644 --- a/v2/internal/frontend/runtime/runtime_debug_desktop.js +++ b/v2/internal/frontend/runtime/runtime_debug_desktop.js @@ -83,10 +83,10 @@ } function notifyListeners(eventData) { let eventName = eventData.name; - if (eventListeners[eventName]) { - const newEventListenerList = eventListeners[eventName].slice(); - for (let count = eventListeners[eventName].length - 1; count >= 0; count -= 1) { - const listener = eventListeners[eventName][count]; + const newEventListenerList = eventListeners[eventName]?.slice() || []; + if (newEventListenerList.length) { + for (let count = newEventListenerList.length - 1; count >= 0; count -= 1) { + const listener = newEventListenerList[count]; let data = eventData.data; const destroy = listener.Callback(data); if (destroy) { diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 00bf64d14..13c67172c 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 + Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). - Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) +- Fixed `notifyListeners()` race condition when terminated mid-emission [PR](https://github.com/wailsapp/wails/pull/3695) by [@mrf345](https://github.com/mrf345) ## v2.9.1 - 2024-06-18 From f8c86112192b0d7cdb6e663aa5c7c5afa2d11f46 Mon Sep 17 00:00:00 2001 From: Mohamed Feddad Date: Sun, 25 Aug 2024 14:16:09 +0400 Subject: [PATCH 020/344] Fix drag and drop missing cursor icon (#3703) * fix: darg and drop missing cursor icon * chore: update change log --- v2/internal/frontend/runtime/desktop/draganddrop.js | 1 + v2/internal/frontend/runtime/runtime_debug_desktop.js | 1 + website/src/pages/changelog.mdx | 1 + 3 files changed, 3 insertions(+) diff --git a/v2/internal/frontend/runtime/desktop/draganddrop.js b/v2/internal/frontend/runtime/desktop/draganddrop.js index 1582df6d4..45a047b5f 100644 --- a/v2/internal/frontend/runtime/desktop/draganddrop.js +++ b/v2/internal/frontend/runtime/desktop/draganddrop.js @@ -51,6 +51,7 @@ function onDragOver(e) { if (!window.wails.flags.enableWailsDragAndDrop) { return; } + e.dataTransfer.dropEffect = 'copy'; e.preventDefault(); if (!flags.useDropTarget) { diff --git a/v2/internal/frontend/runtime/runtime_debug_desktop.js b/v2/internal/frontend/runtime/runtime_debug_desktop.js index 5e95680b8..d6b66521f 100644 --- a/v2/internal/frontend/runtime/runtime_debug_desktop.js +++ b/v2/internal/frontend/runtime/runtime_debug_desktop.js @@ -454,6 +454,7 @@ if (!window.wails.flags.enableWailsDragAndDrop) { return; } + e.dataTransfer.dropEffect = 'copy'; e.preventDefault(); if (!flags.useDropTarget) { return; diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 13c67172c..89c96b82b 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). - Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) - Fixed `notifyListeners()` race condition when terminated mid-emission [PR](https://github.com/wailsapp/wails/pull/3695) by [@mrf345](https://github.com/mrf345) +- Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) ## v2.9.1 - 2024-06-18 From 87b1325dbc466fcaadc80cc93c2ad5587795ee4c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 25 Aug 2024 20:41:19 +1000 Subject: [PATCH 021/344] Update Sponsor Image (#3706) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 273c41785..2ba2ac936 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -138,11 +138,19 @@ text {
- + - + + + + + + + + + Helpers From 1a2310265f661e7ef0c73ca0bb4cf18aa21332dd Mon Sep 17 00:00:00 2001 From: Ignas Bernotas Date: Sun, 25 Aug 2024 14:33:09 +0300 Subject: [PATCH 022/344] Modified docs to reflect the correct password syntax for the `gon-sign.json` file (#3620) * fix: docs macOS signing password syntax * fix: docs macOS signing password syntax --------- Co-authored-by: Lea Anthony --- website/docs/guides/signing.mdx | 6 ++++-- website/src/pages/changelog.mdx | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/website/docs/guides/signing.mdx b/website/docs/guides/signing.mdx index e57e99e76..4ce5fd4b2 100644 --- a/website/docs/guides/signing.mdx +++ b/website/docs/guides/signing.mdx @@ -254,7 +254,7 @@ Now we need to configure some gon config files in our `build/darwin` directory: "bundle_id": "app.myapp", "apple_id": { "username": "my-appleid@email.com", - "password": "@env:APPLE_PASSWORD", + "password": "your-app-specific-password", "provider": "ABCDE12345" }, "sign": { @@ -268,11 +268,13 @@ Here is a brief break down of the above fields: - `source`: The location of your wails binary to be signed - `apple_id`: - `username`: Your Apple ID email address - - `password`: Your app-specific password, referenced using Gon's environment variable syntax + - `password`: Your app-specific password - `provider`: Your team ID for your App Store Connect account - `sign`: - `application_identity`: Your Apple developer identity +The (https://developer.apple.com/documentation/technotes/tn3147-migrating-to-the-latest-notarization-tool)[deprecated Apple's altool]'s syntax supporting `@env:` is no longer available since Apple has migrated to the new notarytool. + Your developer identity and team ID can both by found on macOS by running the following command: ```bash diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 89c96b82b..4991b144c 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -21,13 +21,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed file drop events on windows. Fixed in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi - Fixed doctor command not finding pkg-config on Solus. [PR #3670](https://github.com/wailsapp/wails/pull/3670) by [@ianmjones](https://github.com/ianmjones) - Fixed binding for struct fields that were exported but had no json tags. [PR #3678](https://github.com/wailsapp/wails/pull/3678) -+ Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi -+ Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit +- Fixed file drop events on Windows in [PR](https://github.com/wailsapp/wails/pull/3595) by @FrancescoLuzzi +- Modified `ZoomFactor` and `IsZoomControlEnabled` options to be Windows-only options in PR[#3644](https://github.com/wailsapp/wails/pull/3644) by @levinit - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). - Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) - Fixed `notifyListeners()` race condition when terminated mid-emission [PR](https://github.com/wailsapp/wails/pull/3695) by [@mrf345](https://github.com/mrf345) - Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) +### Changed +- Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](github.com/ignasbernotas) + + ## v2.9.1 - 2024-06-18 ### Fixed From 8e810d59f0eb68af7771025c4ca51568b7892e09 Mon Sep 17 00:00:00 2001 From: dy <43048532+edai-git@users.noreply.github.com> Date: Sun, 25 Aug 2024 18:52:31 +0700 Subject: [PATCH 023/344] Update templates.mdx (#3567) Added "wails-template-nextjs-app-router-src" Co-authored-by: Lea Anthony --- website/versioned_docs/version-v2.9.0/community/templates.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/website/versioned_docs/version-v2.9.0/community/templates.mdx b/website/versioned_docs/version-v2.9.0/community/templates.mdx index 61ca007ea..030600ddc 100644 --- a/website/versioned_docs/version-v2.9.0/community/templates.mdx +++ b/website/versioned_docs/version-v2.9.0/community/templates.mdx @@ -41,9 +41,11 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-react-template](https://github.com/flin7/wails-react-template) - A minimal template for React that supports live development - [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - A template using Next.js and TypeScript - [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router +- [wails-template-nextjs-app-router-src](https://github.com/edai-git/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router src + example - [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - A template for React + TypeScript + Vite + TailwindCSS - [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - A template with Vite, React, TypeScript, TailwindCSS, and shadcn/ui + ## Svelte - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte From 475534c13224dcdc4b53990e0eb060640a756927 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 28 Aug 2024 19:24:59 +1000 Subject: [PATCH 024/344] V2 bugfix/windows syscall go 1.23 (#3707) * Initial test * Fix calls * Update changelog.mdx * Free allocated strings * Misc fixes --- .replit | 8 ++ .../go-common-file-dialog/cfd/DialogConfig.go | 6 + .../go-common-file-dialog/cfd/iShellItem.go | 9 +- .../cfd/iShellItemArray.go | 9 +- .../cfd/vtblCommonFunc.go | 110 +++++++++--------- website/src/pages/changelog.mdx | 1 + 6 files changed, 78 insertions(+), 65 deletions(-) create mode 100644 .replit diff --git a/.replit b/.replit new file mode 100644 index 000000000..619bd7227 --- /dev/null +++ b/.replit @@ -0,0 +1,8 @@ +modules = ["go-1.21", "web", "nodejs-20"] +run = "go run v2/cmd/wails/main.go" + +[nix] +channel = "stable-24_05" + +[deployment] +run = ["sh", "-c", "go run v2/cmd/wails/main.go"] diff --git a/v2/internal/go-common-file-dialog/cfd/DialogConfig.go b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go index 221dbef27..edefd4e13 100644 --- a/v2/internal/go-common-file-dialog/cfd/DialogConfig.go +++ b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go @@ -2,6 +2,8 @@ package cfd +import "fmt" + type FileFilter struct { // The display name of the filter (That is shown to the user) DisplayName string @@ -102,6 +104,10 @@ func (config *DialogConfig) apply(dialog Dialog) (err error) { } if config.SelectedFileFilterIndex != 0 { + if config.SelectedFileFilterIndex > uint(len(fileFilters)) { + err = fmt.Errorf("selected file filter index out of range") + return + } err = dialog.SetSelectedFileFilterIndex(config.SelectedFileFilterIndex) if err != nil { return diff --git a/v2/internal/go-common-file-dialog/cfd/iShellItem.go b/v2/internal/go-common-file-dialog/cfd/iShellItem.go index 6a747f4d9..080115345 100644 --- a/v2/internal/go-common-file-dialog/cfd/iShellItem.go +++ b/v2/internal/go-common-file-dialog/cfd/iShellItem.go @@ -30,6 +30,10 @@ type iShellItemVtbl struct { func newIShellItem(path string) (*iShellItem, error) { var shellItem *iShellItem pathPtr := ole.SysAllocString(path) + defer func(v *int16) { + _ = ole.SysFreeString(v) + }(pathPtr) + ret, _, _ := procSHCreateItemFromParsingName.Call( uintptr(unsafe.Pointer(pathPtr)), 0, @@ -40,10 +44,9 @@ func newIShellItem(path string) (*iShellItem, error) { func (vtbl *iShellItemVtbl) getDisplayName(objPtr unsafe.Pointer) (string, error) { var ptr *uint16 - ret, _, _ := syscall.Syscall(vtbl.GetDisplayName, - 2, + ret, _, _ := syscall.SyscallN(vtbl.GetDisplayName, uintptr(objPtr), - 0x80058000, // SIGDN_FILESYSPATH + 0x80058000, // SIGDN_FILESYSPATH, uintptr(unsafe.Pointer(&ptr))) if err := hresultToError(ret); err != nil { return "", err diff --git a/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go index d904e72b2..c548160d1 100644 --- a/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go +++ b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go @@ -38,11 +38,9 @@ type iShellItemArrayVtbl struct { func (vtbl *iShellItemArrayVtbl) getCount(objPtr unsafe.Pointer) (uintptr, error) { var count uintptr - ret, _, _ := syscall.Syscall(vtbl.GetCount, - 1, + ret, _, _ := syscall.SyscallN(vtbl.GetCount, uintptr(objPtr), - uintptr(unsafe.Pointer(&count)), - 0) + uintptr(unsafe.Pointer(&count))) if err := hresultToError(ret); err != nil { return 0, err } @@ -51,8 +49,7 @@ func (vtbl *iShellItemArrayVtbl) getCount(objPtr unsafe.Pointer) (uintptr, error func (vtbl *iShellItemArrayVtbl) getItemAt(objPtr unsafe.Pointer, index uintptr) (string, error) { var shellItem *iShellItem - ret, _, _ := syscall.Syscall(vtbl.GetItemAt, - 2, + ret, _, _ := syscall.SyscallN(vtbl.GetItemAt, uintptr(objPtr), index, uintptr(unsafe.Pointer(&shellItem))) diff --git a/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go index 929d5a2b7..8c88c297c 100644 --- a/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go +++ b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go @@ -1,5 +1,4 @@ //go:build windows -// +build windows package cfd @@ -19,20 +18,16 @@ func hresultToError(hr uintptr) error { } func (vtbl *iUnknownVtbl) release(objPtr unsafe.Pointer) error { - ret, _, _ := syscall.Syscall(vtbl.Release, - 0, + ret, _, _ := syscall.SyscallN(vtbl.Release, uintptr(objPtr), - 0, 0) return hresultToError(ret) } func (vtbl *iModalWindowVtbl) show(objPtr unsafe.Pointer, hwnd uintptr) error { - ret, _, _ := syscall.Syscall(vtbl.Show, - 1, + ret, _, _ := syscall.SyscallN(vtbl.Show, uintptr(objPtr), - hwnd, - 0) + hwnd) return hresultToError(ret) } @@ -49,8 +44,16 @@ func (vtbl *iFileDialogVtbl) setFileTypes(objPtr unsafe.Pointer, filters []FileF pszSpec: ole.SysAllocString(filter.Pattern), } } - ret, _, _ := syscall.Syscall(vtbl.SetFileTypes, - 2, + + // Ensure memory is freed after use + defer func() { + for _, spec := range comDlgFilterSpecs { + ole.SysFreeString(spec.pszName) + ole.SysFreeString(spec.pszSpec) + } + }() + + ret, _, _ := syscall.SyscallN(vtbl.SetFileTypes, uintptr(objPtr), uintptr(cFileTypes), uintptr(unsafe.Pointer(&comDlgFilterSpecs[0]))) @@ -82,21 +85,17 @@ func (vtbl *iFileDialogVtbl) setFileTypes(objPtr unsafe.Pointer, filters []FileF // FOS_FORCEPREVIEWPANEON = 0x40000000, // FOS_SUPPORTSTREAMABLEITEMS = 0x80000000 func (vtbl *iFileDialogVtbl) setOptions(objPtr unsafe.Pointer, options uint32) error { - ret, _, _ := syscall.Syscall(vtbl.SetOptions, - 1, + ret, _, _ := syscall.SyscallN(vtbl.SetOptions, uintptr(objPtr), - uintptr(options), - 0) + uintptr(options)) return hresultToError(ret) } func (vtbl *iFileDialogVtbl) getOptions(objPtr unsafe.Pointer) (uint32, error) { var options uint32 - ret, _, _ := syscall.Syscall(vtbl.GetOptions, - 1, + ret, _, _ := syscall.SyscallN(vtbl.GetOptions, uintptr(objPtr), - uintptr(unsafe.Pointer(&options)), - 0) + uintptr(unsafe.Pointer(&options))) return options, hresultToError(ret) } @@ -122,11 +121,9 @@ func (vtbl *iFileDialogVtbl) setDefaultFolder(objPtr unsafe.Pointer, path string return err } defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) - ret, _, _ := syscall.Syscall(vtbl.SetDefaultFolder, - 1, + ret, _, _ := syscall.SyscallN(vtbl.SetDefaultFolder, uintptr(objPtr), - uintptr(unsafe.Pointer(shellItem)), - 0) + uintptr(unsafe.Pointer(shellItem))) return hresultToError(ret) } @@ -136,40 +133,32 @@ func (vtbl *iFileDialogVtbl) setFolder(objPtr unsafe.Pointer, path string) error return err } defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) - ret, _, _ := syscall.Syscall(vtbl.SetFolder, - 1, + ret, _, _ := syscall.SyscallN(vtbl.SetFolder, uintptr(objPtr), - uintptr(unsafe.Pointer(shellItem)), - 0) + uintptr(unsafe.Pointer(shellItem))) return hresultToError(ret) } func (vtbl *iFileDialogVtbl) setTitle(objPtr unsafe.Pointer, title string) error { titlePtr := ole.SysAllocString(title) - ret, _, _ := syscall.Syscall(vtbl.SetTitle, - 1, + defer ole.SysFreeString(titlePtr) // Ensure the string is freed + ret, _, _ := syscall.SyscallN(vtbl.SetTitle, uintptr(objPtr), - uintptr(unsafe.Pointer(titlePtr)), - 0) + uintptr(unsafe.Pointer(titlePtr))) return hresultToError(ret) } func (vtbl *iFileDialogVtbl) close(objPtr unsafe.Pointer) error { - ret, _, _ := syscall.Syscall(vtbl.Close, - 1, - uintptr(objPtr), - 0, - 0) + ret, _, _ := syscall.SyscallN(vtbl.Close, + uintptr(objPtr)) return hresultToError(ret) } func (vtbl *iFileDialogVtbl) getResult(objPtr unsafe.Pointer) (*iShellItem, error) { var shellItem *iShellItem - ret, _, _ := syscall.Syscall(vtbl.GetResult, - 1, + ret, _, _ := syscall.SyscallN(vtbl.GetResult, uintptr(objPtr), - uintptr(unsafe.Pointer(&shellItem)), - 0) + uintptr(unsafe.Pointer(&shellItem))) return shellItem, hresultToError(ret) } @@ -186,42 +175,51 @@ func (vtbl *iFileDialogVtbl) getResultString(objPtr unsafe.Pointer) (string, err } func (vtbl *iFileDialogVtbl) setClientGuid(objPtr unsafe.Pointer, guid *ole.GUID) error { - ret, _, _ := syscall.Syscall(vtbl.SetClientGuid, - 1, + // Ensure the GUID is not nil + if guid == nil { + return fmt.Errorf("guid cannot be nil") + } + + // Call the SetClientGuid method + ret, _, _ := syscall.SyscallN(vtbl.SetClientGuid, uintptr(objPtr), - uintptr(unsafe.Pointer(guid)), - 0) + uintptr(unsafe.Pointer(guid))) + + // Convert the HRESULT to a Go error return hresultToError(ret) } func (vtbl *iFileDialogVtbl) setDefaultExtension(objPtr unsafe.Pointer, defaultExtension string) error { - if defaultExtension[0] == '.' { + // Ensure the string is not empty before accessing the first character + if len(defaultExtension) > 0 && defaultExtension[0] == '.' { defaultExtension = strings.TrimPrefix(defaultExtension, ".") } + + // Allocate memory for the default extension string defaultExtensionPtr := ole.SysAllocString(defaultExtension) - ret, _, _ := syscall.Syscall(vtbl.SetDefaultExtension, - 1, + defer ole.SysFreeString(defaultExtensionPtr) // Ensure the string is freed + + // Call the SetDefaultExtension method + ret, _, _ := syscall.SyscallN(vtbl.SetDefaultExtension, uintptr(objPtr), - uintptr(unsafe.Pointer(defaultExtensionPtr)), - 0) + uintptr(unsafe.Pointer(defaultExtensionPtr))) + + // Convert the HRESULT to a Go error return hresultToError(ret) } func (vtbl *iFileDialogVtbl) setFileName(objPtr unsafe.Pointer, fileName string) error { fileNamePtr := ole.SysAllocString(fileName) - ret, _, _ := syscall.Syscall(vtbl.SetFileName, - 1, + defer ole.SysFreeString(fileNamePtr) // Ensure the string is freed + ret, _, _ := syscall.SyscallN(vtbl.SetFileName, uintptr(objPtr), - uintptr(unsafe.Pointer(fileNamePtr)), - 0) + uintptr(unsafe.Pointer(fileNamePtr))) return hresultToError(ret) } func (vtbl *iFileDialogVtbl) setSelectedFileFilterIndex(objPtr unsafe.Pointer, index uint) error { - ret, _, _ := syscall.Syscall(vtbl.SetFileTypeIndex, - 1, + ret, _, _ := syscall.SyscallN(vtbl.SetFileTypeIndex, uintptr(objPtr), - uintptr(index+1), // SetFileTypeIndex counts from 1 - 0) + uintptr(index+1)) // SetFileTypeIndex counts from 1 return hresultToError(ret) } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 4991b144c..14adb19dd 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added nil check for Drag-n-Drop on Windows. Fixed by in [PR](https://github.com/wailsapp/wails/pull/3597) by @leaanthony based on the suggestion by @Alpa-1 in [#3596](https://github.com/wailsapp/wails/issues/3596). - Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) - Fixed `notifyListeners()` race condition when terminated mid-emission [PR](https://github.com/wailsapp/wails/pull/3695) by [@mrf345](https://github.com/mrf345) +- Fixed dialogs in Windows when using Go 1.23 in [PR](https://github.com/wailsapp/wails/pull/3707) by [@leaanthony](https://github.com/leaanthony) - Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) ### Changed From d218384396a829309ed5346b265bb53dc62bdc64 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:05:53 +1000 Subject: [PATCH 025/344] Update Sponsor Image (#3711) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 2ba2ac936..e6186cbe5 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -53,7 +53,7 @@ text { Iain - + Julien @@ -138,19 +138,23 @@ text { - + - + - + - + + + + + Helpers From 3721d734238de9aa6e294c9c4707b0f3756a1cee Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 2 Sep 2024 19:34:22 +1000 Subject: [PATCH 026/344] More syscall fixes (#3713) * More syscall fixes * Update changelog.mdx --- .../desktop/windows/winc/w32/user32.go | 35 +++++++------------ .../desktop/windows/winc/w32/utils.go | 6 ++-- .../desktop/windows/winc/w32/uxtheme.go | 6 ++-- .../cfd/iFileOpenDialog.go | 3 +- website/src/pages/changelog.mdx | 1 + 5 files changed, 20 insertions(+), 31 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/winc/w32/user32.go b/v2/internal/frontend/desktop/windows/winc/w32/user32.go index 8ca72ce4b..707701f5e 100644 --- a/v2/internal/frontend/desktop/windows/winc/w32/user32.go +++ b/v2/internal/frontend/desktop/windows/winc/w32/user32.go @@ -639,7 +639,7 @@ func GetSysColorBrush(nIndex int) HBRUSH { return HBRUSH(ret) */ - ret, _, _ := syscall.Syscall(getSysColorBrush, 1, + ret, _, _ := syscall.SyscallN(getSysColorBrush, uintptr(nIndex), 0, 0) @@ -792,11 +792,9 @@ func CreateMenu() HMENU { } func SetMenu(hWnd HWND, hMenu HMENU) bool { - ret, _, _ := syscall.Syscall(setMenu, 2, + ret, _, _ := syscall.SyscallN(setMenu, uintptr(hWnd), - uintptr(hMenu), - 0) - + uintptr(hMenu)) return ret != 0 } @@ -834,11 +832,7 @@ func TrackPopupMenuEx(hMenu HMENU, fuFlags uint32, x, y int32, hWnd HWND, lptpm } func DrawMenuBar(hWnd HWND) bool { - ret, _, _ := syscall.Syscall(drawMenuBar, 1, - uintptr(hWnd), - 0, - 0) - + ret, _, _ := syscall.SyscallN(drawMenuBar, hWnd) return ret != 0 } @@ -1231,11 +1225,8 @@ func CallNextHookEx(hhk HHOOK, nCode int, wParam WPARAM, lParam LPARAM) LRESULT } func GetKeyState(nVirtKey int32) int16 { - ret, _, _ := syscall.Syscall(getKeyState, 1, - uintptr(nVirtKey), - 0, - 0) - + ret, _, _ := syscall.SyscallN(getKeyState, + uintptr(nVirtKey)) return int16(ret) } @@ -1249,17 +1240,15 @@ func DestroyMenu(hMenu HMENU) bool { } func GetWindowPlacement(hWnd HWND, lpwndpl *WINDOWPLACEMENT) bool { - ret, _, _ := syscall.Syscall(getWindowPlacement, 2, - uintptr(hWnd), - uintptr(unsafe.Pointer(lpwndpl)), - 0) - + ret, _, _ := syscall.SyscallN(getWindowPlacement, + hWnd, + uintptr(unsafe.Pointer(lpwndpl))) return ret != 0 } func SetWindowPlacement(hWnd HWND, lpwndpl *WINDOWPLACEMENT) bool { - ret, _, _ := syscall.Syscall(setWindowPlacement, 2, - uintptr(hWnd), + ret, _, _ := syscall.SyscallN(setWindowPlacement, + hWnd, uintptr(unsafe.Pointer(lpwndpl)), 0) @@ -1279,7 +1268,7 @@ func SetScrollInfo(hwnd HWND, fnBar int32, lpsi *SCROLLINFO, fRedraw bool) int32 } func GetScrollInfo(hwnd HWND, fnBar int32, lpsi *SCROLLINFO) bool { - ret, _, _ := syscall.Syscall(getScrollInfo, 3, + ret, _, _ := syscall.SyscallN(getScrollInfo, hwnd, uintptr(fnBar), uintptr(unsafe.Pointer(lpsi))) diff --git a/v2/internal/frontend/desktop/windows/winc/w32/utils.go b/v2/internal/frontend/desktop/windows/winc/w32/utils.go index 8a72d4846..4568b4849 100644 --- a/v2/internal/frontend/desktop/windows/winc/w32/utils.go +++ b/v2/internal/frontend/desktop/windows/winc/w32/utils.go @@ -75,7 +75,7 @@ func UTF16PtrToString(cstr *uint16) string { } func ComAddRef(unknown *IUnknown) int32 { - ret, _, _ := syscall.Syscall(unknown.lpVtbl.pAddRef, 1, + ret, _, _ := syscall.SyscallN(unknown.lpVtbl.pAddRef, uintptr(unsafe.Pointer(unknown)), 0, 0) @@ -83,7 +83,7 @@ func ComAddRef(unknown *IUnknown) int32 { } func ComRelease(unknown *IUnknown) int32 { - ret, _, _ := syscall.Syscall(unknown.lpVtbl.pRelease, 1, + ret, _, _ := syscall.SyscallN(unknown.lpVtbl.pRelease, uintptr(unsafe.Pointer(unknown)), 0, 0) @@ -92,7 +92,7 @@ func ComRelease(unknown *IUnknown) int32 { func ComQueryInterface(unknown *IUnknown, id *GUID) *IDispatch { var disp *IDispatch - hr, _, _ := syscall.Syscall(unknown.lpVtbl.pQueryInterface, 3, + hr, _, _ := syscall.SyscallN(unknown.lpVtbl.pQueryInterface, uintptr(unsafe.Pointer(unknown)), uintptr(unsafe.Pointer(id)), uintptr(unsafe.Pointer(&disp))) diff --git a/v2/internal/frontend/desktop/windows/winc/w32/uxtheme.go b/v2/internal/frontend/desktop/windows/winc/w32/uxtheme.go index 51ec0035f..ed80d487f 100644 --- a/v2/internal/frontend/desktop/windows/winc/w32/uxtheme.go +++ b/v2/internal/frontend/desktop/windows/winc/w32/uxtheme.go @@ -83,7 +83,7 @@ func init() { } func CloseThemeData(hTheme HTHEME) HRESULT { - ret, _, _ := syscall.Syscall(closeThemeData, 1, + ret, _, _ := syscall.SyscallN(closeThemeData, uintptr(hTheme), 0, 0) @@ -134,7 +134,7 @@ func GetThemeTextExtent(hTheme HTHEME, hdc HDC, iPartId, iStateId int32, pszText } func OpenThemeData(hwnd HWND, pszClassList *uint16) HTHEME { - ret, _, _ := syscall.Syscall(openThemeData, 2, + ret, _, _ := syscall.SyscallN(openThemeData, uintptr(hwnd), uintptr(unsafe.Pointer(pszClassList)), 0) @@ -143,7 +143,7 @@ func OpenThemeData(hwnd HWND, pszClassList *uint16) HTHEME { } func SetWindowTheme(hwnd HWND, pszSubAppName, pszSubIdList *uint16) HRESULT { - ret, _, _ := syscall.Syscall(setWindowTheme, 3, + ret, _, _ := syscall.SyscallN(setWindowTheme, uintptr(hwnd), uintptr(unsafe.Pointer(pszSubAppName)), uintptr(unsafe.Pointer(pszSubIdList))) diff --git a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go index 4c080c916..f94a9c7ed 100644 --- a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go +++ b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go @@ -164,8 +164,7 @@ func (fileOpenDialog *iFileOpenDialog) setIsMultiselect(isMultiselect bool) erro func (vtbl *iFileOpenDialogVtbl) getResults(objPtr unsafe.Pointer) (*iShellItemArray, error) { var shellItemArray *iShellItemArray - ret, _, _ := syscall.Syscall(vtbl.GetResults, - 1, + ret, _, _ := syscall.SyscallN(vtbl.GetResults, uintptr(objPtr), uintptr(unsafe.Pointer(&shellItemArray)), 0) diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 14adb19dd..feb5db885 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed typos in various .mdx files. [PR #3628](https://github.com/wailsapp/wails/pull/3628) by [@deining](https://github.com/deining) - Fixed `notifyListeners()` race condition when terminated mid-emission [PR](https://github.com/wailsapp/wails/pull/3695) by [@mrf345](https://github.com/mrf345) - Fixed dialogs in Windows when using Go 1.23 in [PR](https://github.com/wailsapp/wails/pull/3707) by [@leaanthony](https://github.com/leaanthony) +- More syscall fixes for Go 1.23 support in [PR](https://github.com/wailsapp/wails/pull/3713) by [@leaanthony](https://github.com/leaanthony) - Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) ### Changed From c3a7266001df8fbc35ec2cc63713a3f7cbf15834 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2024 21:11:36 +1000 Subject: [PATCH 027/344] Update Sponsor Image (#3725) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index e6186cbe5..bc14fd7b3 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -88,7 +88,7 @@ text { vaaski - + Sander From 265d2e45db80f36da7bf02240eb444f2bdf2d426 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 07:56:29 +1000 Subject: [PATCH 028/344] Update Sponsor Image (#3727) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index bc14fd7b3..39b6bc7d5 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -157,46 +157,50 @@ text { Helpers - + - + - + - + - + - + - + - + - + - + - + + + + + From f4b21a6b379beed5a1a05004236461945870720b Mon Sep 17 00:00:00 2001 From: Matt Armstrong Date: Thu, 5 Sep 2024 15:08:23 -0700 Subject: [PATCH 029/344] chore: fix DeskGap author link on credits page (#3724) --- website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/fr/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/ja/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/ko/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/pt/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/ru/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx | 2 +- .../i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx | 2 +- website/src/pages/credits.mdx | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx index a46ca16e9..116188a05 100644 --- a/website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/ar/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/fr/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/fr/docusaurus-plugin-content-pages/credits.mdx index 28056d8cd..d2f31f804 100644 --- a/website/i18n/fr/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - Pour ses contributions à long terme à ce projet. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - Son support et ses retours ont été inestimables. - [Justen Walker](https://github.com/justenwalker/) - Pour aider à résoudre les problèmes COM qui ont permis de publier la v2. -- [Wang, Chi](https://github.com/patr0nus/) - Le projet DeskGap a été une grande influence sur la direction de Wails v2. +- [Wang, Chi](https://github.com/branchseer) - Le projet DeskGap a été une grande influence sur la direction de Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Bien que Wails n'utilise plus le projet Webview, il est toujours une source d'inspiration. diff --git a/website/i18n/ja/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/ja/docusaurus-plugin-content-pages/credits.mdx index 8d309cd63..020d2d78c 100644 --- a/website/i18n/ja/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - このプロジェクトに長期的に貢献してくれました。 - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - 彼は非常に有益なサポートおよびフィードバックをしてくれました。 - [Justen Walker](https://github.com/justenwalker/) - v2を成功させるために、COM問題を解決してくれました。 -- [Wang, Chi](https://github.com/patr0nus/) - DeskGapプロジェクトは、Wails v2の方向性に大きな影響を与えてくれました。 +- [Wang, Chi](https://github.com/branchseer) - DeskGapプロジェクトは、Wails v2の方向性に大きな影響を与えてくれました。 - [Serge Zaitsev](https://github.com/zserge) - WailsがWebviewを使用していない間、インスピレーションの源となっていました。 diff --git a/website/i18n/ko/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/ko/docusaurus-plugin-content-pages/credits.mdx index a46ca16e9..116188a05 100644 --- a/website/i18n/ko/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/pt/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/pt/docusaurus-plugin-content-pages/credits.mdx index a46ca16e9..116188a05 100644 --- a/website/i18n/pt/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/pt/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/ru/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/ru/docusaurus-plugin-content-pages/credits.mdx index 3e356bce8..4df1c43e1 100644 --- a/website/i18n/ru/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/ru/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx index a46ca16e9..116188a05 100644 --- a/website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/tr/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx index a46ca16e9..116188a05 100644 --- a/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/vi/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx index 2b16b9920..08f24f315 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-pages/credits.mdx @@ -265,5 +265,5 @@ - [Byron Chris](https://github.com/bh90210) - 他对此项目的长期贡献。 - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - 提供了巨大的的支持和反馈。 - [Justen Walker](https://github.com/justenwalker/) - 帮助解决 v2 上线要解决的问题。 -- [Wang, Chi](https://github.com/patr0nus/) - DeskGap 项目对 Wails v2 的方向产生了巨大影响。 +- [Wang, Chi](https://github.com/branchseer) - DeskGap 项目对 Wails v2 的方向产生了巨大影响。 - [Serge Zaitsev](https://github.com/zserge) - 虽然 Wails 没有使用 Webview 项目,但它仍然是一个灵感来源。 diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index 5837e97fd..61228af84 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -266,5 +266,5 @@ - [Byron Chris](https://github.com/bh90210) - For his long term contributions to this project. - [Dustin Krysak](https://wiki.ubuntu.com/bashfulrobot) - His support and feedback has been invaluable. - [Justen Walker](https://github.com/justenwalker/) - For helping wrangle COM issues which got v2 over the line. -- [Wang, Chi](https://github.com/patr0nus/) - The DeskGap project was a huge influence on the direction of Wails v2. +- [Wang, Chi](https://github.com/branchseer) - The DeskGap project was a huge influence on the direction of Wails v2. - [Serge Zaitsev](https://github.com/zserge) - Whilst Wails does not use the Webview project, it is still a source of inspiration. From 5d2b4308a8111dac3ed6804bcf13096606d364a2 Mon Sep 17 00:00:00 2001 From: pagal <43702737+ssahillppatell@users.noreply.github.com> Date: Mon, 9 Sep 2024 04:08:14 +0530 Subject: [PATCH 030/344] Removed unnecessary files. Fixes #3737 (#3738) Removed unnecessary files. Issue was fixed via #1813 and the extra readmes is not needed anymore --- v2/pkg/templates/generate/assets/vue-ts/frontend/READ-THIS.md | 4 ---- v2/pkg/templates/templates/vue-ts/frontend/READ-THIS.md | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 v2/pkg/templates/generate/assets/vue-ts/frontend/READ-THIS.md delete mode 100644 v2/pkg/templates/templates/vue-ts/frontend/READ-THIS.md diff --git a/v2/pkg/templates/generate/assets/vue-ts/frontend/READ-THIS.md b/v2/pkg/templates/generate/assets/vue-ts/frontend/READ-THIS.md deleted file mode 100644 index 15b2483d9..000000000 --- a/v2/pkg/templates/generate/assets/vue-ts/frontend/READ-THIS.md +++ /dev/null @@ -1,4 +0,0 @@ -This template uses a work around as the default template does not compile due to this issue: -https://github.com/vuejs/core/issues/1228 - -In `tsconfig.json`, `isolatedModules` is set to `false` rather than `true` to work around the issue. \ No newline at end of file diff --git a/v2/pkg/templates/templates/vue-ts/frontend/READ-THIS.md b/v2/pkg/templates/templates/vue-ts/frontend/READ-THIS.md deleted file mode 100644 index 15b2483d9..000000000 --- a/v2/pkg/templates/templates/vue-ts/frontend/READ-THIS.md +++ /dev/null @@ -1,4 +0,0 @@ -This template uses a work around as the default template does not compile due to this issue: -https://github.com/vuejs/core/issues/1228 - -In `tsconfig.json`, `isolatedModules` is set to `false` rather than `true` to work around the issue. \ No newline at end of file From f302c8053c97f834d67b3c8b33aac7797d1a4302 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Wed, 18 Sep 2024 05:27:59 +1000 Subject: [PATCH 031/344] v2.9.2 --- .github/workflows/build-and-test.yml | 36 ++++++++++++++++++---------- v2/cmd/wails/internal/version.txt | 2 +- v2/go.mod | 2 +- v2/go.sum | 4 ++-- website/src/pages/changelog.mdx | 3 ++- 5 files changed, 30 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index cd9cfa42a..8fe647c6f 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -12,8 +12,8 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest, macos-11] - go-version: ['1.21'] + os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest] + go-version: ['1.22'] steps: - name: Checkout code @@ -28,7 +28,7 @@ jobs: - uses: awalsh128/cache-apt-pkgs-action@latest if: matrix.os == 'ubuntu-24.04' with: - packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config + packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1 version: 1.0 - name: Setup Go @@ -38,14 +38,14 @@ jobs: cache-dependency-path: ./v2/go.sum - name: Run tests (mac) - if: matrix.os == 'macos-latest' || matrix.os == 'macos-11' + if: matrix.os == 'macos-latest' env: CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13 working-directory: ./v2 run: go test -v ./... - name: Run tests (!mac) - if: matrix.os != 'macos-latest' && matrix.os != 'macos-11' && matrix.os != 'ubuntu-24.04' + if: matrix.os != 'macos-latest' && matrix.os != 'ubuntu-24.04' working-directory: ./v2 run: go test -v ./... @@ -86,7 +86,7 @@ jobs: strategy: fail-fast: true matrix: - os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04, macos-11] + os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04] template: [ svelte, @@ -103,13 +103,13 @@ jobs: vanilla-ts, plain, ] - go-version: ['1.21'] + go-version: ['1.22'] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Go - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} cache-dependency-path: ./v2/go.sum @@ -120,13 +120,25 @@ jobs: go install wails -help - - name: Install linux dependencies ( 22.04 ) + - uses: awalsh128/cache-apt-pkgs-action@latest if: matrix.os == 'ubuntu-22.04' - run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config + with: + packages: libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config + version: 1.0 - - name: Install linux dependencies ( 24.04 ) +# - name: Install linux dependencies ( 22.04 ) +# if: matrix.os == 'ubuntu-22.04' +# run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config + + - uses: awalsh128/cache-apt-pkgs-action@latest if: matrix.os == 'ubuntu-24.04' - run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config + with: + packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1 + version: 1.0 + +# - name: Install linux dependencies ( 24.04 ) +# if: matrix.os == 'ubuntu-24.04' +# run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config - name: Generate & Build template '${{ matrix.template }}' if: matrix.os != 'ubuntu-24.04' diff --git a/v2/cmd/wails/internal/version.txt b/v2/cmd/wails/internal/version.txt index 899ab6bc4..e949dccbb 100644 --- a/v2/cmd/wails/internal/version.txt +++ b/v2/cmd/wails/internal/version.txt @@ -1 +1 @@ -v2.9.1 \ No newline at end of file +v2.9.2 \ No newline at end of file diff --git a/v2/go.mod b/v2/go.mod index 375f6ee6f..e34eb43ee 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -36,7 +36,7 @@ require ( github.com/tc-hib/winres v0.2.1 github.com/tidwall/sjson v1.1.7 github.com/tkrajina/go-reflector v0.5.6 - github.com/wailsapp/go-webview2 v1.0.10 + github.com/wailsapp/go-webview2 v1.0.16 github.com/wailsapp/mimetype v1.4.1 github.com/wzshiming/ctc v1.2.3 golang.org/x/mod v0.14.0 diff --git a/v2/go.sum b/v2/go.sum index 6e273e1ba..1034139b2 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -234,8 +234,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/wailsapp/go-webview2 v1.0.10 h1:PP5Hug6pnQEAhfRzLCoOh2jJaPdrqeRgJKZhyYyDV/w= -github.com/wailsapp/go-webview2 v1.0.10/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= +github.com/wailsapp/go-webview2 v1.0.16 h1:wffnvnkkLvhRex/aOrA3R7FP7rkvOqL/bir1br7BekU= +github.com/wailsapp/go-webview2 v1.0.16/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wzshiming/ctc v1.2.3 h1:q+hW3IQNsjIlOFBTGZZZeIXTElFM4grF4spW/errh/c= diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index feb5db885..f277c2b5a 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -14,6 +14,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## v2.9.2 - 2024-09-18 + ### Fixed - Fixed CGO memory issue on Darwin by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/3590) - Fixed an error that occurred when an author name contains a string that is not suitable for JSON. Fixed by @taiseiotsuka in [PR](https://github.com/wailsapp/wails/pull/3638) @@ -33,7 +35,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](github.com/ignasbernotas) - ## v2.9.1 - 2024-06-18 ### Fixed From 429e94f4ce0285eef05de29971185cc1daa98935 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 22 Sep 2024 11:29:59 +1000 Subject: [PATCH 032/344] Update Sponsor Image (#3767) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 39b6bc7d5..e6d1d06c3 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -66,33 +66,29 @@ text { Michael -Buying Breakfast - tc-hib - - - - Tai Groot - +Buying Breakfast + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - + Sander + Buying Coffee From bd2c1ea73f636d3176d9b24435e77beb279feaaa Mon Sep 17 00:00:00 2001 From: nick-bae <48244064+nickisworking@users.noreply.github.com> Date: Sun, 29 Sep 2024 12:06:27 +0900 Subject: [PATCH 033/344] bugfix : fix error on building runnable .app on MacOS when 'name' and 'outputfilename' are different. (#3789) * mod : added OutputFilename field to assetData \n mod : modified resolveProjectData to export OutputFilename \n mod : modified CFBundleExecutable values to .OutputFilename in info.dev.plist, info.plist * mod : update changelog.mdx --------- Co-authored-by: nick-bae --- v2/pkg/buildassets/build/darwin/Info.dev.plist | 2 +- v2/pkg/buildassets/build/darwin/Info.plist | 2 +- v2/pkg/buildassets/buildassets.go | 10 ++++++---- website/src/pages/changelog.mdx | 1 + 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/v2/pkg/buildassets/build/darwin/Info.dev.plist b/v2/pkg/buildassets/build/darwin/Info.dev.plist index 04727c23f..14121ef7c 100644 --- a/v2/pkg/buildassets/build/darwin/Info.dev.plist +++ b/v2/pkg/buildassets/build/darwin/Info.dev.plist @@ -6,7 +6,7 @@ CFBundleName {{.Info.ProductName}} CFBundleExecutable - {{.Name}} + {{.OutputFilename}} CFBundleIdentifier com.wails.{{.Name}} CFBundleVersion diff --git a/v2/pkg/buildassets/build/darwin/Info.plist b/v2/pkg/buildassets/build/darwin/Info.plist index 19cc9370c..d17a7475c 100644 --- a/v2/pkg/buildassets/build/darwin/Info.plist +++ b/v2/pkg/buildassets/build/darwin/Info.plist @@ -6,7 +6,7 @@ CFBundleName {{.Info.ProductName}} CFBundleExecutable - {{.Name}} + {{.OutputFilename}} CFBundleIdentifier com.wails.{{.Name}} CFBundleVersion diff --git a/v2/pkg/buildassets/buildassets.go b/v2/pkg/buildassets/buildassets.go index 778d97fbf..6934b98bd 100644 --- a/v2/pkg/buildassets/buildassets.go +++ b/v2/pkg/buildassets/buildassets.go @@ -102,8 +102,9 @@ func ReadOriginalFileWithProjectDataAndSave(projectData *project.Project, file s } type assetData struct { - Name string - Info project.Info + Name string + Info project.Info + OutputFilename string } func resolveProjectData(content []byte, projectData *project.Project) ([]byte, error) { @@ -113,8 +114,9 @@ func resolveProjectData(content []byte, projectData *project.Project) ([]byte, e } data := &assetData{ - Name: projectData.Name, - Info: projectData.Info, + Name: projectData.Name, + Info: projectData.Info, + OutputFilename: projectData.OutputFilename, } var out bytes.Buffer diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index f277c2b5a..4bd7beefc 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed dialogs in Windows when using Go 1.23 in [PR](https://github.com/wailsapp/wails/pull/3707) by [@leaanthony](https://github.com/leaanthony) - More syscall fixes for Go 1.23 support in [PR](https://github.com/wailsapp/wails/pull/3713) by [@leaanthony](https://github.com/leaanthony) - Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) +- Fixed a build error on macOS that occurred when the `outputfilename` and `name` fields in wails.json were different. Fixed in [PR](https://github.com/wailsapp/wails/pull/3789) by [@nickisworking](https://github.com/nickisworking) ### Changed - Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](github.com/ignasbernotas) From a6288c414e737296475ab2513333b0ba639d144d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:48:28 +1000 Subject: [PATCH 034/344] Update Sponsor Image (#3769) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index e6d1d06c3..edfdfb8e7 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -167,36 +167,36 @@ text { - - - - - + - + - + - + - + - + - + + + + + From 5b8594928b2d7e402e0c84668e4e618b33c72083 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 19:45:35 +1100 Subject: [PATCH 035/344] Update Sponsor Image (#3799) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 42 ++++++++++++++++----------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index edfdfb8e7..1833c88e0 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -88,7 +88,7 @@ text { Sander - + Buying Coffee @@ -134,69 +134,69 @@ text { - + - + - + - + - + + + + + Helpers - + - + - + - + - + - + - + - + - + - + - - - - - + From 7a5e41f90402919b0a543af9744defff62eb8c14 Mon Sep 17 00:00:00 2001 From: Barat Semet Date: Thu, 10 Oct 2024 16:45:56 +0800 Subject: [PATCH 036/344] Add Resizem to community showcase (#3813) Resizem is an app designed for bulk image process. It is particularly useful for users who need to resize, convert, and manage large numbers of image files at once. --- website/docs/community/showcase/resizem.mdx | 10 ++++++++++ website/static/img/showcase/resizem.webp | Bin 0 -> 75486 bytes 2 files changed, 10 insertions(+) create mode 100644 website/docs/community/showcase/resizem.mdx create mode 100644 website/static/img/showcase/resizem.webp diff --git a/website/docs/community/showcase/resizem.mdx b/website/docs/community/showcase/resizem.mdx new file mode 100644 index 000000000..27f168f48 --- /dev/null +++ b/website/docs/community/showcase/resizem.mdx @@ -0,0 +1,10 @@ +# Resizem + +```mdx-code-block +

+ +
+

+``` + +[Resizem](https://github.com/barats/resizem) - is an app designed for bulk image process. It is particularly useful for users who need to resize, convert, and manage large numbers of image files at once. diff --git a/website/static/img/showcase/resizem.webp b/website/static/img/showcase/resizem.webp new file mode 100644 index 0000000000000000000000000000000000000000..61e19842fa48e3e60fab4053976f0fa963877143 GIT binary patch literal 75486 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 F_#b^$yQ}~J literal 0 HcmV?d00001 From a2e32fe414956f817248420e259002f3d9f8b522 Mon Sep 17 00:00:00 2001 From: xvertile <123594600+xvertile@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:46:27 +0200 Subject: [PATCH 037/344] Updated documentation with new wails template (#3802) Created a new template using the latest version of wails and tailwind. --- website/docs/community/templates.mdx | 1 + .../current/community/templates.mdx | 2 ++ 2 files changed, 3 insertions(+) diff --git a/website/docs/community/templates.mdx b/website/docs/community/templates.mdx index 446896849..6f26bc586 100644 --- a/website/docs/community/templates.mdx +++ b/website/docs/community/templates.mdx @@ -46,6 +46,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite +- [wails-vite-svelte-ts-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - A template using Wails, Svelte, Vite, TypeScript, and TailwindCSS v3 - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 - [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - An updated template using Svelte v4.2.0 and Vite with TailwindCSS v3.3.3 - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx index 65f46a9e1..b1afb0865 100644 --- a/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -45,6 +45,8 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - A template using Svelte - [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - A template using Svelte and Vite +- [wails-vite-svelte-ts-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - A template using Wails, Svelte, Vite, TypeScript, and TailwindCSS v3 +- [wails-vite-svelte-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 - [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - An updated template using Svelte v4.2.0 and Vite with TailwindCSS v3.3.3 - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit From 8a5a0506bfee24abd979968ffa30cfed925e56fa Mon Sep 17 00:00:00 2001 From: fcying Date: Thu, 10 Oct 2024 17:17:43 +0800 Subject: [PATCH 038/344] fix: pass platform and arch to GenerateBindings for cross compilation (#3795) --- v2/pkg/commands/bindings/bindings.go | 8 +++++++- v2/pkg/commands/build/build.go | 2 ++ website/src/pages/changelog.mdx | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/v2/pkg/commands/bindings/bindings.go b/v2/pkg/commands/bindings/bindings.go index a4a84e1be..d1c8d60bf 100644 --- a/v2/pkg/commands/bindings/bindings.go +++ b/v2/pkg/commands/bindings/bindings.go @@ -20,6 +20,8 @@ type Options struct { ProjectDirectory string Compiler string GoModTidy bool + Platform string + Arch string TsPrefix string TsSuffix string TsOutputType string @@ -53,7 +55,11 @@ func GenerateBindings(options Options) (string, error) { } } - stdout, stderr, err = shell.RunCommand(workingDirectory, options.Compiler, "build", "-tags", tagString, "-o", filename) + envBuild := os.Environ() + envBuild = shell.SetEnv(envBuild, "GOOS", options.Platform) + envBuild = shell.SetEnv(envBuild, "GOARCH", options.Arch) + + stdout, stderr, err = shell.RunCommandWithEnv(envBuild, workingDirectory, options.Compiler, "build", "-tags", tagString, "-o", filename) if err != nil { return stdout, fmt.Errorf("%s\n%s\n%s", stdout, stderr, err) } diff --git a/v2/pkg/commands/build/build.go b/v2/pkg/commands/build/build.go index 261f4c6d7..f247f2db1 100644 --- a/v2/pkg/commands/build/build.go +++ b/v2/pkg/commands/build/build.go @@ -231,6 +231,8 @@ func GenerateBindings(buildOptions *Options) error { Compiler: buildOptions.Compiler, Tags: buildOptions.UserTags, GoModTidy: !buildOptions.SkipModTidy, + Platform: buildOptions.Platform, + Arch: buildOptions.Arch, TsPrefix: buildOptions.ProjectData.Bindings.TsGeneration.Prefix, TsSuffix: buildOptions.ProjectData.Bindings.TsGeneration.Suffix, TsOutputType: buildOptions.ProjectData.Bindings.TsGeneration.OutputType, diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 4bd7beefc..9890a0cfa 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Security` in case of vulnerabilities. ## [Unreleased] +### Fixed +- Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) ## v2.9.2 - 2024-09-18 From 10abe246b0adb112a3853352f6a5a27ff68e7dcc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:01:02 +1100 Subject: [PATCH 039/344] Update Sponsor Image (#3818) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 56 ++++++++++++++------------------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 1833c88e0..9c55ef856 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -36,36 +36,32 @@ text { Ansar Smagulov Covering Costs - Nick - + Nick + - Marcus - + Marcus + - John - + John + - Matt Holt - + Matt Holt + - Iain - - - - Julien - + Iain + - Andrei - + Andrei + - Michael - + Michael + Buying Breakfast Tai Groot @@ -157,46 +153,42 @@ text { Helpers - + - + - - - - - + - + - + - + - + - + - + - + From 26ff639b6239b886fc61bab9028481078a004215 Mon Sep 17 00:00:00 2001 From: JinTao Chen <118103548+tongque0@users.noreply.github.com> Date: Sun, 13 Oct 2024 15:14:58 +0800 Subject: [PATCH 040/344] Updated documentation with new wails template (#3820) --- website/docs/community/templates.mdx | 1 + .../current/community/templates.mdx | 1 + 2 files changed, 2 insertions(+) diff --git a/website/docs/community/templates.mdx b/website/docs/community/templates.mdx index 6f26bc586..44bea3875 100644 --- a/website/docs/community/templates.mdx +++ b/website/docs/community/templates.mdx @@ -27,6 +27,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - A template using JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier) - [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - A template using TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API with <script setup>) - [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Wails template based on Naive UI (A Vue 3 Component Library) +- [wails-template-tdesign-js](https://github.com/tongque0/wails-template-tdesign-js) - Wails template based on TDesign UI (a Vue 3 UI library by Tencent), using Vite, Pinia, Vue Router, ESLint, and Prettier. ## Angular diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx index 6a67454a8..f207b6390 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/templates.mdx @@ -26,6 +26,7 @@ sidebar_position: 1 - [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - 使用 JavaScript + Quasar V2(Vue 3, Vite, Sass, Pinia, ESLint, Prettier)的模板 - [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - 使用 TypeScript + Quasar V2(Vue 3、Vite、Sass、Pinia、ESLint、Prettier、带 <script setup> 的Composition API)的模板 - [wails-template-naive](https://github.com/tk103331/wails-template-naive) - 基于 Naive UI(一款 Vue 3 组件库)的 Wails 模板 +- [wails-template-tdesign-js](https://github.com/tongque0/wails-template-tdesign-js) - 基于 TDesign UI(腾讯的 Vue 3 组件库)的 Wails 模板,使用 Vite、Pinia、Vue Router、ESLint 和 Prettier。 ## Angular From 14cc9ec45b7151fac6f172101fc19b72282e0fda Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 01:26:01 +1100 Subject: [PATCH 041/344] Update Sponsor Image (#3824) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 9c55ef856..314b7573b 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -63,28 +63,32 @@ text { Michael Buying Breakfast - Tai Groot - + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - + Sander + + + + Andy Alexa + Buying Coffee From 1b6ed1bc0079a29010024551fb88abd0187694ee Mon Sep 17 00:00:00 2001 From: Andrey Pshenkin Date: Sun, 20 Oct 2024 03:36:13 +0100 Subject: [PATCH 042/344] Allow set window class name via options for Windows (#3828) * Allow set window class name via options * update changelog --- v2/internal/frontend/desktop/windows/window.go | 9 +++++++-- v2/pkg/options/windows/windows.go | 3 +++ website/docs/reference/options.mdx | 13 +++++++++++-- website/src/pages/changelog.mdx | 3 +++ 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index a513e875a..1e4289ee6 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -70,8 +70,13 @@ func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *ope var dwStyle = w32.WS_OVERLAPPEDWINDOW - winc.RegClassOnlyOnce("wailsWindow") - handle := winc.CreateWindow("wailsWindow", parent, uint(exStyle), uint(dwStyle)) + windowClassName := "wailsWindow" + if windowsOptions != nil && windowsOptions.WindowClassName != "" { + windowClassName = windowsOptions.WindowClassName + } + + winc.RegClassOnlyOnce(windowClassName) + handle := winc.CreateWindow(windowClassName, parent, uint(exStyle), uint(dwStyle)) result.SetHandle(handle) winc.RegMsgHandler(result) result.SetParent(parent) diff --git a/v2/pkg/options/windows/windows.go b/v2/pkg/options/windows/windows.go index 39b91ee8d..8f3bce44a 100644 --- a/v2/pkg/options/windows/windows.go +++ b/v2/pkg/options/windows/windows.go @@ -118,6 +118,9 @@ type Options struct { // Configure whether swipe gestures should be enabled EnableSwipeGestures bool + + // Class name for the window. If empty, 'wailsWindow' will be used. + WindowClassName string } func DefaultMessages() *Messages { diff --git a/website/docs/reference/options.mdx b/website/docs/reference/options.mdx index e94c22f47..efcc67961 100644 --- a/website/docs/reference/options.mdx +++ b/website/docs/reference/options.mdx @@ -99,7 +99,9 @@ func main() { // OnResume is called when Windows resumes from low power mode OnResume: func(), // Disable GPU hardware acceleration for the webview - WebviewGpuDisabled: false, + WebviewGpuDisabled: false, + // Class name for the window. If empty, 'wailsWindow' will be used. + WindowClassName: "MyWindow", }, Mac: &mac.Options{ TitleBar: &mac.TitleBar{ @@ -322,7 +324,7 @@ If not defined, the result is the following in cases where the Handler would hav :::info -This does not work with vite v5.0.0+ and wails v2 due to changes in vite. +This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details @@ -804,6 +806,13 @@ Setting this to `true` will enable swipe gestures for the webview. Name: EnableSwipeGestures
Type: `bool` +#### WindowClassName + +Class name for the window. If empty, 'wailsWindow' will be used. + +Name: WindowClassName
+Type: `string` + ### Mac This defines [Mac specific options](#mac). diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 9890a0cfa..b90a8549c 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -13,6 +13,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Security` in case of vulnerabilities. ## [Unreleased] +### Added +- Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin + ### Fixed - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) From f33e6273603838e2a855f6535f7d4b1a5514cb4e Mon Sep 17 00:00:00 2001 From: William Kim Date: Sun, 20 Oct 2024 12:08:52 +0900 Subject: [PATCH 043/344] docs: add korean translation for Introduction (#3780) --- .../current/introduction.mdx | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/website/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx b/website/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx index e3118cba3..d99696d55 100644 --- a/website/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx +++ b/website/i18n/ko/docusaurus-plugin-content-docs/current/introduction.mdx @@ -4,24 +4,24 @@ sidebar_position: 1 # 소개 -Wails is a project that enables you to write desktop apps using Go and web technologies. +Wails는 Go와 웹 기술을 사용하여 데스크톱 앱을 작성할 수 있게 해주는 프로젝트입니다. -Consider it a lightweight and fast Electron alternative for Go. You can easily build applications with the flexibility and power of Go, combined with a rich, modern frontend. +Go를 위한 가볍고 빠른 Electron 대안으로 생각하세요. 유연성과 강력한 Go의 힘을 결합한 풍부하고 현대적인 프론트엔드와 함께 쉽게 애플리케이션을 구축할 수 있습니다. -### Features +### 특징 -- Native Menus, Dialogs, Theming and Translucency -- Windows, macOS and linux support -- Built in templates for Svelte, React, Preact, Vue, Lit and Vanilla JS -- Easily call Go methods from JavaScript -- Automatic Go struct to TypeScript model generation -- No CGO or external DLLs required on Windows -- Live development mode using the power of [Vite](https://vitejs.dev/) -- Powerful CLI to easily Create, Build and Package applications -- A rich [runtime library](/docs/reference/runtime/intro) -- Applications built with Wails are Apple & Microsoft Store compliant +- 네이티브 메뉴, 대화 상자, 테마 및 반투명 효과 +- Windows, macOS 및 Linux 지원 +- Svelte, React, Preact, Vue, Lit 및 Vanilla JS용 내장 템플릿 +- JavaScript에서 Go 메서드를 쉽게 호출 +- 자동 Go 구조체에서 TypeScript 모델 생성 +- Windows에서 CGO 또는 외부 DLL 필요 없음 +- [Vite](https://vitejs.dev/)의 힘을 이용한 라이브 개발 가능 +- 애플리케이션을 쉽게 생성, 빌드 및 패키징할 수 있는 강력한 CLI +- 풍부한 [런타임 라이브러리](/docs/reference/runtime/intro) +- Wails로 빌드된 애플리케이션은 Apple 및 Microsoft Store 준수 -This is varly - a desktop application for MacOS & Windows written using Wails. Not only does it look great, it uses native menus and translucency - everything you'd expect from a modern native app. +이것은 Wails를 사용하여 작성된 MacOS 및 Windows용 데스크톱 애플리케이션 varly입니다. 훌륭한 외관을 제공할 뿐만 아니라 네이티브 메뉴와 반투명 효과를 사용하여 현대적인 네이티브 앱에서 기대할 수 있는 모든 것을 제공합니다. ```mdx-code-block

@@ -32,42 +32,42 @@ This is varly - a desktop application for MacOS & Windows written using Wails. N

``` -### Quick Start Templates +### 빠른 시작 템플릿 -Wails comes with a number of pre-configured templates that allow you to get your application up and running quickly. There are templates for the following frameworks: Svelte, React, Vue, Preact, Lit and Vanilla. There are both JavaScript and TypeScript versions for each template. +Wails는 애플리케이션을 빠르게 실행할 수 있게 해주는 사전 구성된 템플릿을 여러 개 제공합니다. 다음 프레임워크에 대한 템플릿이 있습니다: Svelte, React, Vue, Preact, Lit 및 Vanilla. 각 템플릿에는 JavaScript 및 TypeScript 버전이 모두 있습니다. -### Native Elements +### 네이티브 요소 -Wails uses a purpose built library for handling native elements such as Window, Menus, Dialogs, etc, so you can build good-looking, feature rich desktop applications. +Wails는 윈도우, 메뉴, 대화 상자 등과 같은 네이티브 요소를 처리하기 위해 특별히 제작된 라이브러리를 사용하므로, 보기 좋고 기능이 풍부한 데스크톱 애플리케이션을 구축할 수 있습니다. -**It does not embed a browser**, so it delivers a small runtime. Instead, it reuses the native rendering engine for the platform. On Windows, this is the new Microsoft Webview2 library, built on Chromium. +**브라우저를 내장하지 않으므로**, 작은 런타임을 제공합니다. 대신 플랫폼의 네이티브 렌더링 엔진을 재사용합니다. Windows에서는 Chromium 기반의 새로운 Microsoft Webview2 라이브러리를 사용합니다. -### Go & JavaScript Interoperability +### Go & JavaScript 상호 작용 -Wails automatically makes your Go methods available to JavaScript, so you can call them by name from your frontend! It even generates TypeScript models for the structs used by your Go methods, so you can pass the same data structures between Go and JavaScript. +Wails는 Go 메서드를 JavaScript에서 사용할 수 있게 자동으로 만들어 주므로 프론트엔드에서 이름으로 호출할 수 있습니다! Go 메서드에서 사용하는 구조체에 대한 TypeScript 모델도 생성하여 Go와 JavaScript 간에 동일한 데이터 구조를 전달할 수 있습니다. -### Runtime Library +### 런타임 라이브러리 -Wails provides a runtime library, for both Go and JavaScript, that handles a lot of the things modern applications need, like Eventing, Logging, Dialogs, etc. +Wails는 Go와 JavaScript 모두를 위한 런타임 라이브러리를 제공하여 이벤트 처리, 로깅, 대화 상자 등과 같은 현대적인 애플리케이션이 필요로 하는 많은 기능을 처리합니다. -### Live Development Experience +### 라이브 개발 경험 -#### Automatic Rebuilds +#### 자동 재빌드 -When you run your application in "dev" mode, Wails will build your application as a native desktop application, but will read your assets from disk. It will detect any changes to your Go code and automatically rebuild and relaunch your application. +애플리케이션을 "개발" 모드에서 실행하면, Wails는 애플리케이션을 네이티브 데스크톱 애플리케이션으로 빌드하지만 에셋을 디스크에서 읽습니다. Go 코드의 변경 사항을 감지하고 자동으로 애플리케이션을 재빌드하고 재시작합니다. -#### Automatic Reloads +#### 자동 리로드 -When changes to your application assets are detected, your running application will "reload", reflecting your changes almost immediately. +애플리케이션 에셋의 변경 사항이 감지되면, 실행 중인 애플리케이션이 "리로드"되어 변경 사항을 거의 즉시 반영합니다. -#### Develop your application in a Browser +#### 브라우저를 이용한 애플리케이션 개발 -If you prefer to debug and develop in a browser then Wails has you covered. The running application also has a webserver that will run your application in any browser that connects to it. It will even refresh when your assets change on disk. +디버그 및 개발을 브라우저에서 선호하는 경우, Wails는 이를 지원합니다. 실행 중인 애플리케이션은 연결된 모든 브라우저에서 애플리케이션을 실행할 웹 서버도 가지고 있습니다. 에셋이 디스크에서 변경되면 자동으로 리로드합니다. -### Production-ready Native Binaries +### 프로덕션용 네이티브 바이너리 -When you're ready to do the final build of your application, the CLI will compile it down to a single executable, with all the assets bundled into it. On Windows and MacOS, it is possible to create a native package for distribution. The assets used in packaging (icon, info.plist, manifest file, etc) are part of your project and may be customised, giving you total control over how your applications are built. +애플리케이션의 최종 빌드를 준비하면, CLI는 모든 에셋이 포함된 단일 실행 파일로 컴파일합니다. Windows 및 MacOS에서는 배포를 위한 네이티브 패키지를 생성할 수 있습니다. 패키징에 사용되는 에셋(아이콘, info.plist, 매니페스트 파일 등)은 프로젝트의 일부이며 사용자 지정이 가능하여 애플리케이션 빌드 방식을 완벽하게 제어할 수 있습니다. -### Tooling +### 도구 -The Wails CLI provides a hassle-free way to generate, build and bundle your applications. It will do the heavy lifting of creating icons, compiling your application with optimal settings and delivering a distributable, production ready binary. Choose from a number of starter templates to get up and running quickly! +Wails CLI는 애플리케이션을 생성, 빌드 및 번들링하는 번거로움 없는 방법을 제공합니다. 아이콘 생성, 최적 설정으로 애플리케이션 컴파일, 배포 가능한 프로덕션 준비 바이너리 제공 등의 무거운 작업을 수행합니다. 여러 시작 템플릿 중에서 선택하여 빠르게 시작하세요! From a964be1ada4e403380518bd807477cedd86efd81 Mon Sep 17 00:00:00 2001 From: Andrey Pshenkin Date: Sun, 20 Oct 2024 04:09:39 +0100 Subject: [PATCH 044/344] Allow to specify macos-min-version externally (#3756) * Allow to specify macos-min-version externally * update changelog * add note in documentation for macos version * spelling fixes --- v2/pkg/commands/build/base.go | 8 ++++++-- website/docs/reference/cli.mdx | 7 +++++++ website/src/pages/changelog.mdx | 3 +++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/v2/pkg/commands/build/base.go b/v2/pkg/commands/build/base.go index 6595aff0f..aafee66ae 100644 --- a/v2/pkg/commands/build/base.go +++ b/v2/pkg/commands/build/base.go @@ -307,7 +307,9 @@ func (b *BaseBuilder) CompileProject(options *Options) error { if v != "" { v += " " } - v += "-mmacosx-version-min=10.13" + if !strings.Contains(v, "-mmacosx-version-min") { + v += "-mmacosx-version-min=10.13" + } } return v }) @@ -344,7 +346,9 @@ func (b *BaseBuilder) CompileProject(options *Options) error { if addUTIFramework { v += "-framework UniformTypeIdentifiers " } - v += "-mmacosx-version-min=10.13" + if !strings.Contains(v, "-mmacosx-version-min") { + v += "-mmacosx-version-min=10.13" + } return v }) diff --git a/website/docs/reference/cli.mdx b/website/docs/reference/cli.mdx index 6c63cf163..dc816a56b 100644 --- a/website/docs/reference/cli.mdx +++ b/website/docs/reference/cli.mdx @@ -103,6 +103,13 @@ There are [issues](https://github.com/upx/upx/issues/446) with using UPX with Ap ::: +:::info Set minimal version for MacOS + +You can override default [minimal version](../gettingstarted/installation#supported-platforms) of macOS for your app by providing version via `CGO_CFLAGS` and `CGO_LDFLAGS` environment variables. +e.g. `CGO_CFLAGS=-mmacosx-version-min=10.15.0 CGO_LDFLAGS=-mmacosx-version-min=10.15.0 wails build` + +::: + :::info UPX on Windows Some Antivirus vendors false positively mark `upx` compressed binaries as virus, see [issue](https://github.com/upx/upx/issues/437). diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index b90a8549c..b8e502585 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -19,6 +19,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) +### Changed +- Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) + ## v2.9.2 - 2024-09-18 ### Fixed From f08f4be868d8d2c552ca1abf2279ee7a53dfb7a8 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 20 Oct 2024 14:17:49 +1100 Subject: [PATCH 045/344] Rebuild runtime js --- v2/internal/frontend/runtime/runtime_debug_desktop.js | 4 ++-- v2/internal/frontend/runtime/runtime_prod_desktop.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/v2/internal/frontend/runtime/runtime_debug_desktop.js b/v2/internal/frontend/runtime/runtime_debug_desktop.js index d6b66521f..3ed2890e0 100644 --- a/v2/internal/frontend/runtime/runtime_debug_desktop.js +++ b/v2/internal/frontend/runtime/runtime_debug_desktop.js @@ -454,7 +454,7 @@ if (!window.wails.flags.enableWailsDragAndDrop) { return; } - e.dataTransfer.dropEffect = 'copy'; + e.dataTransfer.dropEffect = "copy"; e.preventDefault(); if (!flags.useDropTarget) { return; @@ -768,4 +768,4 @@ }); window.WailsInvoke("runtime:ready"); })(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX19cclxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vKipcclxuICogU2VuZHMgYSBsb2cgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB3aXRoIHRoZSBnaXZlbiBsZXZlbCArIG1lc3NhZ2VcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xyXG5cclxuXHQvLyBMb2cgTWVzc2FnZSBmb3JtYXQ6XHJcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxyXG5cdHdpbmRvdy5XYWlsc0ludm9rZSgnTCcgKyBsZXZlbCArIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB0cmFjZSBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1RyYWNlKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnVCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1ByaW50KG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBkZWJ1ZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnRCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBpbmZvIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nSW5mbyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0knLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1dhcm5pbmcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdFJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGZhdGFsIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRmF0YWwobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdGJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNldExvZ0xldmVsKGxvZ2xldmVsKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XHJcbn1cclxuXHJcbi8vIExvZyBsZXZlbHNcclxuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xyXG5cdFRSQUNFOiAxLFxyXG5cdERFQlVHOiAyLFxyXG5cdElORk86IDMsXHJcblx0V0FSTklORzogNCxcclxuXHRFUlJPUjogNSxcclxufTtcclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuLy8gRGVmaW5lcyBhIHNpbmdsZSBsaXN0ZW5lciB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbGJhY2tcclxuXHJcbi8qKlxyXG4gKiBUaGUgTGlzdGVuZXIgY2xhc3MgZGVmaW5lcyBhIGxpc3RlbmVyISA6LSlcclxuICpcclxuICogQGNsYXNzIExpc3RlbmVyXHJcbiAqL1xyXG5jbGFzcyBMaXN0ZW5lciB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heENhbGxiYWNrc1xyXG4gICAgICogQG1lbWJlcm9mIExpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcclxuICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBnaXZlbiBkYXRhXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxyXG4gICAgICAgIHRoaXMuQ2FsbGJhY2sgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhDYWxsYmFja3MgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRGVjcmVtZW50IG1heENhbGxiYWNrcy4gUmV0dXJuIHRydWUgaWYgbm93IDAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGV2ZW50TGlzdGVuZXJzID0ge307XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGBtYXhDYWxsYmFja3NgIHRpbWVzIGJlZm9yZSBiZWluZyBkZXN0cm95ZWRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XHJcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh0aGlzTGlzdGVuZXIpO1xyXG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVyT2ZmKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoZXZlbnREYXRhKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBldmVudCBuYW1lXHJcbiAgICBsZXQgZXZlbnROYW1lID0gZXZlbnREYXRhLm5hbWU7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgbGlzdGVuZXJzIGZvciB0aGlzIGV2ZW50XHJcbiAgICBpZiAoZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSkge1xyXG5cclxuICAgICAgICAvLyBLZWVwIGEgbGlzdCBvZiBsaXN0ZW5lciBpbmRleGVzIHRvIGRlc3Ryb3lcclxuICAgICAgICBjb25zdCBuZXdFdmVudExpc3RlbmVyTGlzdCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uc2xpY2UoKTtcclxuXHJcbiAgICAgICAgLy8gSXRlcmF0ZSBsaXN0ZW5lcnNcclxuICAgICAgICBmb3IgKGxldCBjb3VudCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoIC0gMTsgY291bnQgPj0gMDsgY291bnQgLT0gMSkge1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IG5leHQgbGlzdGVuZXJcclxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdW2NvdW50XTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnREYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcclxuICAgICAgICAgICAgY29uc3QgZGVzdHJveSA9IGxpc3RlbmVyLkNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcclxuICAgICAgICAgICAgICAgIG5ld0V2ZW50TGlzdGVuZXJMaXN0LnNwbGljZShjb3VudCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBjYWxsYmFja3Mgd2l0aCBuZXcgbGlzdCBvZiBsaXN0ZW5lcnNcclxuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSkge1xyXG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xyXG4gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFWCcgKyBldmVudE5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT24sXHJcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09mZihldmVudE5hbWUsIC4uLmFkZGl0aW9uYWxFdmVudE5hbWVzKSB7XHJcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXHJcblxyXG4gICAgaWYgKGFkZGl0aW9uYWxFdmVudE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGFsbCBldmVudCBsaXN0ZW5lcnMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT25cclxuICovXHJcbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xyXG4gICAgY29uc3QgZXZlbnROYW1lcyA9IE9iamVjdC5rZXlzKGV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpICE9PSBldmVudE5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lc1tpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBsaXN0ZW5lck9mZiB1bnJlZ2lzdGVycyBhIGxpc3RlbmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIEV2ZW50c09uXHJcbiAqXHJcbiAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXHJcbiAqL1xyXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcclxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGxpc3RlbmVyLmV2ZW50TmFtZTtcclxuICAgIC8vIFJlbW92ZSBsb2NhbCBsaXN0ZW5lclxyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xyXG5cclxuICAgIC8vIENsZWFuIHVwIGlmIHRoZXJlIGFyZSBubyBldmVudCBsaXN0ZW5lcnMgbGVmdFxyXG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lKTtcclxuICAgIH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cclxuICpcclxuICogQHJldHVybnMgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBjcnlwdG9SYW5kb20oKSB7XHJcblx0dmFyIGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpO1xyXG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGEgbnVtYmVyIHVzaW5nIGRhIG9sZC1za29vbCBNYXRoLlJhbmRvbVxyXG4gKiBJIGxpa2VzIHRvIGNhbGwgaXQgTE9MUmFuZG9tXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XHJcblx0cmV0dXJuIE1hdGgucmFuZG9tKCkgKiA5MDA3MTk5MjU0NzQwOTkxO1xyXG59XHJcblxyXG4vLyBQaWNrIGEgcmFuZG9tIG51bWJlciBmdW5jdGlvbiBiYXNlZCBvbiBicm93c2VyIGNhcGFiaWxpdHlcclxudmFyIHJhbmRvbUZ1bmM7XHJcbmlmICh3aW5kb3cuY3J5cHRvKSB7XHJcblx0cmFuZG9tRnVuYyA9IGNyeXB0b1JhbmRvbTtcclxufSBlbHNlIHtcclxuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2FsbCBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgdG8gY2FsbCB0aGUgYmluZGluZyB3aXRoIHRoZVxyXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXHJcbiAqIGJhY2tlbmQgcmVzcG9uZHMuIFRoaXMgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBjYWxsIHdhcyBzdWNjZXNzZnVsXHJcbiAqIG9yIHJlamVjdGVkIGlmIGFuIGVycm9yIGlzIHBhc3NlZCBiYWNrLlxyXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXHJcbiAqIHRpbWUgKGluIG1pbGxpc2Vjb25kcykgdGhlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge2FueT19IGFyZ3NcclxuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XHJcblxyXG5cdC8vIFRpbWVvdXQgaW5maW5pdGUgYnkgZGVmYXVsdFxyXG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuXHRcdHRpbWVvdXQgPSAwO1xyXG5cdH1cclxuXHJcblx0Ly8gQ3JlYXRlIGEgcHJvbWlzZVxyXG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcblxyXG5cdFx0Ly8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuXHRcdHZhciBjYWxsYmFja0lEO1xyXG5cdFx0ZG8ge1xyXG5cdFx0XHRjYWxsYmFja0lEID0gbmFtZSArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuXHRcdH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG5cdFx0dmFyIHRpbWVvdXRIYW5kbGU7XHJcblx0XHQvLyBTZXQgdGltZW91dFxyXG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHRyZWplY3QoRXJyb3IoJ0NhbGwgdG8gJyArIG5hbWUgKyAnIHRpbWVkIG91dC4gUmVxdWVzdCBJRDogJyArIGNhbGxiYWNrSUQpKTtcclxuXHRcdFx0fSwgdGltZW91dCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcclxuXHRcdGNhbGxiYWNrc1tjYWxsYmFja0lEXSA9IHtcclxuXHRcdFx0dGltZW91dEhhbmRsZTogdGltZW91dEhhbmRsZSxcclxuXHRcdFx0cmVqZWN0OiByZWplY3QsXHJcblx0XHRcdHJlc29sdmU6IHJlc29sdmVcclxuXHRcdH07XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0Y2FsbGJhY2tJRCxcclxuXHRcdFx0fTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1ha2UgdGhlIGNhbGxcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG53aW5kb3cuT2JmdXNjYXRlZENhbGwgPSAoaWQsIGFyZ3MsIHRpbWVvdXQpID0+IHtcclxuXHJcbiAgICAvLyBUaW1lb3V0IGluZmluaXRlIGJ5IGRlZmF1bHRcclxuICAgIGlmICh0aW1lb3V0ID09IG51bGwpIHtcclxuICAgICAgICB0aW1lb3V0ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBwcm9taXNlXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cclxuICAgICAgICAvLyBDcmVhdGUgYSB1bmlxdWUgY2FsbGJhY2tJRFxyXG4gICAgICAgIHZhciBjYWxsYmFja0lEO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgY2FsbGJhY2tJRCA9IGlkICsgJy0nICsgcmFuZG9tRnVuYygpO1xyXG4gICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrc1tjYWxsYmFja0lEXSk7XHJcblxyXG4gICAgICAgIHZhciB0aW1lb3V0SGFuZGxlO1xyXG4gICAgICAgIC8vIFNldCB0aW1lb3V0XHJcbiAgICAgICAgaWYgKHRpbWVvdXQgPiAwKSB7XHJcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcignQ2FsbCB0byBtZXRob2QgJyArIGlkICsgJyB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICcgKyBjYWxsYmFja0lEKSk7XHJcbiAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU3RvcmUgY2FsbGJhY2tcclxuICAgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XHJcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGU6IHRpbWVvdXRIYW5kbGUsXHJcbiAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxyXG4gICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuXHRcdFx0XHRpZCxcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGNhbGxiYWNrSUQsXHJcblx0XHRcdH07XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBjYWxsXHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnYycgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG4vKipcclxuICogQ2FsbGVkIGJ5IHRoZSBiYWNrZW5kIHRvIHJldHVybiBkYXRhIHRvIGEgcHJldmlvdXNseSBjYWxsZWRcclxuICogYmluZGluZyBpbnZvY2F0aW9uXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IGluY29taW5nTWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENhbGxiYWNrKGluY29taW5nTWVzc2FnZSkge1xyXG5cdC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcblx0bGV0IG1lc3NhZ2U7XHJcblx0dHJ5IHtcclxuXHRcdG1lc3NhZ2UgPSBKU09OLnBhcnNlKGluY29taW5nTWVzc2FnZSk7XHJcblx0fSBjYXRjaCAoZSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgSW52YWxpZCBKU09OIHBhc3NlZCB0byBjYWxsYmFjazogJHtlLm1lc3NhZ2V9LiBNZXNzYWdlOiAke2luY29taW5nTWVzc2FnZX1gO1xyXG5cdFx0cnVudGltZS5Mb2dEZWJ1ZyhlcnJvcik7XHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRsZXQgY2FsbGJhY2tJRCA9IG1lc3NhZ2UuY2FsbGJhY2tpZDtcclxuXHRsZXQgY2FsbGJhY2tEYXRhID0gY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cdGlmICghY2FsbGJhY2tEYXRhKSB7XHJcblx0XHRjb25zdCBlcnJvciA9IGBDYWxsYmFjayAnJHtjYWxsYmFja0lEfScgbm90IHJlZ2lzdGVyZWQhISFgO1xyXG5cdFx0Y29uc29sZS5lcnJvcihlcnJvcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcclxuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcblx0fVxyXG5cdGNsZWFyVGltZW91dChjYWxsYmFja0RhdGEudGltZW91dEhhbmRsZSk7XHJcblxyXG5cdGRlbGV0ZSBjYWxsYmFja3NbY2FsbGJhY2tJRF07XHJcblxyXG5cdGlmIChtZXNzYWdlLmVycm9yKSB7XHJcblx0XHRjYWxsYmFja0RhdGEucmVqZWN0KG1lc3NhZ2UuZXJyb3IpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjYWxsYmFja0RhdGEucmVzb2x2ZShtZXNzYWdlLnJlc3VsdCk7XHJcblx0fVxyXG59XHJcbiIsICIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX18gICAgXHJcbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gICkgXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fLyAgXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gJy4vY2FsbHMnO1xyXG5cclxuLy8gVGhpcyBpcyB3aGVyZSB3ZSBiaW5kIGdvIG1ldGhvZCB3cmFwcGVyc1xyXG53aW5kb3cuZ28gPSB7fTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTZXRCaW5kaW5ncyhiaW5kaW5nc01hcCkge1xyXG5cdHRyeSB7XHJcblx0XHRiaW5kaW5nc01hcCA9IEpTT04ucGFyc2UoYmluZGluZ3NNYXApO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXNlIHRoZSBiaW5kaW5ncyBtYXBcclxuXHR3aW5kb3cuZ28gPSB3aW5kb3cuZ28gfHwge307XHJcblxyXG5cdC8vIEl0ZXJhdGUgcGFja2FnZSBuYW1lc1xyXG5cdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwKS5mb3JFYWNoKChwYWNrYWdlTmFtZSkgPT4ge1xyXG5cclxuXHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0d2luZG93LmdvW3BhY2thZ2VOYW1lXSA9IHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gfHwge307XHJcblxyXG5cdFx0Ly8gSXRlcmF0ZSBzdHJ1Y3QgbmFtZXNcclxuXHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXSkuZm9yRWFjaCgoc3RydWN0TmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIGlubmVyIG1hcCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcblx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdFx0T2JqZWN0LmtleXMoYmluZGluZ3NNYXBbcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdKS5mb3JFYWNoKChtZXRob2ROYW1lKSA9PiB7XHJcblxyXG5cdFx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV1bbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcblxyXG5cdFx0XHRcdFx0Ly8gTm8gdGltZW91dCBieSBkZWZhdWx0XHJcblx0XHRcdFx0XHRsZXQgdGltZW91dCA9IDA7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWN0dWFsIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRmdW5jdGlvbiBkeW5hbWljKCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FsbChbcGFja2FnZU5hbWUsIHN0cnVjdE5hbWUsIG1ldGhvZE5hbWVdLmpvaW4oJy4nKSwgYXJncywgdGltZW91dCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWxsb3cgc2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRkeW5hbWljLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAobmV3VGltZW91dCkge1xyXG5cdFx0XHRcdFx0XHR0aW1lb3V0ID0gbmV3VGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0Ly8gQWxsb3cgZ2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXHJcblx0XHRcdFx0XHRkeW5hbWljLmdldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aW1lb3V0O1xyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRyZXR1cm4gZHluYW1pYztcclxuXHRcdFx0XHR9KCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fSk7XHJcbn1cclxuIiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93UmVsb2FkQXBwKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVNEVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TGlnaHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FMVCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0RGFya1RoZW1lKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQbGFjZSB0aGUgd2luZG93IGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93Q2VudGVyKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgd2luZG93IHRpdGxlXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1QnICsgdGl0bGUpO1xyXG59XHJcblxyXG4vKipcclxuICogTWFrZXMgdGhlIHdpbmRvdyBnbyBmdWxsc2NyZWVuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXRicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV2ZXJ0cyB0aGUgd2luZG93IGZyb20gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXZicpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgaW4gZnVsbCBzY3JlZW4gbW9kZSBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc0Z1bGxzY3JlZW4oKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc0Z1bGxzY3JlZW5cIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dzOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8e3c6IG51bWJlciwgaDogbnVtYmVyfT59IFRoZSBzaXplIG9mIHRoZSB3aW5kb3dcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93R2V0U2l6ZSgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFNpemVcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNYXhTaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldE1pblNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXejonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIHdpbmRvdyBBbHdheXNPblRvcCBvciBub3Qgb24gdG9wXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRBbHdheXNPblRvcChiKSB7XHJcblxyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQVRQOicgKyAoYiA/ICcxJyA6ICcwJykpO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRQb3NpdGlvbih4LCB5KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dwOicgKyB4ICsgJzonICsgeSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIFBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt4OiBudW1iZXIsIHk6IG51bWJlcn0+fSBUaGUgcG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93R2V0UG9zXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogSGlkZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dIaWRlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXSCcpO1xyXG59XHJcblxyXG4vKipcclxuICogU2hvdyB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTaG93KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUycpO1xyXG59XHJcblxyXG4vKipcclxuICogTWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWF4aW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dNJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUb2dnbGUgdGhlIE1heGltaXNlIG9mIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU1heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdCcpO1xyXG59XHJcblxyXG4vKipcclxuICogVW5tYXhpbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXVScpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgbWF4aW1pc2VkIG9yIG5vdC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTWF4aW1pc2VkKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNNYXhpbWlzZWRcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBNaW5pbWlzZSB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dNaW5pbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV20nKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWluaW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5taW5pbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1pbmltaXNlZCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01pbmltaXNlZCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWluaW1pc2VkXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHdpbmRvdywgaS5lLiB3aGV0aGVyIHRoZSB3aW5kb3cgaXMgbm9ybWFsIG9yIG5vdC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTm9ybWFsKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNOb3JtYWxcIik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG91ciBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IFIgUmVkXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBHIEdyZWVuXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBCIEJsdWVcclxuICogQHBhcmFtIHtudW1iZXJ9IEEgQWxwaGFcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRCYWNrZ3JvdW5kQ29sb3VyKFIsIEcsIEIsIEEpIHtcclxuICAgIGxldCByZ2JhID0gSlNPTi5zdHJpbmdpZnkoe3I6IFIgfHwgMCwgZzogRyB8fCAwLCBiOiBCIHx8IDAsIGE6IEEgfHwgMjU1fSk7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dyOicgKyByZ2JhKTtcclxufVxyXG5cclxuIiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcblxyXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIGFsbCBzY3JlZW5zLiBDYWxsIHRoaXMgYW5ldyBlYWNoIHRpbWUgeW91IHdhbnQgdG8gcmVmcmVzaCBkYXRhIGZyb20gdGhlIHVuZGVybHlpbmcgd2luZG93aW5nIHN5c3RlbS5cclxuICogQGV4cG9ydFxyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi93cmFwcGVyL3J1bnRpbWUnKS5TY3JlZW59IFNjcmVlblxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtTY3JlZW5bXX0+fSBUaGUgc2NyZWVuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNjcmVlbkdldEFsbCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOlNjcmVlbkdldEFsbFwiKTtcclxufVxyXG4iLCAiLyoqXHJcbiAqIEBkZXNjcmlwdGlvbjogVXNlIHRoZSBzeXN0ZW0gZGVmYXVsdCBicm93c2VyIHRvIG9wZW4gdGhlIHVybFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFxyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEJyb3dzZXJPcGVuVVJMKHVybCkge1xyXG4gIHdpbmRvdy5XYWlsc0ludm9rZSgnQk86JyArIHVybCk7XHJcbn0iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG5cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgU2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDbGlwYm9hcmRTZXRUZXh0KHRleHQpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkNsaXBib2FyZFNldFRleHRcIiwgW3RleHRdKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtzdHJpbmd9Pn0gVGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkR2V0VGV4dCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkNsaXBib2FyZEdldFRleHRcIik7XHJcbn0iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG5cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5cclxuaW1wb3J0IHtFdmVudHNPbiwgRXZlbnRzT2ZmfSBmcm9tIFwiLi9ldmVudHNcIjtcclxuXHJcbmNvbnN0IGZsYWdzID0ge1xyXG4gICAgcmVnaXN0ZXJlZDogZmFsc2UsXHJcbiAgICBkZWZhdWx0VXNlRHJvcFRhcmdldDogdHJ1ZSxcclxuICAgIHVzZURyb3BUYXJnZXQ6IHRydWUsXHJcbiAgICBuZXh0RGVhY3RpdmF0ZTogbnVsbCxcclxuICAgIG5leHREZWFjdGl2YXRlVGltZW91dDogbnVsbCxcclxufTtcclxuXHJcbmNvbnN0IERST1BfVEFSR0VUX0FDVElWRSA9IFwid2FpbHMtZHJvcC10YXJnZXQtYWN0aXZlXCI7XHJcblxyXG4vKipcclxuICogY2hlY2tTdHlsZURyb3BUYXJnZXQgY2hlY2tzIGlmIHRoZSBzdHlsZSBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZVxyXG4gKlxyXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBjaGVja1N0eWxlRHJvcFRhcmdldChzdHlsZSkge1xyXG4gICAgY29uc3QgY3NzRHJvcFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5KS50cmltKCk7XHJcbiAgICBpZiAoY3NzRHJvcFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGNzc0Ryb3BWYWx1ZSA9PT0gd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaGFzIHRoZSBkcm9wIHRhcmdldCBhdHRyaWJ1dGUsIGJ1dFxyXG4gICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBub3QgY29ycmVjdCwgdGVybWluYXRlIGZpbmRpbmcgcHJvY2Vzcy5cclxuICAgICAgICAvLyBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gYmxvY2sgc29tZSBjaGlsZCBlbGVtZW50cyBmcm9tIGJlaW5nIGRyb3AgdGFyZ2V0cy5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBvbkRyYWdPdmVyIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnb3ZlciBldmVudCBpcyBlbWl0dGVkLlxyXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZVxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gb25EcmFnT3ZlcihlKSB7XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQ7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBkZWJvdW5jZSBmdW5jdGlvbiB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0c1xyXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbnVsbCBvciBlbGVtZW50IGlzIG5vdCBjaGlsZCBvZiBkcm9wIHRhcmdldCBlbGVtZW50XHJcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQpIHtcclxuICAgICAgICAvLyBjaGVjayBpZiBjdXJyZW50RWxlbWVudCBpcyBkcm9wIHRhcmdldCBlbGVtZW50XHJcbiAgICAgICAgaWYgKGNoZWNrU3R5bGVEcm9wVGFyZ2V0KGN1cnJlbnRFbGVtZW50LnN0eWxlKSkge1xyXG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKERST1BfVEFSR0VUX0FDVElWRSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIG9uRHJhZ0xlYXZlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnbGVhdmUgZXZlbnQgaXMgZW1pdHRlZC5cclxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGVcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIG9uRHJhZ0xlYXZlKGUpIHtcclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmQgdGhlIGNsb3NlIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgIGlmICghZS50YXJnZXQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZS50YXJnZXQpKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcclxuICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xyXG5cclxuICAgIC8vIFVzZSBkZWJvdW5jZSB0ZWNobmlxdWUgdG8gdGFjbGUgZHJhZ2xlYXZlIGV2ZW50cyBvbiBvdmVybGFwcGluZyBlbGVtZW50cyBhbmQgZHJvcCB0YXJnZXQgZWxlbWVudHNcclxuICAgIGZsYWdzLm5leHREZWFjdGl2YXRlID0gKCkgPT4ge1xyXG4gICAgICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0cywgbmV3IGRyb3AgdGFyZ2V0IHdpbGwgYmUgYWN0aXZhdGVkIG9uIG5leHQgZHJhZ292ZXIgZXZlbnRcclxuICAgICAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoRFJPUF9UQVJHRVRfQUNUSVZFKSkuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKERST1BfVEFSR0VUX0FDVElWRSkpO1xyXG4gICAgICAgIC8vIFJlc2V0IG5leHREZWFjdGl2YXRlXHJcbiAgICAgICAgZmxhZ3MubmV4dERlYWN0aXZhdGUgPSBudWxsO1xyXG4gICAgICAgIC8vIENsZWFyIHRpbWVvdXRcclxuICAgICAgICBpZiAoZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICBmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGltZW91dCB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0cyBpZiBub3QgdHJpZ2dlcmVkIGJ5IG5leHQgZHJhZyBldmVudFxyXG4gICAgZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcbiAgICB9LCA1MCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBvbkRyb3AgaXMgY2FsbGVkIHdoZW4gdGhlIGRyb3AgZXZlbnQgaXMgZW1pdHRlZC5cclxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGVcclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIG9uRHJvcChlKSB7XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmIChDYW5SZXNvbHZlRmlsZVBhdGhzKCkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIGZpbGVzXHJcbiAgICAgICAgbGV0IGZpbGVzID0gW107XHJcbiAgICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gWy4uLmUuZGF0YVRyYW5zZmVyLml0ZW1zXS5tYXAoKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09ICdmaWxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEFzRmlsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlcyA9IFsuLi5lLmRhdGFUcmFuc2Zlci5maWxlc107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdpbmRvdy5ydW50aW1lLlJlc29sdmVGaWxlUGF0aHMoZS54LCBlLnksIGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZsYWdzLnVzZURyb3BUYXJnZXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVHJpZ2dlciBkZWJvdW5jZSBmdW5jdGlvbiB0byBkZWFjdGl2YXRlIGRyb3AgdGFyZ2V0c1xyXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XHJcblxyXG4gICAgLy8gRGVhY3RpdmF0ZSBhbGwgZHJvcCB0YXJnZXRzXHJcbiAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoRFJPUF9UQVJHRVRfQUNUSVZFKSkuZm9yRWFjaChlbCA9PiBlbC5jbGFzc0xpc3QucmVtb3ZlKERST1BfVEFSR0VUX0FDVElWRSkpO1xyXG59XHJcblxyXG4vKipcclxuICogcG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMgY2hlY2tzIHRoZSBicm93c2VyJ3MgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIHBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzXHJcbiAqXHJcbiAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYW5SZXNvbHZlRmlsZVBhdGhzKCkge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzICE9IG51bGw7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlRmlsZVBhdGhzIHNlbmRzIGRyb3AgZXZlbnRzIHRvIHRoZSBHTyBzaWRlIHRvIHJlc29sdmUgZmlsZSBwYXRocyBvbiB3aW5kb3dzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0geFxyXG4gKiBAcGFyYW0ge251bWJlcn0geVxyXG4gKiBAcGFyYW0ge2FueVtdfSBmaWxlc1xyXG4gKiBAY29uc3RydWN0b3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlRmlsZVBhdGhzKHgsIHksIGZpbGVzKSB7XHJcbiAgICAvLyBPbmx5IGZvciB3aW5kb3dzIHdlYnZpZXcyID49IDEuMC4xNzc0LjMwXHJcbiAgICAvLyBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2Uvd2VidmlldzIvcmVmZXJlbmNlL3dpbjMyL2ljb3Jld2VidmlldzJ3ZWJtZXNzYWdlcmVjZWl2ZWRldmVudGFyZ3MyP3ZpZXc9d2VidmlldzItMS4wLjE4MjMuMzIjYXBwbGllcy10b1xyXG4gICAgaWYgKHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzKSB7XHJcbiAgICAgICAgY2hyb21lLndlYnZpZXcucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMoYGZpbGU6ZHJvcDoke3h9OiR7eX1gLCBmaWxlcyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWxsYmFjayBmb3IgT25GaWxlRHJvcCByZXR1cm5zIGEgc2xpY2Ugb2YgZmlsZSBwYXRoIHN0cmluZ3Mgd2hlbiBhIGRyb3AgaXMgZmluaXNoZWQuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQGNhbGxiYWNrIE9uRmlsZURyb3BDYWxsYmFja1xyXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIHggY29vcmRpbmF0ZSBvZiB0aGUgZHJvcFxyXG4gKiBAcGFyYW0ge251bWJlcn0geSAtIHkgY29vcmRpbmF0ZSBvZiB0aGUgZHJvcFxyXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyAtIEEgbGlzdCBvZiBmaWxlIHBhdGhzLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBPbkZpbGVEcm9wIGxpc3RlbnMgdG8gZHJhZyBhbmQgZHJvcCBldmVudHMgYW5kIGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZHJvcCBhbmQgYW4gYXJyYXkgb2YgcGF0aCBzdHJpbmdzLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7T25GaWxlRHJvcENhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIGZvciBPbkZpbGVEcm9wIHJldHVybnMgYSBzbGljZSBvZiBmaWxlIHBhdGggc3RyaW5ncyB3aGVuIGEgZHJvcCBpcyBmaW5pc2hlZC5cclxuICogQHBhcmFtIHtib29sZWFufSBbdXNlRHJvcFRhcmdldD10cnVlXSAtIE9ubHkgY2FsbCB0aGUgY2FsbGJhY2sgd2hlbiB0aGUgZHJvcCBmaW5pc2hlZCBvbiBhbiBlbGVtZW50IHRoYXQgaGFzIHRoZSBkcm9wIHRhcmdldCBzdHlsZS4gKC0td2FpbHMtZHJvcC10YXJnZXQpXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gT25GaWxlRHJvcChjYWxsYmFjaywgdXNlRHJvcFRhcmdldCkge1xyXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkRyYWdBbmREcm9wQ2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbGFncy5yZWdpc3RlcmVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZmxhZ3MucmVnaXN0ZXJlZCA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgdURUUFQgPSB0eXBlb2YgdXNlRHJvcFRhcmdldDtcclxuICAgIGZsYWdzLnVzZURyb3BUYXJnZXQgPSB1RFRQVCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB1RFRQVCAhPT0gXCJib29sZWFuXCIgPyBmbGFncy5kZWZhdWx0VXNlRHJvcFRhcmdldCA6IHVzZURyb3BUYXJnZXQ7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRyYWdPdmVyKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBvbkRyYWdMZWF2ZSk7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIG9uRHJvcCk7XHJcblxyXG4gICAgbGV0IGNiID0gY2FsbGJhY2s7XHJcbiAgICBpZiAoZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIGNiID0gZnVuY3Rpb24gKHgsIHksIHBhdGhzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgsIHkpXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIG51bGwgb3IgZWxlbWVudCBpcyBub3QgY2hpbGQgb2YgZHJvcCB0YXJnZXQgZWxlbWVudCwgcmV0dXJuIG51bGxcclxuICAgICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICFjaGVja1N0eWxlRHJvcFRhcmdldChnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsbGJhY2soeCwgeSwgcGF0aHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBFdmVudHNPbihcIndhaWxzOmZpbGUtZHJvcFwiLCBjYik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBPbkZpbGVEcm9wT2ZmIHJlbW92ZXMgdGhlIGRyYWcgYW5kIGRyb3AgbGlzdGVuZXJzIGFuZCBoYW5kbGVycy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBPbkZpbGVEcm9wT2ZmKCkge1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgb25EcmFnTGVhdmUpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRyb3ApO1xyXG4gICAgRXZlbnRzT2ZmKFwid2FpbHM6ZmlsZS1kcm9wXCIpO1xyXG4gICAgZmxhZ3MucmVnaXN0ZXJlZCA9IGZhbHNlO1xyXG59XHJcbiIsICIvKlxyXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGF1dG87IChkZWZhdWx0KSB3aWxsIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51IGlmIGNvbnRlbnRFZGl0YWJsZSBpcyB0cnVlIE9SIHRleHQgaGFzIGJlZW4gc2VsZWN0ZWQgT1IgZWxlbWVudCBpcyBpbnB1dCBvciB0ZXh0YXJlYVxyXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IHNob3c7IHdpbGwgYWx3YXlzIHNob3cgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XHJcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogaGlkZTsgd2lsbCBhbHdheXMgaGlkZSB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuXHJcblRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgbGlrZSBub3JtYWwgQ1NTIHJ1bGVzLCBzbyBuZXN0aW5nIHdvcmtzIGFzIGV4cGVjdGVkXHJcbiovXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzRGVmYXVsdENvbnRleHRNZW51KGV2ZW50KSB7XHJcbiAgICAvLyBQcm9jZXNzIGRlZmF1bHQgY29udGV4dCBtZW51XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgY29uc3QgZGVmYXVsdENvbnRleHRNZW51QWN0aW9uID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1kZWZhdWx0LWNvbnRleHRtZW51XCIpLnRyaW0oKTtcclxuICAgIHN3aXRjaCAoZGVmYXVsdENvbnRleHRNZW51QWN0aW9uKSB7XHJcbiAgICAgICAgY2FzZSBcInNob3dcIjpcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNhc2UgXCJoaWRlXCI6XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0IGhhcyBiZWVuIHNlbGVjdGVkIGFuZCBhY3Rpb24gaXMgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0aW9uID0gKHNlbGVjdGlvbi50b1N0cmluZygpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnJhbmdlQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHJlY3RzW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSA9PT0gZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRhZ25hbWUgaXMgaW5wdXQgb3IgdGV4dGFyZWFcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gXCJJTlBVVFwiIHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGFzU2VsZWN0aW9uIHx8ICghZWxlbWVudC5yZWFkT25seSAmJiAhZWxlbWVudC5kaXNhYmxlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhpZGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxufVxyXG4iLCAiLypcclxuIF9cdCAgIF9fXHQgIF8gX19cclxufCB8XHQgLyAvX19fIF8oXykgL19fX19cclxufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xyXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcclxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXHJcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cclxuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxyXG4qL1xyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcbmltcG9ydCAqIGFzIExvZyBmcm9tICcuL2xvZyc7XHJcbmltcG9ydCB7ZXZlbnRMaXN0ZW5lcnMsIEV2ZW50c0VtaXQsIEV2ZW50c05vdGlmeSwgRXZlbnRzT2ZmLCBFdmVudHNPbiwgRXZlbnRzT25jZSwgRXZlbnRzT25NdWx0aXBsZX0gZnJvbSAnLi9ldmVudHMnO1xyXG5pbXBvcnQge0NhbGwsIENhbGxiYWNrLCBjYWxsYmFja3N9IGZyb20gJy4vY2FsbHMnO1xyXG5pbXBvcnQge1NldEJpbmRpbmdzfSBmcm9tIFwiLi9iaW5kaW5nc1wiO1xyXG5pbXBvcnQgKiBhcyBXaW5kb3cgZnJvbSBcIi4vd2luZG93XCI7XHJcbmltcG9ydCAqIGFzIFNjcmVlbiBmcm9tIFwiLi9zY3JlZW5cIjtcclxuaW1wb3J0ICogYXMgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCI7XHJcbmltcG9ydCAqIGFzIENsaXBib2FyZCBmcm9tIFwiLi9jbGlwYm9hcmRcIjtcclxuaW1wb3J0ICogYXMgRHJhZ0FuZERyb3AgZnJvbSBcIi4vZHJhZ2FuZGRyb3BcIjtcclxuaW1wb3J0ICogYXMgQ29udGV4dE1lbnUgZnJvbSBcIi4vY29udGV4dG1lbnVcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBRdWl0KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdRJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTaG93KCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdTJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBIaWRlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdIJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBFbnZpcm9ubWVudCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkVudmlyb25tZW50XCIpO1xyXG59XHJcblxyXG4vLyBUaGUgSlMgcnVudGltZVxyXG53aW5kb3cucnVudGltZSA9IHtcclxuICAgIC4uLkxvZyxcclxuICAgIC4uLldpbmRvdyxcclxuICAgIC4uLkJyb3dzZXIsXHJcbiAgICAuLi5TY3JlZW4sXHJcbiAgICAuLi5DbGlwYm9hcmQsXHJcbiAgICAuLi5EcmFnQW5kRHJvcCxcclxuICAgIEV2ZW50c09uLFxyXG4gICAgRXZlbnRzT25jZSxcclxuICAgIEV2ZW50c09uTXVsdGlwbGUsXHJcbiAgICBFdmVudHNFbWl0LFxyXG4gICAgRXZlbnRzT2ZmLFxyXG4gICAgRW52aXJvbm1lbnQsXHJcbiAgICBTaG93LFxyXG4gICAgSGlkZSxcclxuICAgIFF1aXRcclxufTtcclxuXHJcbi8vIEludGVybmFsIHdhaWxzIGVuZHBvaW50c1xyXG53aW5kb3cud2FpbHMgPSB7XHJcbiAgICBDYWxsYmFjayxcclxuICAgIEV2ZW50c05vdGlmeSxcclxuICAgIFNldEJpbmRpbmdzLFxyXG4gICAgZXZlbnRMaXN0ZW5lcnMsXHJcbiAgICBjYWxsYmFja3MsXHJcbiAgICBmbGFnczoge1xyXG4gICAgICAgIGRpc2FibGVTY3JvbGxiYXJEcmFnOiBmYWxzZSxcclxuICAgICAgICBkaXNhYmxlRGVmYXVsdENvbnRleHRNZW51OiBmYWxzZSxcclxuICAgICAgICBlbmFibGVSZXNpemU6IGZhbHNlLFxyXG4gICAgICAgIGRlZmF1bHRDdXJzb3I6IG51bGwsXHJcbiAgICAgICAgYm9yZGVyVGhpY2tuZXNzOiA2LFxyXG4gICAgICAgIHNob3VsZERyYWc6IGZhbHNlLFxyXG4gICAgICAgIGRlZmVyRHJhZ1RvTW91c2VNb3ZlOiB0cnVlLFxyXG4gICAgICAgIGNzc0RyYWdQcm9wZXJ0eTogXCItLXdhaWxzLWRyYWdnYWJsZVwiLFxyXG4gICAgICAgIGNzc0RyYWdWYWx1ZTogXCJkcmFnXCIsXHJcbiAgICAgICAgY3NzRHJvcFByb3BlcnR5OiBcIi0td2FpbHMtZHJvcC10YXJnZXRcIixcclxuICAgICAgICBjc3NEcm9wVmFsdWU6IFwiZHJvcFwiLFxyXG4gICAgICAgIGVuYWJsZVdhaWxzRHJhZ0FuZERyb3A6IGZhbHNlLFxyXG4gICAgfVxyXG59O1xyXG5cclxuLy8gU2V0IHRoZSBiaW5kaW5nc1xyXG5pZiAod2luZG93LndhaWxzYmluZGluZ3MpIHtcclxuICAgIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncyh3aW5kb3cud2FpbHNiaW5kaW5ncyk7XHJcbiAgICBkZWxldGUgd2luZG93LndhaWxzLlNldEJpbmRpbmdzO1xyXG59XHJcblxyXG4vLyAoYm9vbCkgVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cclxuaWYgKCFERUJVRykge1xyXG4gICAgZGVsZXRlIHdpbmRvdy53YWlsc2JpbmRpbmdzO1xyXG59XHJcblxyXG5sZXQgZHJhZ1Rlc3QgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIHZhbCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUudGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkpO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodmFsICE9PSB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmJ1dHRvbnMgIT09IDEpIHtcclxuICAgICAgICAvLyBEbyBub3Qgc3RhcnQgZHJhZ2dpbmcgaWYgbm90IHRoZSBwcmltYXJ5IGJ1dHRvbiBoYXMgYmVlbiBjbGlja2VkLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5kZXRhaWwgIT09IDEpIHtcclxuICAgICAgICAvLyBEbyBub3Qgc3RhcnQgZHJhZ2dpbmcgaWYgbW9yZSB0aGFuIG9uY2UgaGFzIGJlZW4gY2xpY2tlZCwgZS5nLiB3aGVuIGRvdWJsZSBjbGlja2luZ1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufTtcclxuXHJcbndpbmRvdy53YWlscy5zZXRDU1NEcmFnUHJvcGVydGllcyA9IGZ1bmN0aW9uIChwcm9wZXJ0eSwgdmFsdWUpIHtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkgPSBwcm9wZXJ0eTtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUgPSB2YWx1ZTtcclxufVxyXG5cclxud2luZG93LndhaWxzLnNldENTU0Ryb3BQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BQcm9wZXJ0eSA9IHByb3BlcnR5O1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSA9IHZhbHVlO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuICAgIC8vIENoZWNrIGZvciByZXNpemluZ1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKSB7XHJcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyYWdUZXN0KGUpKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlU2Nyb2xsYmFyRHJhZykge1xyXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXHJcbiAgICAgICAgICAgIGlmIChlLm9mZnNldFggPiBlLnRhcmdldC5jbGllbnRXaWR0aCB8fCBlLm9mZnNldFkgPiBlLnRhcmdldC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmVyRHJhZ1RvTW91c2VNb3ZlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gY3Vyc29yIHx8IHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yO1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgPSBjdXJzb3I7XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnKSB7XHJcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgbW91c2VQcmVzc2VkID0gZS5idXR0b25zICE9PSB1bmRlZmluZWQgPyBlLmJ1dHRvbnMgOiBlLndoaWNoO1xyXG4gICAgICAgIGlmIChtb3VzZVByZXNzZWQgPiAwKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZShcImRyYWdcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVSZXNpemUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPT0gbnVsbCkge1xyXG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MgJiYgd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcykge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcInNlLXJlc2l6ZVwiO1xyXG4gICAgfVxyXG4gICAgbGV0IHJpZ2h0Qm9yZGVyID0gd2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGxlZnRCb3JkZXIgPSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IHRvcEJvcmRlciA9IGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcbiAgICBsZXQgYm90dG9tQm9yZGVyID0gd2luZG93Lm91dGVySGVpZ2h0IC0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuXHJcbiAgICAvLyBJZiB3ZSBhcmVuJ3Qgb24gYW4gZWRnZSwgYnV0IHdlcmUsIHJlc2V0IHRoZSBjdXJzb3IgdG8gZGVmYXVsdFxyXG4gICAgaWYgKCFsZWZ0Qm9yZGVyICYmICFyaWdodEJvcmRlciAmJiAhdG9wQm9yZGVyICYmICFib3R0b21Cb3JkZXIgJiYgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHNldFJlc2l6ZSgpO1xyXG4gICAgfSBlbHNlIGlmIChyaWdodEJvcmRlciAmJiBib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInNlLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzdy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIHRvcEJvcmRlcikgc2V0UmVzaXplKFwibnctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAodG9wQm9yZGVyICYmIHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJuZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyKSBzZXRSZXNpemUoXCJ3LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlcikgc2V0UmVzaXplKFwibi1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInMtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAocmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcImUtcmVzaXplXCIpO1xyXG5cclxufSk7XHJcblxyXG4vLyBTZXR1cCBjb250ZXh0IG1lbnUgaG9va1xyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgLy8gYWx3YXlzIHNob3cgdGhlIGNvbnRleHRtZW51IGluIGRlYnVnICYgZGV2XHJcbiAgICBpZiAoREVCVUcpIHJldHVybjtcclxuXHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIENvbnRleHRNZW51LnByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxud2luZG93LldhaWxzSW52b2tlKFwicnVudGltZTpyZWFkeVwiKTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQSxXQUFTLGVBQWUsT0FBTyxTQUFTO0FBSXZDLFdBQU8sWUFBWSxNQUFNLFFBQVEsT0FBTztBQUFBLEVBQ3pDO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxRQUFRLFNBQVM7QUFDaEMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFdBQVcsU0FBUztBQUNuQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFP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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxuIF8gICAgICAgX18gICAgICBfIF9fXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xuXG4vKipcbiAqIFNlbmRzIGEgbG9nIG1lc3NhZ2UgdG8gdGhlIGJhY2tlbmQgd2l0aCB0aGUgZ2l2ZW4gbGV2ZWwgKyBtZXNzYWdlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xuXG5cdC8vIExvZyBNZXNzYWdlIGZvcm1hdDpcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxuXHR3aW5kb3cuV2FpbHNJbnZva2UoJ0wnICsgbGV2ZWwgKyBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIHRyYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBMb2dUcmFjZShtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdUJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nUHJpbnQobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gZGVidWcgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ0QnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBMb2cgdGhlIGdpdmVuIGluZm8gbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0luZm8obWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnSScsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nV2FybmluZyhtZXNzYWdlKSB7XG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XG59XG5cbi8qKlxuICogTG9nIHRoZSBnaXZlbiBlcnJvciBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xuXHRzZW5kTG9nTWVzc2FnZSgnRScsIG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIExvZyB0aGUgZ2l2ZW4gZmF0YWwgbWVzc2FnZSB3aXRoIHRoZSBiYWNrZW5kXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIExvZ0ZhdGFsKG1lc3NhZ2UpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ0YnLCBtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gU2V0TG9nTGV2ZWwobG9nbGV2ZWwpIHtcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XG59XG5cbi8vIExvZyBsZXZlbHNcbmV4cG9ydCBjb25zdCBMb2dMZXZlbCA9IHtcblx0VFJBQ0U6IDEsXG5cdERFQlVHOiAyLFxuXHRJTkZPOiAzLFxuXHRXQVJOSU5HOiA0LFxuXHRFUlJPUjogNSxcbn07XG4iLCAiLypcbiBfICAgICAgIF9fICAgICAgXyBfX1xufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbi8vIERlZmluZXMgYSBzaW5nbGUgbGlzdGVuZXIgd2l0aCBhIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIGNhbGxiYWNrXG5cbi8qKlxuICogVGhlIExpc3RlbmVyIGNsYXNzIGRlZmluZXMgYSBsaXN0ZW5lciEgOi0pXG4gKlxuICogQGNsYXNzIExpc3RlbmVyXG4gKi9cbmNsYXNzIExpc3RlbmVyIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIExpc3RlbmVyLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcbiAgICAgKiBAbWVtYmVyb2YgTGlzdGVuZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcbiAgICAgICAgdGhpcy5ldmVudE5hbWUgPSBldmVudE5hbWU7XG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcbiAgICAgICAgdGhpcy5tYXhDYWxsYmFja3MgPSBtYXhDYWxsYmFja3MgfHwgLTE7XG4gICAgICAgIC8vIENhbGxiYWNrIGludm9rZXMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGdpdmVuIGRhdGFcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxuICAgICAgICB0aGlzLkNhbGxiYWNrID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGRhdGEpO1xuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxuICAgICAgICAgICAgaWYgKHRoaXMubWF4Q2FsbGJhY2tzID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlY3JlbWVudCBtYXhDYWxsYmFja3MuIFJldHVybiB0cnVlIGlmIG5vdyAwLCBvdGhlcndpc2UgZmFsc2VcbiAgICAgICAgICAgIHRoaXMubWF4Q2FsbGJhY2tzIC09IDE7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZXZlbnRMaXN0ZW5lcnMgPSB7fTtcblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgYG1heENhbGxiYWNrc2AgdGltZXMgYmVmb3JlIGJlaW5nIGRlc3Ryb3llZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4Q2FsbGJhY2tzXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCBtYXhDYWxsYmFja3MpIHtcbiAgICBldmVudExpc3RlbmVyc1tldmVudE5hbWVdID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSB8fCBbXTtcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcbiAgICBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLnB1c2godGhpc0xpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJPZmYodGhpc0xpc3RlbmVyKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT24oZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIC0xKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gY2FuY2VsIHRoZSBsaXN0ZW5lclxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT25jZShldmVudE5hbWUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIEV2ZW50c09uTXVsdGlwbGUoZXZlbnROYW1lLCBjYWxsYmFjaywgMSk7XG59XG5cbmZ1bmN0aW9uIG5vdGlmeUxpc3RlbmVycyhldmVudERhdGEpIHtcblxuICAgIC8vIEdldCB0aGUgZXZlbnQgbmFtZVxuICAgIGxldCBldmVudE5hbWUgPSBldmVudERhdGEubmFtZTtcblxuICAgIC8vIEtlZXAgYSBsaXN0IG9mIGxpc3RlbmVyIGluZGV4ZXMgdG8gZGVzdHJveVxuICAgIGNvbnN0IG5ld0V2ZW50TGlzdGVuZXJMaXN0ID0gZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXT8uc2xpY2UoKSB8fCBbXTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IGxpc3RlbmVycyBmb3IgdGhpcyBldmVudFxuICAgIGlmIChuZXdFdmVudExpc3RlbmVyTGlzdC5sZW5ndGgpIHtcblxuICAgICAgICAvLyBJdGVyYXRlIGxpc3RlbmVyc1xuICAgICAgICBmb3IgKGxldCBjb3VudCA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0Lmxlbmd0aCAtIDE7IGNvdW50ID49IDA7IGNvdW50IC09IDEpIHtcblxuICAgICAgICAgICAgLy8gR2V0IG5leHQgbGlzdGVuZXJcbiAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gbmV3RXZlbnRMaXN0ZW5lckxpc3RbY291bnRdO1xuXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGV2ZW50RGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcbiAgICAgICAgICAgIGNvbnN0IGRlc3Ryb3kgPSBsaXN0ZW5lci5DYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICAgIGlmIChkZXN0cm95KSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcbiAgICAgICAgICAgICAgICBuZXdFdmVudExpc3RlbmVyTGlzdC5zcGxpY2UoY291bnQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIGNhbGxiYWNrcyB3aXRoIG5ldyBsaXN0IG9mIGxpc3RlbmVyc1xuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcblxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcbiAgICAvLyBQYXJzZSB0aGUgbWVzc2FnZVxuICAgIGxldCBtZXNzYWdlO1xuICAgIHRyeSB7XG4gICAgICAgIG1lc3NhZ2UgPSBKU09OLnBhcnNlKG5vdGlmeU1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XG59XG5cbi8qKlxuICogRW1pdCBhbiBldmVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBkYXRhXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgZGF0YTogW10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKS5zbGljZSgxKSxcbiAgICB9O1xuXG4gICAgLy8gTm90aWZ5IEpTIGxpc3RlbmVyc1xuICAgIG5vdGlmeUxpc3RlbmVycyhwYXlsb2FkKTtcblxuICAgIC8vIE5vdGlmeSBHbyBsaXN0ZW5lcnNcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0VFJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lKSB7XG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xuICAgIGRlbGV0ZSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdO1xuXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnRVgnICsgZXZlbnROYW1lKTtcbn1cblxuLyoqXG4gKiBPZmYgdW5yZWdpc3RlcnMgYSBsaXN0ZW5lciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBPbixcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmKGV2ZW50TmFtZSwgLi4uYWRkaXRpb25hbEV2ZW50TmFtZXMpIHtcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXG5cbiAgICBpZiAoYWRkaXRpb25hbEV2ZW50TmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG4vKipcbiAqIE9mZiB1bnJlZ2lzdGVycyBhbGwgZXZlbnQgbGlzdGVuZXJzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIE9uXG4gKi9cbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xuICAgIGNvbnN0IGV2ZW50TmFtZXMgPSBPYmplY3Qua2V5cyhldmVudExpc3RlbmVycyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgIT09IGV2ZW50TmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lc1tpXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIGxpc3RlbmVyT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggRXZlbnRzT25cbiAqXG4gKiBAcGFyYW0ge0xpc3RlbmVyfSBsaXN0ZW5lclxuICovXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcbiAgICBjb25zdCBldmVudE5hbWUgPSBsaXN0ZW5lci5ldmVudE5hbWU7XG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0uZmlsdGVyKGwgPT4gbCAhPT0gbGlzdGVuZXIpO1xuXG4gICAgLy8gQ2xlYW4gdXAgaWYgdGhlcmUgYXJlIG5vIGV2ZW50IGxpc3RlbmVycyBsZWZ0XG4gICAgaWYgKGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XG4gICAgfVxufVxuIiwgIi8qXG4gXyAgICAgICBfXyAgICAgIF8gX19cbnwgfCAgICAgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xuXG5leHBvcnQgY29uc3QgY2FsbGJhY2tzID0ge307XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciBmcm9tIHRoZSBuYXRpdmUgYnJvd3NlciByYW5kb20gZnVuY3Rpb25cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gY3J5cHRvUmFuZG9tKCkge1xuXHR2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7XG5cdHJldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhhcnJheSlbMF07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG51bWJlciB1c2luZyBkYSBvbGQtc2tvb2wgTWF0aC5SYW5kb21cbiAqIEkgbGlrZXMgdG8gY2FsbCBpdCBMT0xSYW5kb21cbiAqXG4gKiBAcmV0dXJucyBudW1iZXJcbiAqL1xuZnVuY3Rpb24gYmFzaWNSYW5kb20oKSB7XG5cdHJldHVybiBNYXRoLnJhbmRvbSgpICogOTAwNzE5OTI1NDc0MDk5MTtcbn1cblxuLy8gUGljayBhIHJhbmRvbSBudW1iZXIgZnVuY3Rpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5XG52YXIgcmFuZG9tRnVuYztcbmlmICh3aW5kb3cuY3J5cHRvKSB7XG5cdHJhbmRvbUZ1bmMgPSBjcnlwdG9SYW5kb207XG59IGVsc2Uge1xuXHRyYW5kb21GdW5jID0gYmFzaWNSYW5kb207XG59XG5cblxuLyoqXG4gKiBDYWxsIHNlbmRzIGEgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB0byBjYWxsIHRoZSBiaW5kaW5nIHdpdGggdGhlXG4gKiBnaXZlbiBkYXRhLiBBIHByb21pc2UgaXMgcmV0dXJuZWQgYW5kIHdpbGwgYmUgY29tcGxldGVkIHdoZW4gdGhlXG4gKiBiYWNrZW5kIHJlc3BvbmRzLiBUaGlzIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bFxuICogb3IgcmVqZWN0ZWQgaWYgYW4gZXJyb3IgaXMgcGFzc2VkIGJhY2suXG4gKiBUaGVyZSBpcyBhIHRpbWVvdXQgbWVjaGFuaXNtLiBJZiB0aGUgY2FsbCBkb2Vzbid0IHJlc3BvbmQgaW4gdGhlIGdpdmVuXG4gKiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7YW55PX0gYXJnc1xuICogQHBhcmFtIHtudW1iZXI9fSB0aW1lb3V0XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gQ2FsbChuYW1lLCBhcmdzLCB0aW1lb3V0KSB7XG5cblx0Ly8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XG5cdGlmICh0aW1lb3V0ID09IG51bGwpIHtcblx0XHR0aW1lb3V0ID0gMDtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHByb21pc2Vcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuXHRcdC8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lEXG5cdFx0dmFyIGNhbGxiYWNrSUQ7XG5cdFx0ZG8ge1xuXHRcdFx0Y2FsbGJhY2tJRCA9IG5hbWUgKyAnLScgKyByYW5kb21GdW5jKCk7XG5cdFx0fSB3aGlsZSAoY2FsbGJhY2tzW2NhbGxiYWNrSURdKTtcblxuXHRcdHZhciB0aW1lb3V0SGFuZGxlO1xuXHRcdC8vIFNldCB0aW1lb3V0XG5cdFx0aWYgKHRpbWVvdXQgPiAwKSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJlamVjdChFcnJvcignQ2FsbCB0byAnICsgbmFtZSArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xuXHRcdFx0fSwgdGltZW91dCk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY2FsbGJhY2tcblx0XHRjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XG5cdFx0XHR0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxuXHRcdFx0cmVqZWN0OiByZWplY3QsXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlXG5cdFx0fTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBwYXlsb2FkID0ge1xuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHRhcmdzLFxuXHRcdFx0XHRjYWxsYmFja0lELFxuXHRcdFx0fTtcblxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdDJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbndpbmRvdy5PYmZ1c2NhdGVkQ2FsbCA9IChpZCwgYXJncywgdGltZW91dCkgPT4ge1xuXG4gICAgLy8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XG4gICAgaWYgKHRpbWVvdXQgPT0gbnVsbCkge1xuICAgICAgICB0aW1lb3V0ID0gMDtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBwcm9taXNlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblxuICAgICAgICAvLyBDcmVhdGUgYSB1bmlxdWUgY2FsbGJhY2tJRFxuICAgICAgICB2YXIgY2FsbGJhY2tJRDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY2FsbGJhY2tJRCA9IGlkICsgJy0nICsgcmFuZG9tRnVuYygpO1xuICAgICAgICB9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xuXG4gICAgICAgIHZhciB0aW1lb3V0SGFuZGxlO1xuICAgICAgICAvLyBTZXQgdGltZW91dFxuICAgICAgICBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIHRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoJ0NhbGwgdG8gbWV0aG9kICcgKyBpZCArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xuICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBjYWxsYmFja1xuICAgICAgICBjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxuICAgICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlXG4gICAgICAgIH07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRhcmdzLFxuXHRcdFx0XHRjYWxsYmFja0lELFxuXHRcdFx0fTtcblxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKCdjJyArIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5cbi8qKlxuICogQ2FsbGVkIGJ5IHRoZSBiYWNrZW5kIHRvIHJldHVybiBkYXRhIHRvIGEgcHJldmlvdXNseSBjYWxsZWRcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhbGxiYWNrKGluY29taW5nTWVzc2FnZSkge1xuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxuXHRsZXQgbWVzc2FnZTtcblx0dHJ5IHtcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgSW52YWxpZCBKU09OIHBhc3NlZCB0byBjYWxsYmFjazogJHtlLm1lc3NhZ2V9LiBNZXNzYWdlOiAke2luY29taW5nTWVzc2FnZX1gO1xuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XG5cdGxldCBjYWxsYmFja0RhdGEgPSBjYWxsYmFja3NbY2FsbGJhY2tJRF07XG5cdGlmICghY2FsbGJhY2tEYXRhKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcblx0XHRjb25zb2xlLmVycm9yKGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXHRcdHRocm93IG5ldyBFcnJvcihlcnJvcik7XG5cdH1cblx0Y2xlYXJUaW1lb3V0KGNhbGxiYWNrRGF0YS50aW1lb3V0SGFuZGxlKTtcblxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xuXG5cdGlmIChtZXNzYWdlLmVycm9yKSB7XG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcblx0fSBlbHNlIHtcblx0XHRjYWxsYmFja0RhdGEucmVzb2x2ZShtZXNzYWdlLnJlc3VsdCk7XG5cdH1cbn1cbiIsICIvKlxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xufCB8IC98IC8gLyBfXyBgLyAvIC8gX19fL1xufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vICBcblRoZSBlbGVjdHJvbiBhbHRlcm5hdGl2ZSBmb3IgR29cbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcbiovXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSAnLi9jYWxscyc7XG5cbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcbndpbmRvdy5nbyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcblx0dHJ5IHtcblx0XHRiaW5kaW5nc01hcCA9IEpTT04ucGFyc2UoYmluZGluZ3NNYXApO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Y29uc29sZS5lcnJvcihlKTtcblx0fVxuXG5cdC8vIEluaXRpYWxpc2UgdGhlIGJpbmRpbmdzIG1hcFxuXHR3aW5kb3cuZ28gPSB3aW5kb3cuZ28gfHwge307XG5cblx0Ly8gSXRlcmF0ZSBwYWNrYWdlIG5hbWVzXG5cdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwKS5mb3JFYWNoKChwYWNrYWdlTmFtZSkgPT4ge1xuXG5cdFx0Ly8gQ3JlYXRlIGlubmVyIG1hcCBpZiBpdCBkb2Vzbid0IGV4aXN0XG5cdFx0d2luZG93LmdvW3BhY2thZ2VOYW1lXSA9IHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gfHwge307XG5cblx0XHQvLyBJdGVyYXRlIHN0cnVjdCBuYW1lc1xuXHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXSkuZm9yRWFjaCgoc3RydWN0TmFtZSkgPT4ge1xuXG5cdFx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3Rcblx0XHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdIHx8IHt9O1xuXG5cdFx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV1bc3RydWN0TmFtZV0pLmZvckVhY2goKG1ldGhvZE5hbWUpID0+IHtcblxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xuXG5cdFx0XHRcdFx0Ly8gTm8gdGltZW91dCBieSBkZWZhdWx0XG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xuXG5cdFx0XHRcdFx0Ly8gQWN0dWFsIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gQ2FsbChbcGFja2FnZU5hbWUsIHN0cnVjdE5hbWUsIG1ldGhvZE5hbWVdLmpvaW4oJy4nKSwgYXJncywgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQWxsb3cgc2V0dGluZyB0aW1lb3V0IHRvIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcblx0XHRcdFx0XHRcdHRpbWVvdXQgPSBuZXdUaW1lb3V0O1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHQvLyBBbGxvdyBnZXR0aW5nIHRpbWVvdXQgdG8gZnVuY3Rpb25cblx0XHRcdFx0XHRkeW5hbWljLmdldFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XG5cdFx0XHRcdH0oKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9KTtcbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5cbmltcG9ydCB7Q2FsbH0gZnJvbSBcIi4vY2FsbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZCgpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dSZWxvYWRBcHAoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXUicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U3lzdGVtRGVmYXVsdFRoZW1lKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FTRFQnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldExpZ2h0VGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQUxUJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXREYXJrVGhlbWUoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXQURUJyk7XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHdpbmRvdyBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dDZW50ZXIoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXYycpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0VGl0bGUodGl0bGUpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dUJyArIHRpdGxlKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgd2luZG93IGdvIGZ1bGxzY3JlZW5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dGdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0YnKTtcbn1cblxuLyoqXG4gKiBSZXZlcnRzIHRoZSB3aW5kb3cgZnJvbSBmdWxsc2NyZWVuXG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5mdWxsc2NyZWVuKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2YnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBpbiBmdWxsIHNjcmVlbiBtb2RlIG9yIG5vdC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fSBUaGUgc3RhdGUgb2YgdGhlIHdpbmRvd1xuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNGdWxsc2NyZWVuKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzRnVsbHNjcmVlblwiKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgU2l6ZSBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7dzogbnVtYmVyLCBoOiBudW1iZXJ9Pn0gVGhlIHNpemUgb2YgdGhlIHdpbmRvd1xuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRTaXplKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFNpemVcIik7XG59XG5cbi8qKlxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXWjonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgbWluaW11bSBzaXplIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldE1pblNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcbn1cblxuXG5cbi8qKlxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldEFsd2F5c09uVG9wKGIpIHtcblxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcbn1cblxuXG5cblxuLyoqXG4gKiBTZXQgdGhlIFBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFBvc2l0aW9uKHgsIHkpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dwOicgKyB4ICsgJzonICsgeSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFBvc2l0aW9uKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcbn1cblxuLyoqXG4gKiBIaWRlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dIaWRlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcbn1cblxuLyoqXG4gKiBTaG93IHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTaG93KCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcbn1cblxuLyoqXG4gKiBNYXhpbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWF4aW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xufVxuXG4vKipcbiAqIFRvZ2dsZSB0aGUgTWF4aW1pc2Ugb2YgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcbn1cblxuLyoqXG4gKiBVbm1heGltaXNlIHRoZSBXaW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dVbm1heGltaXNlKCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBtYXhpbWlzZWQgb3Igbm90LlxuICpcbiAqIEBleHBvcnRcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01heGltaXNlZCgpIHtcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc01heGltaXNlZFwiKTtcbn1cblxuLyoqXG4gKiBNaW5pbWlzZSB0aGUgV2luZG93XG4gKlxuICogQGV4cG9ydFxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXbScpO1xufVxuXG4vKipcbiAqIFVubWluaW1pc2UgdGhlIFdpbmRvd1xuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VubWluaW1pc2UoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXdScpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1pbmltaXNlZCBvciBub3QuXG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTWluaW1pc2VkKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWluaW1pc2VkXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG5vcm1hbCBvciBub3QuXG4gKlxuICogQGV4cG9ydFxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0lzTm9ybWFsKCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTm9ybWFsXCIpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGJhY2tncm91bmQgY29sb3VyIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge251bWJlcn0gUiBSZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBHIEdyZWVuXG4gKiBAcGFyYW0ge251bWJlcn0gQiBCbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gQSBBbHBoYVxuICovXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QmFja2dyb3VuZENvbG91cihSLCBHLCBCLCBBKSB7XG4gICAgbGV0IHJnYmEgPSBKU09OLnN0cmluZ2lmeSh7cjogUiB8fCAwLCBnOiBHIHx8IDAsIGI6IEIgfHwgMCwgYTogQSB8fCAyNTV9KTtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dyOicgKyByZ2JhKTtcbn1cblxuIiwgIi8qXG4gX1x0ICAgX19cdCAgXyBfX1xufCB8XHQgLyAvX19fIF8oXykgL19fX19cbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxufF9fL3xfXy9cXF9fLF8vXy9fL19fX18vXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XG4qL1xuXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXG5cblxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xuXG5cbi8qKlxuICogR2V0cyB0aGUgYWxsIHNjcmVlbnMuIENhbGwgdGhpcyBhbmV3IGVhY2ggdGltZSB5b3Ugd2FudCB0byByZWZyZXNoIGRhdGEgZnJvbSB0aGUgdW5kZXJseWluZyB3aW5kb3dpbmcgc3lzdGVtLlxuICogQGV4cG9ydFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vd3JhcHBlci9ydW50aW1lJykuU2NyZWVufSBTY3JlZW5cbiAqIEByZXR1cm4ge1Byb21pc2U8e1NjcmVlbltdfT59IFRoZSBzY3JlZW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTY3JlZW5HZXRBbGwoKSB7XG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6U2NyZWVuR2V0QWxsXCIpO1xufVxuIiwgIi8qKlxuICogQGRlc2NyaXB0aW9uOiBVc2UgdGhlIHN5c3RlbSBkZWZhdWx0IGJyb3dzZXIgdG8gb3BlbiB0aGUgdXJsXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEJyb3dzZXJPcGVuVVJMKHVybCkge1xuICB3aW5kb3cuV2FpbHNJbnZva2UoJ0JPOicgKyB1cmwpO1xufSIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5pbXBvcnQge0NhbGx9IGZyb20gXCIuL2NhbGxzXCI7XG5cbi8qKlxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkU2V0VGV4dCh0ZXh0KSB7XG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6Q2xpcGJvYXJkU2V0VGV4dFwiLCBbdGV4dF0pO1xufVxuXG4vKipcbiAqIEdldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcbiAqXG4gKiBAZXhwb3J0XG4gKiBAcmV0dXJuIHtQcm9taXNlPHtzdHJpbmd9Pn0gVGV4dCBjb250ZW50IG9mIHRoZSBjbGlwYm9hcmRcblxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkR2V0VGV4dCgpIHtcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRHZXRUZXh0XCIpO1xufSIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cblxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xuXG5pbXBvcnQge0V2ZW50c09uLCBFdmVudHNPZmZ9IGZyb20gXCIuL2V2ZW50c1wiO1xuXG5jb25zdCBmbGFncyA9IHtcbiAgICByZWdpc3RlcmVkOiBmYWxzZSxcbiAgICBkZWZhdWx0VXNlRHJvcFRhcmdldDogdHJ1ZSxcbiAgICB1c2VEcm9wVGFyZ2V0OiB0cnVlLFxuICAgIG5leHREZWFjdGl2YXRlOiBudWxsLFxuICAgIG5leHREZWFjdGl2YXRlVGltZW91dDogbnVsbCxcbn07XG5cbmNvbnN0IERST1BfVEFSR0VUX0FDVElWRSA9IFwid2FpbHMtZHJvcC10YXJnZXQtYWN0aXZlXCI7XG5cbi8qKlxuICogY2hlY2tTdHlsZURyb3BUYXJnZXQgY2hlY2tzIGlmIHRoZSBzdHlsZSBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZVxuICogXG4gKiBAcGFyYW0ge0NTU1N0eWxlRGVjbGFyYXRpb259IHN0eWxlIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIGNoZWNrU3R5bGVEcm9wVGFyZ2V0KHN0eWxlKSB7XG4gICAgY29uc3QgY3NzRHJvcFZhbHVlID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5KS50cmltKCk7XG4gICAgaWYgKGNzc0Ryb3BWYWx1ZSkge1xuICAgICAgICBpZiAoY3NzRHJvcFZhbHVlID09PSB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBoYXMgdGhlIGRyb3AgdGFyZ2V0IGF0dHJpYnV0ZSwgYnV0IFxuICAgICAgICAvLyB0aGUgdmFsdWUgaXMgbm90IGNvcnJlY3QsIHRlcm1pbmF0ZSBmaW5kaW5nIHByb2Nlc3MuXG4gICAgICAgIC8vIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBibG9jayBzb21lIGNoaWxkIGVsZW1lbnRzIGZyb20gYmVpbmcgZHJvcCB0YXJnZXRzLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBvbkRyYWdPdmVyIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnb3ZlciBldmVudCBpcyBlbWl0dGVkLlxuICogQHBhcmFtIHtEcmFnRXZlbnR9IGUgXG4gKiBAcmV0dXJucyBcbiAqL1xuZnVuY3Rpb24gb25EcmFnT3ZlcihlKSB7XG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQ7XG5cbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXG4gICAgaWYoZmxhZ3MubmV4dERlYWN0aXZhdGUpIGZsYWdzLm5leHREZWFjdGl2YXRlKCk7XG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBudWxsIG9yIGVsZW1lbnQgaXMgbm90IGNoaWxkIG9mIGRyb3AgdGFyZ2V0IGVsZW1lbnRcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY3VycmVudEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkge1xuICAgICAgICAvLyBjaGVjayBpZiBjdXJyZW50RWxlbWVudCBpcyBkcm9wIHRhcmdldCBlbGVtZW50XG4gICAgICAgIGlmIChjaGVja1N0eWxlRHJvcFRhcmdldChjdXJyZW50RWxlbWVudC5zdHlsZSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoRFJPUF9UQVJHRVRfQUNUSVZFKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxufVxuXG4vKipcbiAqIG9uRHJhZ0xlYXZlIGlzIGNhbGxlZCB3aGVuIHRoZSBkcmFnbGVhdmUgZXZlbnQgaXMgZW1pdHRlZC5cbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBlIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIG9uRHJhZ0xlYXZlKGUpIHtcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHRoZSBjbG9zZSBkcm9wIHRhcmdldCBlbGVtZW50XG4gICAgaWYgKCFlLnRhcmdldCB8fCAhY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShlLnRhcmdldCkpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcbiAgICBcbiAgICAvLyBVc2UgZGVib3VuY2UgdGVjaG5pcXVlIHRvIHRhY2xlIGRyYWdsZWF2ZSBldmVudHMgb24gb3ZlcmxhcHBpbmcgZWxlbWVudHMgYW5kIGRyb3AgdGFyZ2V0IGVsZW1lbnRzXG4gICAgZmxhZ3MubmV4dERlYWN0aXZhdGUgPSAoKSA9PiB7XG4gICAgICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0cywgbmV3IGRyb3AgdGFyZ2V0IHdpbGwgYmUgYWN0aXZhdGVkIG9uIG5leHQgZHJhZ292ZXIgZXZlbnRcbiAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERST1BfVEFSR0VUX0FDVElWRSkpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShEUk9QX1RBUkdFVF9BQ1RJVkUpKTtcbiAgICAgICAgLy8gUmVzZXQgbmV4dERlYWN0aXZhdGVcbiAgICAgICAgZmxhZ3MubmV4dERlYWN0aXZhdGUgPSBudWxsO1xuICAgICAgICAvLyBDbGVhciB0aW1lb3V0XG4gICAgICAgIGlmIChmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQpO1xuICAgICAgICAgICAgZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aW1lb3V0IHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzIGlmIG5vdCB0cmlnZ2VyZWQgYnkgbmV4dCBkcmFnIGV2ZW50XG4gICAgZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xuICAgIH0sIDUwKTtcbn1cblxuLyoqXG4gKiBvbkRyb3AgaXMgY2FsbGVkIHdoZW4gdGhlIGRyb3AgZXZlbnQgaXMgZW1pdHRlZC5cbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBlIFxuICogQHJldHVybnMgXG4gKi9cbmZ1bmN0aW9uIG9uRHJvcChlKSB7XG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChDYW5SZXNvbHZlRmlsZVBhdGhzKCkpIHtcbiAgICAgICAgLy8gcHJvY2VzcyBmaWxlc1xuICAgICAgICBsZXQgZmlsZXMgPSBbXTtcbiAgICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyLml0ZW1zKSB7XG4gICAgICAgICAgICBmaWxlcyA9IFsuLi5lLmRhdGFUcmFuc2Zlci5pdGVtc10ubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEFzRmlsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuZmlsZXNdO1xuICAgICAgICB9XG4gICAgICAgIHdpbmRvdy5ydW50aW1lLlJlc29sdmVGaWxlUGF0aHMoZS54LCBlLnksIGZpbGVzKTtcbiAgICB9XG5cbiAgICBpZiAoIWZsYWdzLnVzZURyb3BUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcblxuICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0c1xuICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShEUk9QX1RBUkdFVF9BQ1RJVkUpKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoRFJPUF9UQVJHRVRfQUNUSVZFKSk7XG59XG5cbi8qKlxuICogcG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMgY2hlY2tzIHRoZSBicm93c2VyJ3MgY2FwYWJpbGl0eSBvZiBzZW5kaW5nIHBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENhblJlc29sdmVGaWxlUGF0aHMoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5jaHJvbWU/LndlYnZpZXc/LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzICE9IG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZUZpbGVQYXRocyBzZW5kcyBkcm9wIGV2ZW50cyB0byB0aGUgR08gc2lkZSB0byByZXNvbHZlIGZpbGUgcGF0aHMgb24gd2luZG93cy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEBwYXJhbSB7YW55W119IGZpbGVzXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlc29sdmVGaWxlUGF0aHMoeCwgeSwgZmlsZXMpIHtcbiAgICAvLyBPbmx5IGZvciB3aW5kb3dzIHdlYnZpZXcyID49IDEuMC4xNzc0LjMwXG4gICAgLy8gaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3dlYnZpZXcyL3JlZmVyZW5jZS93aW4zMi9pY29yZXdlYnZpZXcyd2VibWVzc2FnZXJlY2VpdmVkZXZlbnRhcmdzMj92aWV3PXdlYnZpZXcyLTEuMC4xODIzLjMyI2FwcGxpZXMtdG9cbiAgICBpZiAod2luZG93LmNocm9tZT8ud2Vidmlldz8ucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMpIHtcbiAgICAgICAgY2hyb21lLndlYnZpZXcucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMoYGZpbGU6ZHJvcDoke3h9OiR7eX1gLCBmaWxlcyk7XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBPbkZpbGVEcm9wIHJldHVybnMgYSBzbGljZSBvZiBmaWxlIHBhdGggc3RyaW5ncyB3aGVuIGEgZHJvcCBpcyBmaW5pc2hlZC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2FsbGJhY2sgT25GaWxlRHJvcENhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0geCAtIHggY29vcmRpbmF0ZSBvZiB0aGUgZHJvcFxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSB5IGNvb3JkaW5hdGUgb2YgdGhlIGRyb3BcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIC0gQSBsaXN0IG9mIGZpbGUgcGF0aHMuXG4gKi9cblxuLyoqXG4gKiBPbkZpbGVEcm9wIGxpc3RlbnMgdG8gZHJhZyBhbmQgZHJvcCBldmVudHMgYW5kIGNhbGxzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZHJvcCBhbmQgYW4gYXJyYXkgb2YgcGF0aCBzdHJpbmdzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7T25GaWxlRHJvcENhbGxiYWNrfSBjYWxsYmFjayAtIENhbGxiYWNrIGZvciBPbkZpbGVEcm9wIHJldHVybnMgYSBzbGljZSBvZiBmaWxlIHBhdGggc3RyaW5ncyB3aGVuIGEgZHJvcCBpcyBmaW5pc2hlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZURyb3BUYXJnZXQ9dHJ1ZV0gLSBPbmx5IGNhbGwgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIGRyb3AgZmluaXNoZWQgb24gYW4gZWxlbWVudCB0aGF0IGhhcyB0aGUgZHJvcCB0YXJnZXQgc3R5bGUuICgtLXdhaWxzLWRyb3AtdGFyZ2V0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gT25GaWxlRHJvcChjYWxsYmFjaywgdXNlRHJvcFRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRHJhZ0FuZERyb3BDYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmbGFncy5yZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmxhZ3MucmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgICBjb25zdCB1RFRQVCA9IHR5cGVvZiB1c2VEcm9wVGFyZ2V0O1xuICAgIGZsYWdzLnVzZURyb3BUYXJnZXQgPSB1RFRQVCA9PT0gXCJ1bmRlZmluZWRcIiB8fCB1RFRQVCAhPT0gXCJib29sZWFuXCIgPyBmbGFncy5kZWZhdWx0VXNlRHJvcFRhcmdldCA6IHVzZURyb3BUYXJnZXQ7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIG9uRHJhZ0xlYXZlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJvcCcsIG9uRHJvcCk7XG5cbiAgICBsZXQgY2IgPSBjYWxsYmFjaztcbiAgICBpZiAoZmxhZ3MudXNlRHJvcFRhcmdldCkge1xuICAgICAgICBjYiA9IGZ1bmN0aW9uICh4LCB5LCBwYXRocykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcbiAgICAgICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGlzIG51bGwgb3IgZWxlbWVudCBpcyBub3QgY2hpbGQgb2YgZHJvcCB0YXJnZXQgZWxlbWVudCwgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKHgsIHksIHBhdGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50c09uKFwid2FpbHM6ZmlsZS1kcm9wXCIsIGNiKTtcbn1cblxuLyoqXG4gKiBPbkZpbGVEcm9wT2ZmIHJlbW92ZXMgdGhlIGRyYWcgYW5kIGRyb3AgbGlzdGVuZXJzIGFuZCBoYW5kbGVycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIE9uRmlsZURyb3BPZmYoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIG9uRHJhZ0xlYXZlKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIG9uRHJvcCk7XG4gICAgRXZlbnRzT2ZmKFwid2FpbHM6ZmlsZS1kcm9wXCIpO1xuICAgIGZsYWdzLnJlZ2lzdGVyZWQgPSBmYWxzZTtcbn1cbiIsICIvKlxuLS1kZWZhdWx0LWNvbnRleHRtZW51OiBhdXRvOyAoZGVmYXVsdCkgd2lsbCBzaG93IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZSBPUiB0ZXh0IGhhcyBiZWVuIHNlbGVjdGVkIE9SIGVsZW1lbnQgaXMgaW5wdXQgb3IgdGV4dGFyZWFcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogc2hvdzsgd2lsbCBhbHdheXMgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogaGlkZTsgd2lsbCBhbHdheXMgaGlkZSB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcblxuVGhpcyBydWxlIGlzIGluaGVyaXRlZCBsaWtlIG5vcm1hbCBDU1MgcnVsZXMsIHNvIG5lc3Rpbmcgd29ya3MgYXMgZXhwZWN0ZWRcbiovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudCkge1xuICAgIC8vIFByb2Nlc3MgZGVmYXVsdCBjb250ZXh0IG1lbnVcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBjb25zdCBkZWZhdWx0Q29udGV4dE1lbnVBY3Rpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLWRlZmF1bHQtY29udGV4dG1lbnVcIikudHJpbSgpO1xuICAgIHN3aXRjaCAoZGVmYXVsdENvbnRleHRNZW51QWN0aW9uKSB7XG4gICAgICAgIGNhc2UgXCJzaG93XCI6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgXCJoaWRlXCI6XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWVcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0ZXh0IGhhcyBiZWVuIHNlbGVjdGVkIGFuZCBhY3Rpb24gaXMgb24gdGhlIHNlbGVjdGVkIGVsZW1lbnRzXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSAoc2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5yYW5nZUNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdHMgPSByYW5nZS5nZXRDbGllbnRSZWN0cygpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmVjdHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRhZ25hbWUgaXMgaW5wdXQgb3IgdGV4dGFyZWFcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IFwiSU5QVVRcIiB8fCBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24gfHwgKCFlbGVtZW50LnJlYWRPbmx5ICYmICFlbGVtZW50LmRpc2FibGVkKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBoaWRlIGRlZmF1bHQgY29udGV4dCBtZW51XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn1cbiIsICIvKlxuIF9cdCAgIF9fXHQgIF8gX19cbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXG58IHwvIHwvIC8gL18vIC8gLyAoX18gIClcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xuKGMpIExlYSBBbnRob255IDIwMTktcHJlc2VudFxuKi9cbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cbmltcG9ydCAqIGFzIExvZyBmcm9tICcuL2xvZyc7XG5pbXBvcnQge2V2ZW50TGlzdGVuZXJzLCBFdmVudHNFbWl0LCBFdmVudHNOb3RpZnksIEV2ZW50c09mZiwgRXZlbnRzT24sIEV2ZW50c09uY2UsIEV2ZW50c09uTXVsdGlwbGV9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7Q2FsbCwgQ2FsbGJhY2ssIGNhbGxiYWNrc30gZnJvbSAnLi9jYWxscyc7XG5pbXBvcnQge1NldEJpbmRpbmdzfSBmcm9tIFwiLi9iaW5kaW5nc1wiO1xuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuL3dpbmRvd1wiO1xuaW1wb3J0ICogYXMgU2NyZWVuIGZyb20gXCIuL3NjcmVlblwiO1xuaW1wb3J0ICogYXMgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCI7XG5pbXBvcnQgKiBhcyBDbGlwYm9hcmQgZnJvbSBcIi4vY2xpcGJvYXJkXCI7XG5pbXBvcnQgKiBhcyBEcmFnQW5kRHJvcCBmcm9tIFwiLi9kcmFnYW5kZHJvcFwiO1xuaW1wb3J0ICogYXMgQ29udGV4dE1lbnUgZnJvbSBcIi4vY29udGV4dG1lbnVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKSB7XG4gICAgd2luZG93LldhaWxzSW52b2tlKCdRJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTaG93KCkge1xuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnUycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSGlkZSgpIHtcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0gnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOkVudmlyb25tZW50XCIpO1xufVxuXG4vLyBUaGUgSlMgcnVudGltZVxud2luZG93LnJ1bnRpbWUgPSB7XG4gICAgLi4uTG9nLFxuICAgIC4uLldpbmRvdyxcbiAgICAuLi5Ccm93c2VyLFxuICAgIC4uLlNjcmVlbixcbiAgICAuLi5DbGlwYm9hcmQsXG4gICAgLi4uRHJhZ0FuZERyb3AsXG4gICAgRXZlbnRzT24sXG4gICAgRXZlbnRzT25jZSxcbiAgICBFdmVudHNPbk11bHRpcGxlLFxuICAgIEV2ZW50c0VtaXQsXG4gICAgRXZlbnRzT2ZmLFxuICAgIEVudmlyb25tZW50LFxuICAgIFNob3csXG4gICAgSGlkZSxcbiAgICBRdWl0XG59O1xuXG4vLyBJbnRlcm5hbCB3YWlscyBlbmRwb2ludHNcbndpbmRvdy53YWlscyA9IHtcbiAgICBDYWxsYmFjayxcbiAgICBFdmVudHNOb3RpZnksXG4gICAgU2V0QmluZGluZ3MsXG4gICAgZXZlbnRMaXN0ZW5lcnMsXG4gICAgY2FsbGJhY2tzLFxuICAgIGZsYWdzOiB7XG4gICAgICAgIGRpc2FibGVTY3JvbGxiYXJEcmFnOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZURlZmF1bHRDb250ZXh0TWVudTogZmFsc2UsXG4gICAgICAgIGVuYWJsZVJlc2l6ZTogZmFsc2UsXG4gICAgICAgIGRlZmF1bHRDdXJzb3I6IG51bGwsXG4gICAgICAgIGJvcmRlclRoaWNrbmVzczogNixcbiAgICAgICAgc2hvdWxkRHJhZzogZmFsc2UsXG4gICAgICAgIGRlZmVyRHJhZ1RvTW91c2VNb3ZlOiB0cnVlLFxuICAgICAgICBjc3NEcmFnUHJvcGVydHk6IFwiLS13YWlscy1kcmFnZ2FibGVcIixcbiAgICAgICAgY3NzRHJhZ1ZhbHVlOiBcImRyYWdcIixcbiAgICAgICAgY3NzRHJvcFByb3BlcnR5OiBcIi0td2FpbHMtZHJvcC10YXJnZXRcIixcbiAgICAgICAgY3NzRHJvcFZhbHVlOiBcImRyb3BcIixcbiAgICAgICAgZW5hYmxlV2FpbHNEcmFnQW5kRHJvcDogZmFsc2UsXG4gICAgfVxufTtcblxuLy8gU2V0IHRoZSBiaW5kaW5nc1xuaWYgKHdpbmRvdy53YWlsc2JpbmRpbmdzKSB7XG4gICAgd2luZG93LndhaWxzLlNldEJpbmRpbmdzKHdpbmRvdy53YWlsc2JpbmRpbmdzKTtcbiAgICBkZWxldGUgd2luZG93LndhaWxzLlNldEJpbmRpbmdzO1xufVxuXG4vLyAoYm9vbCkgVGhpcyBpcyBldmFsdWF0ZWQgYXQgYnVpbGQgdGltZSBpbiBwYWNrYWdlLmpzb25cbmlmICghREVCVUcpIHtcbiAgICBkZWxldGUgd2luZG93LndhaWxzYmluZGluZ3M7XG59XG5cbmxldCBkcmFnVGVzdCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHZhbCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUudGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkpO1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHZhbCA9IHZhbC50cmltKCk7XG4gICAgfVxuICAgIFxuICAgIGlmICh2YWwgIT09IHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlLmJ1dHRvbnMgIT09IDEpIHtcbiAgICAgICAgLy8gRG8gbm90IHN0YXJ0IGRyYWdnaW5nIGlmIG5vdCB0aGUgcHJpbWFyeSBidXR0b24gaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlLmRldGFpbCAhPT0gMSkge1xuICAgICAgICAvLyBEbyBub3Qgc3RhcnQgZHJhZ2dpbmcgaWYgbW9yZSB0aGFuIG9uY2UgaGFzIGJlZW4gY2xpY2tlZCwgZS5nLiB3aGVuIGRvdWJsZSBjbGlja2luZ1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG53aW5kb3cud2FpbHMuc2V0Q1NTRHJhZ1Byb3BlcnRpZXMgPSBmdW5jdGlvbiAocHJvcGVydHksIHZhbHVlKSB7XG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0RyYWdQcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUgPSB2YWx1ZTtcbn1cblxud2luZG93LndhaWxzLnNldENTU0Ryb3BQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHByb3BlcnR5LCB2YWx1ZSkge1xuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcm9wUHJvcGVydHkgPSBwcm9wZXJ0eTtcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFZhbHVlID0gdmFsdWU7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4ge1xuICAgIC8vIENoZWNrIGZvciByZXNpemluZ1xuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSkge1xuICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJyZXNpemU6XCIgKyB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkcmFnVGVzdChlKSkge1xuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVTY3JvbGxiYXJEcmFnKSB7XG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXG4gICAgICAgICAgICBpZiAoZS5vZmZzZXRYID4gZS50YXJnZXQuY2xpZW50V2lkdGggfHwgZS5vZmZzZXRZID4gZS50YXJnZXQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmZXJEcmFnVG9Nb3VzZU1vdmUpIHtcbiAgICAgICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcbiAgICB9XG59KTtcblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiB7XG4gICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcbn0pO1xuXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IGN1cnNvciB8fCB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvcjtcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSA9IGN1cnNvcjtcbn1cblxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnKSB7XG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gZmFsc2U7XG4gICAgICAgIGxldCBtb3VzZVByZXNzZWQgPSBlLmJ1dHRvbnMgIT09IHVuZGVmaW5lZCA/IGUuYnV0dG9ucyA6IGUud2hpY2g7XG4gICAgICAgIGlmIChtb3VzZVByZXNzZWQgPiAwKSB7XG4gICAgICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJkcmFnXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVJlc2l6ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9PSBudWxsKSB7XG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvcjtcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcyAmJiB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzKSB7XG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBcInNlLXJlc2l6ZVwiO1xuICAgIH1cbiAgICBsZXQgcmlnaHRCb3JkZXIgPSB3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XG4gICAgbGV0IGxlZnRCb3JkZXIgPSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xuICAgIGxldCB0b3BCb3JkZXIgPSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xuICAgIGxldCBib3R0b21Cb3JkZXIgPSB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xuXG4gICAgLy8gSWYgd2UgYXJlbid0IG9uIGFuIGVkZ2UsIGJ1dCB3ZXJlLCByZXNldCB0aGUgY3Vyc29yIHRvIGRlZmF1bHRcbiAgICBpZiAoIWxlZnRCb3JkZXIgJiYgIXJpZ2h0Qm9yZGVyICYmICF0b3BCb3JkZXIgJiYgIWJvdHRvbUJvcmRlciAmJiB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFJlc2l6ZSgpO1xuICAgIH0gZWxzZSBpZiAocmlnaHRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzZS1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiBib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInN3LXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIHRvcEJvcmRlcikgc2V0UmVzaXplKFwibnctcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKHRvcEJvcmRlciAmJiByaWdodEJvcmRlcikgc2V0UmVzaXplKFwibmUtcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIpIHNldFJlc2l6ZShcInctcmVzaXplXCIpO1xuICAgIGVsc2UgaWYgKHRvcEJvcmRlcikgc2V0UmVzaXplKFwibi1yZXNpemVcIik7XG4gICAgZWxzZSBpZiAoYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzLXJlc2l6ZVwiKTtcbiAgICBlbHNlIGlmIChyaWdodEJvcmRlcikgc2V0UmVzaXplKFwiZS1yZXNpemVcIik7XG5cbn0pO1xuXG4vLyBTZXR1cCBjb250ZXh0IG1lbnUgaG9va1xud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHtcbiAgICAvLyBhbHdheXMgc2hvdyB0aGUgY29udGV4dG1lbnUgaW4gZGVidWcgJiBkZXZcbiAgICBpZiAoREVCVUcpIHJldHVybjtcblxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGlzYWJsZURlZmF1bHRDb250ZXh0TWVudSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgQ29udGV4dE1lbnUucHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShlKTtcbiAgICB9XG59KTtcblxud2luZG93LldhaWxzSW52b2tlKFwicnVudGltZTpyZWFkeVwiKTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQSxXQUFTLGVBQWUsT0FBTyxTQUFTO0FBSXZDLFdBQU8sWUFBWSxNQUFNLFFBQVEsT0FBTztBQUFBLEVBQ3pDO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxRQUFRLFNBQVM7QUFDaEMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFdBQVcsU0FBUztBQUNuQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJB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 diff --git a/v2/internal/frontend/runtime/runtime_prod_desktop.js b/v2/internal/frontend/runtime/runtime_prod_desktop.js index 430bedfef..483597cbb 100644 --- a/v2/internal/frontend/runtime/runtime_prod_desktop.js +++ b/v2/internal/frontend/runtime/runtime_prod_desktop.js @@ -1 +1 @@ -(()=>{var j=Object.defineProperty;var g=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};g(b,{LogDebug:()=>X,LogError:()=>q,LogFatal:()=>Q,LogInfo:()=>$,LogLevel:()=>Z,LogPrint:()=>J,LogTrace:()=>N,LogWarning:()=>Y,SetLogLevel:()=>_});function u(e,t){window.WailsInvoke("L"+e+t)}function N(e){u("T",e)}function J(e){u("P",e)}function X(e){u("D",e)}function $(e){u("I",e)}function Y(e){u("W",e)}function q(e){u("E",e)}function Q(e){u("F",e)}function _(e){u("S",e)}var Z={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},w={};function v(e,t,n){w[e]=w[e]||[];let o=new y(e,t,n);return w[e].push(o),()=>K(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name;if(w[t]){let n=w[t].slice();for(let o=w[t].length-1;o>=0;o-=1){let i=w[t][o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?m(t):w[t]=n}}function R(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function M(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function m(e){delete w[e],window.WailsInvoke("EX"+e)}function x(e,...t){m(e),t.length>0&&t.forEach(n=>{m(n)})}function K(e){let t=e.eventName;w[t]=w[t].filter(n=>n!==e),w[t].length===0&&m(t)}var c={};function ee(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function te(){return Math.random()*9007199254740991}var D;window.crypto?D=ee:D=te;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(d))}catch(d){console.error(d)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(d))}catch(d){console.error(d)}}));function z(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function B(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};g(T,{WindowCenter:()=>le,WindowFullscreen:()=>we,WindowGetPosition:()=>We,WindowGetSize:()=>ce,WindowHide:()=>xe,WindowIsFullscreen:()=>fe,WindowIsMaximised:()=>ye,WindowIsMinimised:()=>Se,WindowIsNormal:()=>Ie,WindowMaximise:()=>he,WindowMinimise:()=>Te,WindowReload:()=>ne,WindowReloadApp:()=>oe,WindowSetAlwaysOnTop:()=>me,WindowSetBackgroundColour:()=>Ce,WindowSetDarkTheme:()=>se,WindowSetLightTheme:()=>re,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>pe,WindowSetPosition:()=>ve,WindowSetSize:()=>ue,WindowSetSystemDefaultTheme:()=>ie,WindowSetTitle:()=>ae,WindowShow:()=>De,WindowToggleMaximise:()=>Ee,WindowUnfullscreen:()=>de,WindowUnmaximise:()=>be,WindowUnminimise:()=>ke});function ne(){window.location.reload()}function oe(){window.WailsInvoke("WR")}function ie(){window.WailsInvoke("WASDT")}function re(){window.WailsInvoke("WALT")}function se(){window.WailsInvoke("WADT")}function le(){window.WailsInvoke("Wc")}function ae(e){window.WailsInvoke("WT"+e)}function we(){window.WailsInvoke("WF")}function de(){window.WailsInvoke("Wf")}function fe(){return a(":wails:WindowIsFullscreen")}function ue(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function ce(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function pe(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function me(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ve(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function We(){return a(":wails:WindowGetPos")}function xe(){window.WailsInvoke("WH")}function De(){window.WailsInvoke("WS")}function he(){window.WailsInvoke("WM")}function Ee(){window.WailsInvoke("Wt")}function be(){window.WailsInvoke("WU")}function ye(){return a(":wails:WindowIsMaximised")}function Te(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Se(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Ce(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var k={};g(k,{ScreenGetAll:()=>Oe});function Oe(){return a(":wails:ScreenGetAll")}var S={};g(S,{BrowserOpenURL:()=>Le});function Le(e){window.WailsInvoke("BO:"+e)}var I={};g(I,{ClipboardGetText:()=>Pe,ClipboardSetText:()=>Ae});function Ae(e){return a(":wails:ClipboardSetText",[e])}function Pe(){return a(":wails:ClipboardGetText")}var C={};g(C,{CanResolveFilePaths:()=>U,OnFileDrop:()=>Me,OnFileDropOff:()=>ze,ResolveFilePaths:()=>Re});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},p="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function F(e){if(!window.wails.flags.enableWailsDragAndDrop||(e.preventDefault(),!s.useDropTarget))return;let t=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!t||!h(getComputedStyle(t)))return;let n=t;for(;n;)h(n.style)&&n.classList.add(p),n=n.parentElement}function G(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function H(e){if(!!window.wails.flags.enableWailsDragAndDrop){if(e.preventDefault(),U()){let t=[];e.dataTransfer.items?t=[...e.dataTransfer.items].map((n,o)=>{if(n.kind==="file")return n.getAsFile()}):t=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,t)}!s.useDropTarget||(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)))}}function U(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Re(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function Me(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",F),window.addEventListener("dragleave",G),window.addEventListener("drop",H);let o=e;s.useDropTarget&&(o=function(i,r,l){let d=document.elementFromPoint(i,r);if(!d||!h(getComputedStyle(d)))return null;e(i,r,l)}),W("wails:file-drop",o)}function ze(){window.removeEventListener("dragover",F),window.removeEventListener("dragleave",G),window.removeEventListener("drop",H),x("wails:file-drop"),s.registered=!1}function V(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ve(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX{var j=Object.defineProperty;var g=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};g(b,{LogDebug:()=>X,LogError:()=>q,LogFatal:()=>Q,LogInfo:()=>$,LogLevel:()=>Z,LogPrint:()=>J,LogTrace:()=>N,LogWarning:()=>Y,SetLogLevel:()=>_});function u(e,t){window.WailsInvoke("L"+e+t)}function N(e){u("T",e)}function J(e){u("P",e)}function X(e){u("D",e)}function $(e){u("I",e)}function Y(e){u("W",e)}function q(e){u("E",e)}function Q(e){u("F",e)}function _(e){u("S",e)}var Z={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},d={};function v(e,t,n){d[e]=d[e]||[];let o=new y(e,t,n);return d[e].push(o),()=>K(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name,n=d[t]?.slice()||[];if(n.length){for(let o=n.length-1;o>=0;o-=1){let i=n[o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?m(t):d[t]=n}}function R(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function M(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function m(e){delete d[e],window.WailsInvoke("EX"+e)}function x(e,...t){m(e),t.length>0&&t.forEach(n=>{m(n)})}function K(e){let t=e.eventName;d[t]=d[t].filter(n=>n!==e),d[t].length===0&&m(t)}var c={};function ee(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function te(){return Math.random()*9007199254740991}var D;window.crypto?D=ee:D=te;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let w={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(w))}catch(w){console.error(w)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let w={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(w))}catch(w){console.error(w)}}));function z(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function B(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};g(T,{WindowCenter:()=>le,WindowFullscreen:()=>we,WindowGetPosition:()=>We,WindowGetSize:()=>ce,WindowHide:()=>xe,WindowIsFullscreen:()=>fe,WindowIsMaximised:()=>ye,WindowIsMinimised:()=>Se,WindowIsNormal:()=>Ie,WindowMaximise:()=>he,WindowMinimise:()=>Te,WindowReload:()=>ne,WindowReloadApp:()=>oe,WindowSetAlwaysOnTop:()=>me,WindowSetBackgroundColour:()=>Ce,WindowSetDarkTheme:()=>se,WindowSetLightTheme:()=>re,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>pe,WindowSetPosition:()=>ve,WindowSetSize:()=>ue,WindowSetSystemDefaultTheme:()=>ie,WindowSetTitle:()=>ae,WindowShow:()=>De,WindowToggleMaximise:()=>Ee,WindowUnfullscreen:()=>de,WindowUnmaximise:()=>be,WindowUnminimise:()=>ke});function ne(){window.location.reload()}function oe(){window.WailsInvoke("WR")}function ie(){window.WailsInvoke("WASDT")}function re(){window.WailsInvoke("WALT")}function se(){window.WailsInvoke("WADT")}function le(){window.WailsInvoke("Wc")}function ae(e){window.WailsInvoke("WT"+e)}function we(){window.WailsInvoke("WF")}function de(){window.WailsInvoke("Wf")}function fe(){return a(":wails:WindowIsFullscreen")}function ue(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function ce(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function pe(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function me(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function ve(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function We(){return a(":wails:WindowGetPos")}function xe(){window.WailsInvoke("WH")}function De(){window.WailsInvoke("WS")}function he(){window.WailsInvoke("WM")}function Ee(){window.WailsInvoke("Wt")}function be(){window.WailsInvoke("WU")}function ye(){return a(":wails:WindowIsMaximised")}function Te(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Se(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Ce(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var k={};g(k,{ScreenGetAll:()=>Oe});function Oe(){return a(":wails:ScreenGetAll")}var S={};g(S,{BrowserOpenURL:()=>Le});function Le(e){window.WailsInvoke("BO:"+e)}var I={};g(I,{ClipboardGetText:()=>Pe,ClipboardSetText:()=>Ae});function Ae(e){return a(":wails:ClipboardSetText",[e])}function Pe(){return a(":wails:ClipboardGetText")}var C={};g(C,{CanResolveFilePaths:()=>U,OnFileDrop:()=>Me,OnFileDropOff:()=>ze,ResolveFilePaths:()=>Re});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},p="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function F(e){if(!window.wails.flags.enableWailsDragAndDrop||(e.dataTransfer.dropEffect="copy",e.preventDefault(),!s.useDropTarget))return;let t=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!t||!h(getComputedStyle(t)))return;let n=t;for(;n;)h(n.style)&&n.classList.add(p),n=n.parentElement}function G(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function H(e){if(!!window.wails.flags.enableWailsDragAndDrop){if(e.preventDefault(),U()){let t=[];e.dataTransfer.items?t=[...e.dataTransfer.items].map((n,o)=>{if(n.kind==="file")return n.getAsFile()}):t=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,t)}!s.useDropTarget||(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(p)).forEach(t=>t.classList.remove(p)))}}function U(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Re(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function Me(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",F),window.addEventListener("dragleave",G),window.addEventListener("drop",H);let o=e;s.useDropTarget&&(o=function(i,r,l){let w=document.elementFromPoint(i,r);if(!w||!h(getComputedStyle(w)))return null;e(i,r,l)}),W("wails:file-drop",o)}function ze(){window.removeEventListener("dragover",F),window.removeEventListener("dragleave",G),window.removeEventListener("drop",H),x("wails:file-drop"),s.registered=!1}function V(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ve(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX Date: Mon, 21 Oct 2024 06:32:19 +0900 Subject: [PATCH 046/344] [Documentation]Adding notes for latest linux version and libwebkit issue (#3806) * Adding notes for latest linux version and libwebkit issue * adding change log details * updating document changes to website/docs folder --------- Co-authored-by: Lea Anthony --- website/docs/gettingstarted/installation.mdx | 2 ++ website/src/pages/changelog.mdx | 2 +- .../version-v2.9.0/gettingstarted/installation.mdx | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/website/docs/gettingstarted/installation.mdx b/website/docs/gettingstarted/installation.mdx index 2a3fc76b0..d3ddac448 100644 --- a/website/docs/gettingstarted/installation.mdx +++ b/website/docs/gettingstarted/installation.mdx @@ -58,6 +58,8 @@ import TabItem from "@theme/TabItem"; Linux requires the standard gcc build tools plus libgtk3 and libwebkit. Rather than list a ton of commands for different distros, Wails can try to determine what the installation commands are for your specific distribution. Run wails doctor after installation to be shown how to install the dependencies. If your distro/package manager is not supported, please consult the
Add Linux Distro guide. +
Note:
+ If you are using latest Linux version (example: Ubuntu 24.04) and it is not supporting libwebkit2gtk-4.0-dev, then you might encounter an issue in wails doctor: libwebkit not found. To resolve this issue you can install libwebkit2gtk-4.1-dev and during your build use the tag -tags webkit2_41. ``` diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index b8e502585..9396a6f68 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -43,7 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](github.com/ignasbernotas) - +- Updated installation docs for latest linux os version and libwebkit issue [PR](https://github.com/wailsapp/wails/pull/3806) by [@pratikmota](https://github.com/pratikmota) ## v2.9.1 - 2024-06-18 ### Fixed diff --git a/website/versioned_docs/version-v2.9.0/gettingstarted/installation.mdx b/website/versioned_docs/version-v2.9.0/gettingstarted/installation.mdx index 2a3fc76b0..d3ddac448 100644 --- a/website/versioned_docs/version-v2.9.0/gettingstarted/installation.mdx +++ b/website/versioned_docs/version-v2.9.0/gettingstarted/installation.mdx @@ -58,6 +58,8 @@ import TabItem from "@theme/TabItem"; Linux requires the standard gcc build tools plus libgtk3 and libwebkit. Rather than list a ton of commands for different distros, Wails can try to determine what the installation commands are for your specific distribution. Run wails doctor after installation to be shown how to install the dependencies. If your distro/package manager is not supported, please consult the Add Linux Distro guide. +
Note:
+ If you are using latest Linux version (example: Ubuntu 24.04) and it is not supporting libwebkit2gtk-4.0-dev, then you might encounter an issue in wails doctor: libwebkit not found. To resolve this issue you can install libwebkit2gtk-4.1-dev and during your build use the tag -tags webkit2_41.
``` From bb4e95e22d528db2a6f3ebfac091b88c5c1ecb07 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:09:16 +1100 Subject: [PATCH 047/344] Update Sponsor Image (#3855) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 314b7573b..ec9f1c61b 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -17,24 +17,28 @@ text { } Bronze Sponsors - Cody Bentley - + Cody Bentley + - Kazuya Gokita - + Kazuya Gokita + - Simon Thomas - + Simon Thomas + - CodeRabbit - + CodeRabbit + - Ansar Smagulov - + Ansar Smagulov + + + + Connor Peoples + Covering Costs Nick @@ -134,27 +138,23 @@ text { - + - - - - - + - + - + - + Helpers From f2881822d2b4f5476719f172b042c116d58beb5c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 26 Oct 2024 14:26:31 +1100 Subject: [PATCH 048/344] Update Sponsor Image (#3858) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index ec9f1c61b..b77843b6f 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -30,7 +30,7 @@ text { CodeRabbit - + Ansar Smagulov From 758a63648e79fef6f60562052221e49f14663eb9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 00:03:29 +1100 Subject: [PATCH 049/344] Update Sponsor Image (#3863) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 121 ++++++++++++++++---------------- 1 file changed, 62 insertions(+), 59 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index b77843b6f..22ad9126f 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -1,5 +1,5 @@ - + From 157c8fdbc7fb26105f3f16ba1d0e95ba602b64b2 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 2 Nov 2024 20:29:34 +1100 Subject: [PATCH 050/344] Update to go-webview 0.1.17 --- v2/go.mod | 2 +- website/src/pages/changelog.mdx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/v2/go.mod b/v2/go.mod index e34eb43ee..a0d0864b7 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -36,7 +36,7 @@ require ( github.com/tc-hib/winres v0.2.1 github.com/tidwall/sjson v1.1.7 github.com/tkrajina/go-reflector v0.5.6 - github.com/wailsapp/go-webview2 v1.0.16 + github.com/wailsapp/go-webview2 v1.0.17 github.com/wailsapp/mimetype v1.4.1 github.com/wzshiming/ctc v1.2.3 golang.org/x/mod v0.14.0 diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 9396a6f68..46227e41a 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) +- Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 9772523f46d46a1bb9187fe951c5340489344cac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B0=E7=8B=BC?= <148944926+kairo913@users.noreply.github.com> Date: Sun, 3 Nov 2024 12:43:10 +0900 Subject: [PATCH 051/344] Add wails-nextjs-tailwind-template (#3871) Update templates.mdx --- website/docs/community/templates.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/community/templates.mdx b/website/docs/community/templates.mdx index 44bea3875..fdd2778c4 100644 --- a/website/docs/community/templates.mdx +++ b/website/docs/community/templates.mdx @@ -42,6 +42,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router - [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - A template for React + TypeScript + Vite + TailwindCSS - [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - A template with Vite, React, TypeScript, TailwindCSS, and shadcn/ui +- [wails-nextjs-tailwind-template](https://github.com/kairo913/wails-nextjs-tailwind-template) - A template using Next.js and Typescript with TailwindCSS ## Svelte From e573bf4df9f8c656202dc284aa3bca6ac8244092 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 3 Nov 2024 14:44:48 +1100 Subject: [PATCH 052/344] Update go.sum --- v2/go.sum | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/go.sum b/v2/go.sum index 1034139b2..5ea8bd581 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -234,8 +234,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/wailsapp/go-webview2 v1.0.16 h1:wffnvnkkLvhRex/aOrA3R7FP7rkvOqL/bir1br7BekU= -github.com/wailsapp/go-webview2 v1.0.16/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= +github.com/wailsapp/go-webview2 v1.0.17 h1:DkLnUKqW7J///OBXkInMq1fzC88G6ZjHwKuHXThuaco= +github.com/wailsapp/go-webview2 v1.0.17/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wzshiming/ctc v1.2.3 h1:q+hW3IQNsjIlOFBTGZZZeIXTElFM4grF4spW/errh/c= From bdb415130bad5ef20f0f90d1e78541918405b7ec Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 19:00:29 +1100 Subject: [PATCH 053/344] Update Sponsor Image (#3874) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 22ad9126f..7f057b44b 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -24,7 +24,7 @@ text { Kazuya Gokita - + Simon Thomas @@ -126,7 +126,7 @@ text { - + From 1c163422aa6d40fecd89e9dd57f4f54670f4df73 Mon Sep 17 00:00:00 2001 From: Takuya HARA Date: Thu, 7 Nov 2024 04:42:20 +0900 Subject: [PATCH 054/344] Fixed example for macOS menu (#3847) * Fixed example for macOS menu * Update changelog.mdx --- website/docs/reference/menus.mdx | 12 +++++++++--- website/src/pages/changelog.mdx | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/website/docs/reference/menus.mdx b/website/docs/reference/menus.mdx index 7af0bf38f..4a9b4da1b 100644 --- a/website/docs/reference/menus.mdx +++ b/website/docs/reference/menus.mdx @@ -15,15 +15,21 @@ An example of how to create a menu: app := NewApp() AppMenu := menu.NewMenu() + if runtime.GOOS == "darwin" { + AppMenu.Append(menu.AppMenu()) // On macOS platform, this must be done right after `NewMenu()` + } FileMenu := AppMenu.AddSubmenu("File") - FileMenu.AddText("&Open", keys.CmdOrCtrl("o"), openFile) + FileMenu.AddText("&Open", keys.CmdOrCtrl("o"), func(_ *menu.CallbackData) { + // do something + }) FileMenu.AddSeparator() FileMenu.AddText("Quit", keys.CmdOrCtrl("q"), func(_ *menu.CallbackData) { - runtime.Quit(app.ctx) + // `rt` is an alias of "github.com/wailsapp/wails/v2/pkg/runtime" to prevent collision with standard package + rt.Quit(app.ctx) }) if runtime.GOOS == "darwin" { - AppMenu.Append(menu.EditMenu()) // on macos platform, we should append EditMenu to enable Cmd+C,Cmd+V,Cmd+Z... shortcut + AppMenu.Append(menu.EditMenu()) // On macOS platform, EditMenu should be appended to enable Cmd+C, Cmd+V, Cmd+Z... shortcuts } err := wails.Run(&options.App{ diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 46227e41a..8c0e3e473 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony +- Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From d1ba26a04384a323d0e7de103c2cd0b35798f9c4 Mon Sep 17 00:00:00 2001 From: Takuya HARA Date: Thu, 7 Nov 2024 20:24:32 +0900 Subject: [PATCH 055/344] Fixed typo (#3846) * Fixed typo * Update changelog.mdx --- website/docs/guides/crossplatform-build.mdx | 2 +- website/src/pages/changelog.mdx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/website/docs/guides/crossplatform-build.mdx b/website/docs/guides/crossplatform-build.mdx index a9afc6161..f6fbc0f06 100644 --- a/website/docs/guides/crossplatform-build.mdx +++ b/website/docs/guides/crossplatform-build.mdx @@ -60,6 +60,6 @@ jobs: This example offers opportunities for various enhancements, including: - Caching dependencies - Code signing -- Uploading to platforms like S3, Supbase, etc. +- Uploading to platforms like S3, Supabase, etc. - Injecting secrets as environment variables - Utilizing environment variables as build variables (such as version variable extracted from the current Git tag) diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 8c0e3e473..3aed13ce1 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) +- Fixed typo by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3846) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 13d4b218e7b12e62f4282ff0ce6f2b12eaa39366 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 07:24:05 +1100 Subject: [PATCH 056/344] Update Sponsor Image (#3883) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 155 ++++++++++++++++---------------- 1 file changed, 79 insertions(+), 76 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 7f057b44b..20d68e37d 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -1,5 +1,5 @@ - + -Bronze Sponsors - Cody Bentley - +Silver Sponsors + Webtize + +Bronze Sponsors + Cody Bentley + - Kazuya Gokita - + Kazuya Gokita + - Simon Thomas - + Simon Thomas + - CodeRabbit - + CodeRabbit + - Ansar Smagulov - + Ansar Smagulov + - Connor Peoples - + Connor Peoples + - Daniel Grice - -Covering Costs - Nick - + Daniel Grice + +Covering Costs + Nick + - Marcus - + Marcus + - John - + John + - Matt Holt - + Matt Holt + - Iain - + Iain + - Andrei - + Andrei + - Michael - -Buying Breakfast - Tai Groot - + Michael + +Buying Breakfast + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - - - - Andy Alexa - -Buying Coffee + Sander + +Buying Coffee - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - -Helpers + +Helpers - + - + - + - + - + - + - + - + - + - + + + + + From dca20649162009e1f37e1445937237b9e78268f3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 16 Nov 2024 09:43:28 +1100 Subject: [PATCH 057/344] Update Sponsor Image (#3884) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 20d68e37d..2bee254e9 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -73,28 +73,32 @@ text { Michael Buying Breakfast - Tai Groot - + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - + Sander + + + + Kevin + Buying Coffee From 5df8ecc961a56f38f5c8c637d78907c778f21bf7 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 16 Nov 2024 10:45:14 +1100 Subject: [PATCH 058/344] Update PR template (cherry picked from commit 0f0f9a026276fb0224085d419a44ee6276b7f1ac) --- .github/pull_request_template.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index bf3d8de39..d73efffa8 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,9 +1,19 @@ # Description @@ -14,7 +24,7 @@ Fixes # (issue) ## Type of change -Please delete options that are not relevant. +Please select the option that is relevant. - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) @@ -28,6 +38,8 @@ Please describe the tests that you ran to verify your changes. Provide instructi - [ ] Windows - [ ] macOS - [ ] Linux + +If you checked Linux, please specify the distro and version. ## Test Configuration From 10e3a13d12fa0143eebe4c9941df7ec90a5037da Mon Sep 17 00:00:00 2001 From: Damien Sedgwick Date: Sat, 16 Nov 2024 00:04:37 +0000 Subject: [PATCH 059/344] chore: removed incorrect go.mod instructions (#3878) * chore: removed incorrect go.mod instructions * chore: updated changelog.mdx --------- Co-authored-by: Lea Anthony --- website/docs/gettingstarted/firstproject.mdx | 2 -- .../current/gettingstarted/firstproject.mdx | 2 -- .../current/gettingstarted/firstproject.mdx | 2 -- .../current/gettingstarted/firstproject.mdx | 2 -- website/src/pages/changelog.mdx | 3 +++ .../version-v2.8.1/gettingstarted/firstproject.mdx | 2 -- .../version-v2.9.0/gettingstarted/firstproject.mdx | 2 -- 7 files changed, 3 insertions(+), 12 deletions(-) diff --git a/website/docs/gettingstarted/firstproject.mdx b/website/docs/gettingstarted/firstproject.mdx index e8880660d..5cf4dff58 100644 --- a/website/docs/gettingstarted/firstproject.mdx +++ b/website/docs/gettingstarted/firstproject.mdx @@ -128,5 +128,3 @@ The `frontend` directory has nothing specific to Wails and can be any frontend p The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx index 62ee97c84..e7cc86163 100644 --- a/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx +++ b/website/i18n/ar/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx @@ -126,5 +126,3 @@ Wails projects have the following layout: The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx b/website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx index 62ee97c84..e7cc86163 100644 --- a/website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx +++ b/website/i18n/tr/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx @@ -126,5 +126,3 @@ Wails projects have the following layout: The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx index 62ee97c84..e7cc86163 100644 --- a/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx +++ b/website/i18n/vi/docusaurus-plugin-content-docs/current/gettingstarted/firstproject.mdx @@ -126,5 +126,3 @@ Wails projects have the following layout: The `frontend` directory has nothing specific to Wails and can be any frontend project of your choosing. The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 3aed13ce1..a7c833463 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -13,6 +13,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Security` in case of vulnerabilities. ## [Unreleased] +### Changed +- Removed documentation references for 'The default module name in go.mod is "changeme". You should change this to something more appropriate.' as it appears to be no longer relevant. + ### Added - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin diff --git a/website/versioned_docs/version-v2.8.1/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.8.1/gettingstarted/firstproject.mdx index e8880660d..5cf4dff58 100644 --- a/website/versioned_docs/version-v2.8.1/gettingstarted/firstproject.mdx +++ b/website/versioned_docs/version-v2.8.1/gettingstarted/firstproject.mdx @@ -128,5 +128,3 @@ The `frontend` directory has nothing specific to Wails and can be any frontend p The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. diff --git a/website/versioned_docs/version-v2.9.0/gettingstarted/firstproject.mdx b/website/versioned_docs/version-v2.9.0/gettingstarted/firstproject.mdx index e8880660d..5cf4dff58 100644 --- a/website/versioned_docs/version-v2.9.0/gettingstarted/firstproject.mdx +++ b/website/versioned_docs/version-v2.9.0/gettingstarted/firstproject.mdx @@ -128,5 +128,3 @@ The `frontend` directory has nothing specific to Wails and can be any frontend p The `build` directory is used during the build process. These files may be updated to customise your builds. If files are removed from the build directory, default versions will be regenerated. - -The default module name in `go.mod` is "changeme". You should change this to something more appropriate. From 86e3d51c8e788d6660ed6062eec4d4cd0edc75fe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:55:06 +1100 Subject: [PATCH 060/344] Bump the go_modules group across 2 directories with 1 update (#3408) Bumps the go_modules group with 1 update in the /v2/examples/customlayout directory: [golang.org/x/net](https://github.com/golang/net). Bumps the go_modules group with 1 update in the /v2/internal/staticanalysis/test/standard directory: [golang.org/x/net](https://github.com/golang/net). Updates `golang.org/x/net` from 0.17.0 to 0.23.0 - [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0) Updates `golang.org/x/net` from 0.17.0 to 0.23.0 - [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: indirect dependency-group: go_modules - dependency-name: golang.org/x/net dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- v2/examples/customlayout/go.mod | 6 +++--- v2/examples/customlayout/go.sum | 16 ++++++++-------- v2/internal/staticanalysis/test/standard/go.mod | 6 +++--- v2/internal/staticanalysis/test/standard/go.sum | 12 ++++++------ 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/v2/examples/customlayout/go.mod b/v2/examples/customlayout/go.mod index 005bb557d..216438ed8 100644 --- a/v2/examples/customlayout/go.mod +++ b/v2/examples/customlayout/go.mod @@ -29,10 +29,10 @@ require ( github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wailsapp/go-webview2 v1.0.10 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect ) diff --git a/v2/examples/customlayout/go.sum b/v2/examples/customlayout/go.sum index 4ec20616f..37d5db523 100644 --- a/v2/examples/customlayout/go.sum +++ b/v2/examples/customlayout/go.sum @@ -48,8 +48,8 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= @@ -61,13 +61,13 @@ github.com/wailsapp/go-webview2 v1.0.10 h1:PP5Hug6pnQEAhfRzLCoOh2jJaPdrqeRgJKZhy github.com/wailsapp/go-webview2 v1.0.10/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -78,8 +78,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= diff --git a/v2/internal/staticanalysis/test/standard/go.mod b/v2/internal/staticanalysis/test/standard/go.mod index 80e64f9cf..c9fe1fb52 100644 --- a/v2/internal/staticanalysis/test/standard/go.mod +++ b/v2/internal/staticanalysis/test/standard/go.mod @@ -25,10 +25,10 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect github.com/wailsapp/mimetype v1.4.1 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect ) diff --git a/v2/internal/staticanalysis/test/standard/go.sum b/v2/internal/staticanalysis/test/standard/go.sum index 0517c2888..2cd0cf773 100644 --- a/v2/internal/staticanalysis/test/standard/go.sum +++ b/v2/internal/staticanalysis/test/standard/go.sum @@ -57,13 +57,13 @@ github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhw github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wailsapp/wails/v2 v2.3.1 h1:ZJz+pyIBKyASkgO8JO31NuHO1gTTHmvwiHYHwei1CqM= github.com/wailsapp/wails/v2 v2.3.1/go.mod h1:zlNLI0E2c2qA6miiuAHtp0Bac8FaGH0tlhA19OssR/8= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl46qQakyfqfWo4jgfaEM= golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -73,8 +73,8 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= From ba38474050da9381c9a1bd8a6c9a2e8b5f27a038 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 17 Nov 2024 20:56:38 +1100 Subject: [PATCH 061/344] Bump the go_modules group across 3 directories with 1 update (#3410) Bumps the go_modules group with 1 update in the /v2 directory: [golang.org/x/net](https://github.com/golang/net). Bumps the go_modules group with 1 update in the /v2/examples/customlayout directory: [golang.org/x/net](https://github.com/golang/net). Bumps the go_modules group with 1 update in the /v2/internal/staticanalysis/test/standard directory: [golang.org/x/net](https://github.com/golang/net). Updates `golang.org/x/net` from 0.20.0 to 0.23.0 - [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0) Updates `golang.org/x/net` from 0.17.0 to 0.23.0 - [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0) Updates `golang.org/x/net` from 0.17.0 to 0.23.0 - [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-type: direct:production dependency-group: go_modules - dependency-name: golang.org/x/net dependency-type: indirect dependency-group: go_modules - dependency-name: golang.org/x/net dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Lea Anthony From cadbccfb722f5354c95aa74b8ff567900c94f6ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:17:19 +1100 Subject: [PATCH 062/344] Update Sponsor Image (#3892) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 38 +++++++++++++++------------------ 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 2bee254e9..75ef50de6 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -103,64 +103,60 @@ text { - - - - - + - + - + - + - + - + - + - + - - - - + - + - + + + + - + - + - + Helpers From 39c922bc9f1476caf607b5cf89139a48e7d34c9c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 19:10:20 +1100 Subject: [PATCH 063/344] Update Sponsor Image (#3899) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 127 ++++++++++++++++---------------- 1 file changed, 62 insertions(+), 65 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 75ef50de6..0969c5052 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -1,5 +1,5 @@ - + - - Connor Peoples - - - Daniel Grice - -Covering Costs - Nick - + + Daniel Grice + +Covering Costs + Nick + - Marcus - + Marcus + - John - + John + - Matt Holt - + Matt Holt + - Iain - + Iain + - Andrei - + Andrei + - Michael - -Buying Breakfast - Tai Groot - + Michael + +Buying Breakfast + Tai Groot + - Tom Wu - + Tom Wu + - Arden - + Arden + - igops - + igops + - vaaski - + vaaski + - Sander - + Sander + - Kevin - -Buying Coffee + Kevin + +Buying Coffee - + - + - + - + - + - + - + - + - + - + - + - + - + - + - -Helpers + +Helpers - + - + - + - + - + - + - + - + - + - + - + From 63e1f3c09c66d92732a6a531070d5705d6b2c08b Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 23 Nov 2024 22:07:51 +1100 Subject: [PATCH 064/344] Fix TS definition of WindowSetSize --- v2/internal/frontend/runtime/wrapper/runtime.d.ts | 2 +- .../assets/common/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/lit/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/preact/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/react/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/svelte/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts | 2 +- .../templates/vue/frontend/wailsjs/runtime/runtime.d.ts | 2 +- website/src/pages/changelog.mdx | 1 + 15 files changed, 15 insertions(+), 14 deletions(-) diff --git a/v2/internal/frontend/runtime/wrapper/runtime.d.ts b/v2/internal/frontend/runtime/wrapper/runtime.d.ts index 94778dfc2..4445dac21 100644 --- a/v2/internal/frontend/runtime/wrapper/runtime.d.ts +++ b/v2/internal/frontend/runtime/wrapper/runtime.d.ts @@ -134,7 +134,7 @@ export function WindowIsFullscreen(): Promise; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/generate/assets/common/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/lit-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/lit/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/preact-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/preact/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/react-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/react/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/svelte-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/svelte/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/vanilla-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/vanilla/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/vue-ts/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/v2/pkg/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts b/v2/pkg/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts index e0d662b38..02e7bb46b 100644 --- a/v2/pkg/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts +++ b/v2/pkg/templates/templates/vue/frontend/wailsjs/runtime/runtime.d.ts @@ -126,7 +126,7 @@ export function WindowUnfullscreen(): void; // [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) // Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; +export function WindowSetSize(width: number, height: number): void; // [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) // Gets the width and height of the window. diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index a7c833463..f5887542c 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -24,6 +24,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) - Fixed typo by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3846) +- Fixed incorrect TS definition of `WindowSetSize` by @leaanthony ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From e5be3c5cfe188358500abdfd6c10d03a90de902a Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 23 Nov 2024 22:57:29 +1100 Subject: [PATCH 065/344] Update MacOS requirements --- website/docs/gettingstarted/installation.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/gettingstarted/installation.mdx b/website/docs/gettingstarted/installation.mdx index d3ddac448..00077816a 100644 --- a/website/docs/gettingstarted/installation.mdx +++ b/website/docs/gettingstarted/installation.mdx @@ -7,7 +7,7 @@ sidebar_position: 1 ## Supported Platforms - Windows 10/11 AMD64/ARM64 -- MacOS 10.13+ AMD64 +- MacOS 10.15+ AMD64 for development, MacOS 10.13+ for release - MacOS 11.0+ ARM64 - Linux AMD64/ARM64 From 93b49391c767ac172498bf71e2764f8eaae4180e Mon Sep 17 00:00:00 2001 From: Perny <83672513+pernydev@users.noreply.github.com> Date: Mon, 25 Nov 2024 10:13:55 +0200 Subject: [PATCH 066/344] chore: update svelte CLI command (#3912) * chore: update svelte CLI command * chore: specify folder location for svelte project creation command * Update website/docs/guides/sveltekit.mdx --------- Co-authored-by: Lea Anthony --- website/docs/guides/sveltekit.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/sveltekit.mdx b/website/docs/guides/sveltekit.mdx index 333138f78..afb67f630 100644 --- a/website/docs/guides/sveltekit.mdx +++ b/website/docs/guides/sveltekit.mdx @@ -14,8 +14,8 @@ This guide will go into: - Navigate into your newly created myapp folder. - Delete the folder named "frontend" -##### While in the Wails project root. Use your favorite package manager and install SvelteKit as the new frontend. Follow the prompts. -- `npm create svelte@latest frontend` +##### While in the Wails project root. Use the Svelte CLI to create a SvelteKit project as the new frontend. Follow the prompts, nothing Wails specific is needed here. +- `npx sv create frontend` ##### Modify wails.json. - Add `"wailsjsdir": "./frontend/src/lib",` Do note that this is where your Go and runtime functions will appear. From 8deb8a04e779d0938a7d5e5a022a02c0b6800a70 Mon Sep 17 00:00:00 2001 From: Lane Shukhov <32334495+rlshukhov@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:37:29 +0300 Subject: [PATCH 067/344] Add WailsTerm to community showcases (#3914) add WailsTerm to community showcases --- website/docs/community/showcase/wailsterm.mdx | 10 ++++++++++ website/static/img/showcase/wailsterm.webp | Bin 0 -> 121960 bytes 2 files changed, 10 insertions(+) create mode 100644 website/docs/community/showcase/wailsterm.mdx create mode 100644 website/static/img/showcase/wailsterm.webp diff --git a/website/docs/community/showcase/wailsterm.mdx b/website/docs/community/showcase/wailsterm.mdx new file mode 100644 index 000000000..9924dace5 --- /dev/null +++ b/website/docs/community/showcase/wailsterm.mdx @@ -0,0 +1,10 @@ +# WailsTerm + +```mdx-code-block +

+ +
+

+``` + +[WailsTerm](https://github.com/rlshukhov/wailsterm) is a simple translucent terminal app powered by Wails and Xterm.js. diff --git a/website/static/img/showcase/wailsterm.webp b/website/static/img/showcase/wailsterm.webp new file mode 100644 index 0000000000000000000000000000000000000000..9da5a7687b4c23427916f05bc276c82f0d49e282 GIT binary patch literal 121960 zcmb^XWn5HW_XiBmFhjS1bR(eX5K_{ONJ_^H-CY9+(y2%ZNGT{GJqUL$Kz1{Js000k9e_wrdB@RJ+WXmg;P6KP0Q}j` z+t(ieAn?ZV+=2eye{cp4)B55J#No0(*y(Tl`46`J8xQ>@W2mo;llcw+5Ruu~_&Naq z6#F=yBf!oHr-zaXhlM=tT|9AE0f*&0JiP32I0A?HaWc3vDgWq~wEaJNoc<5Cv9bM+ zP8%Di|KPuU!R5pitm5M5?QZkrub2NfZyxS&T)h7J@!{@d&b|-zaZg%Y+`hYcY5u`v zIDF=5tD}pwOH+xaQuVhOm3!!myE1{(kH`t~*|nmEjY z;~hQSb^g@-ADJje7qve!xcK2^yZCDu;xGdampS;U8vG;E>g%QdZ@CkWzRHUK@as0d zIP`b9S8z9@KRix9=!Ua{#y|Q&kYHy+6C96gtRR&D7h@e9rodqxKR1Iv_TX#)L4%!@ z|L}jw_`>!7_`-wZeH}d2m2ep67wDCvuiBqD{E@Hl@WY|M;s9!OcG38g7Z(%Ih`+Pp zLmbA%3iRF1<}dqkzJT@}JQe?m59pPHpXndl{={&?-a$nbhjG4xi5xtQ{`iaI!3^I1 zN`K12#Jzuuo1;_L+Hy4pO_ z!(p5~;12*TfHFV@zyW~cE?a;Xz!l)~ZM$(B_x5*+8o&nN3vdEB0Pg+6{F}q%uM|(* z-2e~_*a3LrWc>b45j8(cmfw?q!gfAbTl z5~vV7Bv2!`4Q2w%fu+G(xVr-G5&=tsAN=dbf93Jl@Q3l2@yGEO@u#d@qI~}+ZrXrF zoJW7h)d3gt{}UfDFHWZzSP3kP(~i>&z6oXm+yjf^%25Q%<4P98vC98=_$Mm=*3$p= z=|3I-{#!%;$Po(>;}O#nD-iSlZ%&Fk6k`AS`&X?0ZzTV=)%HK}{?~&4-}3*P;sUV8 z*{S)T+W5x;Py(nP)CKwi>H&QQH3B$5Eg&SQAJp^*|5Lu&U$yJ>pVIXIvd0ZqFaO(S zIB+fIZ#)0A4?m$wp$(zme{1n~2=d3Zae%Uy_Y+?iCue^SMcjztz@g!32f523A|xUT z0Q?z${>T6ThmZdnSAaMB|I0-$006Qr*VosW|8kF70DxKv++PCfzZ}0L06jVFJ;N$)|C~>`y5x@rE2Jqwj5dnw;qyY*5Rlp;FF2E3A2C&4nS7%&1_XPw3 zo&q8PaezcXDj*Y(3n%~-0m=Z?fI2`U;4|P0pcBvs7y^s~W^k=%6|e=^2b=&dfIuK2 zkQ_(@WCXGUZvh2>B0x!?98eXg1=I(c0j+^fKu;hX_!JloOa#6J<^taV%Yn5(6z~hM z2RICz0xkhJfCs>HJP;lk9xWa#9xt9Co+O?ko+h3l9t_V3&j&9UF9t6eFB`8AuL|!I z-WR++ym7omye+(A5CB99x(VV0-2+L2ltH>6bC4s*7Ze714tfPD1R+3ZTs@D17D3yf zUtj_-4VVLb57&Ypf{nm-U>|T8_ysr@Tn7FG{t6xiFM;>LSNP=kEcgQWQurG9rua_y zf%tLwukhdFH{f^R`qC=?2>}7YO#(gw30z+^BXA`MA$URXhMOvhp>vUg>Zy$mGF#+l!%>3gh-9ZoXC?Xis%(l1yM862+8gYX9L4b>a=H)3uS-DtnDLIa}VrctJ`qlu;|rs<$r zr6r){qt&2wrA?%*ru{~{Pj`b(l+Ktgh%S$=iEi;G=qB$?jhpT_Q*PGXoVa;T&q}XI z??C^I9zj1sf6Bnjpuph3@SLHBVVvQdk%Li{(Ty>Uv5|3(3Cwhd=`m9vQ$AA%(>60L zvoy0E^K<4p=4lo@mOCu^EFmmKEd4CUtZc06tlq3StnIAZY&Y2y*j(8%*qYfk*lF11 z*j?B&*jv~)Ip{bPIovt2Ilgl2bFy$g3xm*@B4 zFXSJ)O>kTCw%hGDw}S|4{Q`+C!`ctA?FMxyJq@iASN2zG{+b8ffNfE^FP<^3_6X z<7q$APS>8*xuxT&)2Iv3)zD4Xozvsf^U=dRCU~s(IPdYAzOepN{VoF<11p0HgA+p~ z!xY0ABYq>eQJXQPG1R!+_|!zjE}T^R|n!ORmdL*N3hJuBUFgZl!M5?k4Uv9z-72 z9w^Tno^GCBz1X~hyoS96yyLtVeWZLcefE7dec$^5{a}7be_Gr`zaP#IkA*J<$OYsD zoCO*O)(24sc?R`Ax%1@NlOMrq!6hN!5WA4Jr<_kCpDu+ehQ12}hS`R-g>#3;gs(=Z zN0dd9M7l)|L-oiAKk;#ze%d#HzLp~P2-zhBtB=uHw%%1*jYc1-@3BA$|;N|5TAI*}%yR`!zmW$??DbnWy{85|kU zGmbK?GJ9T$zADHf$%1DsW@}|5b9i!6bAIPK=Z@zo<<-1qdHwA5=^OhuBl!yXhyvDv z#Dep;E^jB_slWSF$XocTh@dE-Xsy_|xT{36r2IY8`^5K`rJkjWW%^}b%O%RoD_AO0 zD)B1el^a#is-bF?Y9!(w;$6+nn#2!)5AYA0wbr#0b((c;^^*07kGDR)ZlGy+{t5W$ z$*28B=f*{(8FCo)2-Sv`MmJy}n9|RjpYxjNno^ocnq!);TY_7TTfJMizc_taX|rmZ zX*X>j`}+9nw+_vY?oPGN_AbS)mTuYZ&plE-s9wq5#y;`BPyJ&34Fh5W4d2ASeHxS) zL=HU|LJ!LfH;>4Vd>K_4?Htn>>l@b@AD%Fpn8ZS{i<9<~>r?JiKc@qxFJ>ZU@n@gU zQO&)YXPGZtxV=!bD8AUVq_Wh%Y_L4DVz;vO-S7MF)tEK%wO2pbf0VC_tbg86+Zfuk z*j(N6-n!V1+o9fhz01G*aZh2df8TU}^{4O8>w_1EjEAL1qDO7VddKr89w!&4&(9do z%6>`y>N+<$|8WucoA7t`{F8v2LjVxCIsM~p-0TJm0DLG00C;iwDWL#> z9ytJD_yB-+|Neijzp~)g+<&b*|GW_3))jAcFKs<+|4I7)di=d6#Zmv-{l8C~H}~)3 zCQtwKRMgUY_%;{kAq$ZQkH$+b_N(F$#}la(1r;rT%FBJYW%|dv6?FU>;uVHG!|vuK zb1t_U`i(g{uXFa;J{8CiyH9oYwPwo_WMhf*Omw5>*#v)95>o0;EiT0mV%=9HC=bRf zgL3w0ZU!;9A0peB?@lhS$VTYq6-v{UX-`MKGURu;pZ4kH%a5d+#FTd{?hTdYp4lxR z_}oIcHQH`%TmYU=dlY)b*IwUK)v_a(2$SH9@N46DS5X-sn6=rZwt42kqxh01rDC?H zJYP;t_U=&PMzn`~sOC$1jhFTo{dZmS{R#w4t!l5X`6ei<8ZTBFMzv!Zt(A6`@g%BMEXpJ$eD||U_ZUN^)8Vg8D@8Q^Wu+TGhUwOCKM}i^-gv6%)i>wfp16X#vkg}m zSMicKAs=;H4f_~``IHhVSQrs+^wKr*Eg&PePY&7C#EJZ~6SSGd9H`v0jeh{w^a1wz-uE@`~ZZf_O|zzES)ii@fX>LhTS2+Z(pRP)?=LtLZD*UHcd2lpQ@u8$|(LIss?@%_w|`e@F}@Srb@z4i0zvSqrj^GDN(i~)q{ zdx57|dw6zNY9Eg|HW;CU280h3Hm!ldO~l&0-a+2f-?C>l9=BwUkEe|pH}y2H)@iz$GLj zEL3hS;H&02k%}@~vU7|uRUCD^vYwtnP40+HN}s~3#5`Vp?2HktVGmI!gVYV2M_|vk zrwI`3)qPp8GzzHiE9Qb9%QIqQLV({) z-kP%*MIdegFm=63gM?VbXal}?N|nvK8bN4Ch0o8nlKWWtxvIt)g)Q%6yTD(tEJ44E zLErRPHL)UIszRp9cA#RS!Gp2Kn=%|;h|t3Kg^;8D8(AW3(BDsDE$|i)8%70CB!=fF z(%XNv(sMaj7Jlp(XeONkQ(NfXxk`ru#k-3*xf(=(gb_D}c$nMDxsjV0%wrK|!jrTT zByKE-+BkYr^5tQ%4{IB8u;1IuSEl})kC7jJ-sFbB(Vaz_f%H=g0jK4CLrJq&(J~tL z9ApeR!p^r-npl?KF;27_wUasAtG`V~{eG6^hk9{N=gj!F7nHGDv?ZV;K2ZR|Lt;{e z^j^Di^~~jFM_V`=xO0$st(_DsV|i%Cs2La#lCFruN&W|hQD{=KI7>!DJ62i(hgm2{ z%e;A{d_djgR@s6Na$MdDS-f{}wA_nwoA5XfPAyE}@PHw8>~k(U9h z(RtrZLu3N7Dkqml5u1qF?j3-s-&Db=ACtcVoE2R3&b?LaAj6@Jcgs@ZU45>Y@#pw# z**(~bm{sgF*0y2GyQFk$_xz1u6YL^=t7i`0QP*b>?Iu6IQ$%V7_manmecRo&2=qb9 z1^g0e%z5Q76#cVmv$rcw7dzTHkBe~fx_#V?@kprI8u2xjk2LF zprw45HFN&Ei_u$RR4kAd*wcWH(!@iECMN>DH%+lCgE@+ ztfJ!Cpn;9-xccv=gyeZ^kof$H+X`L%wy~UUAsZ-*Iauu6HsAI^-fHUXK$GJJF`3sw@rQ2FVSqAFHN(ti8Cg0=2nMxpnw3{ms^`%`8?eQZRqk zU6E7#AKptnv7H^AP0LDc-j{YA$6NhL_f06W_I9&`Cg#Z9b7Yq|^2rBB?{z_EMKM(E zX?v^ZG)ZldF4_v#Z7M8Mrln+2?GshPJz96>y{HbQ9Bwec2iOvh1{@k5?0Fu~&@FwL zb3Od=r9qdTIg1^ZVrIfamh}z&NkGClOAbygfjyoaNF2C;%%P>FXq%93@RZxp$eb;c4z_iAVF!4tVoqLy8>NWy?!qF1K zo)|W$JFLW~1}XX&`Ltuzpiu`Z14UsJDHmpMudMOc=uEy07jr zDhayvT0Y1&`pT(qAY6d((3vu!2zmJwqn2es3CX$$#*}u4qCLt}VDWvF2$&S4z+cz~ z={{oQdE;7Q3|2-mG9Z<2+iD5V)%l*ygvkpa$o{arB*t` zK7Ns_;GM%u9N>z0FQDbXwj2Bdg6D;GM?FQB6C^|fSv`+uePi{=#C9|({>rGyuG_1>ws1xk9x~O zDD}MOD^F=~iWHuPcJA!yNjqJXfuGrrjf!u)H46f`E@^C4oviTod=0&WM;Yi=s<7|x z!Ac(j(cpy?pgNxkRBFaEYu&ALYk?s#xh!5;>+L(EnRwpFV=sg`mNm7Stq+}059O0W zF$Z41Xnm|q0iq$fmuFDhfA`R`nrVo^N4LTKIL;w>Wy3cgQQ6RIJSc-)bA%_1RvSqK zHo=}?45j-AjF_?91Q2G-C&Q)bE(8?WIhF+7Zme8@$Ofc)nPgdnEbpRGnICmbEd0LG z1;p-|&mM4Mla{=nS#x~dlXmb^Fs;Lneyo<-G-Mh#&Y|xMR=$~=(FCtcGGpa3%8z>d zs?qf1Ya1Dw0-Fk3AFXa57=`8ifM8Jq$%w#@5G~A!;nJN^L>1&U@}jFGe)s22+pv)d znW|ag>t}GJKl%ys3A+5K2Yp%}N=y}-w*1a!h^SQ9Q<`AQ!-gw6gB)vL2Heyu1LkPl z%3wJX+i2jWq!)WDVvtZQe6H)1(+67Sxk=r#^g zHM=>7_kFa^dmHeN_xneRedcDg_EHtc?(AeHrAEimO&!& z64?+^ITBOf%~Q-bLzu$md0;f`b9m)3?m+ArN8kcqwLyZyH)#gaq177mOVC{}Ej ziF{SW(Vw>;PdqkpOqYao^IHqKK|+kjHU*l9PiT8@w|eag?E3CZAMS8{BK7ATnv9>x zoSwcfOXN=3%~;wee**VD4hg@g6Sxs6pyLzbv-DNf$s0ZpLXUmHmsX$1W^G4)J&6$! zKb^t1E-h?tTG+K}s=_p2(Yw12bNHfKO6^IUO|va4?S=ST5nOnE?^Ma50JU5?Ecr9h zLSp^pR@Gun%YZkuJ=Wia3du+pAv@4FW9~} zFYJe>3NhlA365)qai*i-vu_PU*5|oI^DefSXGAZ`6UbMgaYCf+{hnW*TXU6=2U|T` zT;g@|;uNtF?(oavKAXIBh7B~wBW|dcZnMYlYk^F> zxabxqU?UeIv?hB14jUtj(%j6Vl`*I905#X;p6# zx%lOgunrOO^HXtZq9fWmGscH3Q3%;OKD(RN^ud1by|+nZlVMtAqpQ-ID@p+WH{RpX z0ykoD%~EnHs!v@a61f;6VV8=4oHpg{6w(vkA@-cRyO&7OF&TRorBU$XghOj7d+Wus zSrZI)kJ?c5`%;2hf+9y>hp{|VY-lUj{0)EPV~F4@bdtDhC%b4r^fM~3(4DUrU zL%^zG0*Y6(qQrpi!`8;MWM6C;V`~{T+87VZ**!0pmHEp(s#tAXKLNK0y6DZld0v|S z;bg|>%RmPj4oz0rx|5DrM~V_7=cN&*ejzYj&mA<%Q5!fbu|4xLuM7H>C9~DbFU_g+ zlqhUN=t)7J)&l0W?A@bP3yB7HG{t;R=$hd1bETr($23H>6eq;YQFr?f(mWklZ`^b} z@Rg^q8Iuv;nwRQ#jiVlWiW;DPY>?CERFnx%|M>O`c24F_8L4at4B7=5Qh9^8_W=2H zAs7-lalLooV8R2;%3q!zz33UY-JyiNu3f+_t1gE+A>!jTm9RvNN)y0XN_RopN)v5q$_`+O6g|RWMU0*(ZT((FYHV}3_#0x0%6r~yQP7fcOG6+a5=9&D$PfSg=d|1yX@AWF0jaztc`{NNu|mlL8lnF8{osf zH}IQ|+eSNu`D9I>ifKY5QF_v$H>WZJg9qr)qP6`nG%{lYN5=v6v~a7$#!7!ASfi_9 z(|f9|dKL=RM0`S8novDVP!`(r&8cBV!5PUqB+00;wHHQP=o(-4gq-)k=~2aBh`ifU z-N%<)P06gw6A?1=D>u*;wYl6f;t$mwV%eM@$uv+*Sd$RlOBNN_PleP~ddjZhMU1YJ zxX;28i~IsL-uM|6Q=9yhHaRZJgZm$Ily+`%MXGF%&POyag1wx6aTO?m1CR>%Os>F(RI zYhn7s6%laDEx`-|5=QR9O0@rd&o$d-A5JAkAR%qGU&HRlMc){KHE3@-^HnE48&o#i0SL;rbL}5* zBeEas&tQ2_)w*f!^wIXEzsFZl&(v|dQHT$)551lMv?g-aHnx&JqCbtwqB8ecq9w?P zyj08t2&k*N^?D)je+Zu)qwa8iZO8BP?X5pK4Zq&I_E@-tEgbFq$P?@xdNaLEiXZ%Aud2J2zhD23;Z}X(4uMfk| z1?9y-yMvlmsTi#cGe)KA{_y8S2Bx=E9HARhfdVUDrq~@ve4?dCG)ZoJ@R$#D@)Qk9 zpj6)N3ayhSniI8AlhPoDGO64ml6U7U!X_MCHbqag7b^(&4nY>$bq_Vman8{ZH?HCYQ~k? znYspb8>eQ%HZzytZGL~Mis<)4XMxS5mUaL$ZSor#Tc0mFa^G(@Pje!ZzjHjvk=mTg zyRY{~Ryb#_klMb~b0D|oH%k5>@9I~$jMXK<)7%rGE6ecft-Whc>+4VQmp`uiiQzoQES}oippE z+Pnyl;=WB%we74(E4hU6<)LX|HJcXeh#s+{y{oN-%fYY>!k@&m?I#v3OIcU@R#&L& zLwT&TxJR(%>uqc=6W2Og3hLBo_j<1R8=}(Y9!jU4^q(ztQ~((s4e#>Mnv?^TD8^A+ z#qn)WrPzdAW~zJA+9qwn&t7P@t6L!XvzDJtEk~m*j0L^2PiMR?bL0LJV0_orraOK6mL; zz1gwkCsTS;!BCYWJG}5K$7=fQ<8Ea5_x8ZhSs>pms)eh@RMSW| z?LFIfG(PMx+zkTcw}uVLNa*D{SgAWe#c{RvL{0IKkPGX8$avgFK_x+^WhC~jBdPh} zTroDI)PBF_YPyD24i$11efZ`$ykkUf{d^hP9Ee#DY3$1}TTl9~qi~PiuSM&=+)1pP ziLvC9#$p)Md?}V+POCYn;V4Phnd-zIa`KDQMm&o^NMA zZ&=uGzxD{YfoCO>RXQBa3N#j|8i)#jV?Pyb@toR-Mx-};j~5KvE2w!=7nK>f-{xT5 zQ%=5<7DW&P@;B_)HsdDUB?kq7G^ylXF zPg42JYe}f(Jn&n&EmC@N@+kLiCNmpaWeTu~b%M3i@ow((yZ!A(&#Dw7v%B3y`+PgX zPb%f3bq{a0TA+*CBiR^QHCz!eZzNXDoVq_$g*$ zvLgA#D>XM`b3Y!p-9wo4_x)l)=pmntP;aU)Nst^Ty_ zbbqSg*TsG6A!=pe_DiQyH+Mbej9iXSiSH|ta0}MX&%KxHg@Vw72jldN+WZR}90sZ4mULGGmFP%1FE}IrY>g8W$I%zx)7vT=P6vq_f1;gw^L@YJmIE zxwjeU77d+jgC+fT%`BQU_W0MT)cIBTwQRvb^`$|}wNu<>|7r=hSeUr@uiXQ?#z92O zBk7iaCM>i@dAA19*Bl{vL8q=_m+`#Xu#!#?k5y3(*k1ozWDh27Y41q#JaAGb#FDq^ zv(E9iy)$elMwvZEhjx)YnN zWqz@}icS@U0??v#*f%#e0ulJ+KbFj2@2tm>XtiZqmaSFoZ*=}%V{hXNt!%#LOU`;| z=Sua^pDV7?RX60f(v4&U_wCw2-|)LA!L;UGQa&ql3aSnTR3t~tZF**3uju{WR5$cX zkq7oSnZ7<@Os)6uM&V~=rY@W&7MxUXRmxk+fWIXc6%X|`&<}Ul3Nfs0J`4VR6_sOX12rZTTSC$e7n-j2N!=w@Ly$-$<^Qlo6KcMAoHV`^ zVI5P>Qjr6HXlhC**tN}7k=W$tm4DDoY+lvAWm=k%3u-!^6b-duZva0q-d0(1i^x){FDY2- zqldSO&dt3n%yJ207V4ehLBlI1EMm1ceXw1rSyR6`FPFjFt3;z_Q$IgK{7=IzwND&G%eD5+~W&B+2s%NWS? zJjf8cRzWA@oictHwR;_800+O$v>%S#TO>k)54 zs2G186ccReF>JnZ3!SvFUQ<$z4z=qrOSXR-mcn0)W(#Zl-jN))rSMuELL-O1=Vx;5 zQ=05a&*Y$_xOqAOADnDh*bTmdY>!(#-OgqtQGfOf&TY-_*h=+HsqzTDR9+SGYw0Dc z+A|5Aa!Yy<(uNdXuHm3FBO8E_MlI@S>A80D!W5ZlD*i6YHFZJ;7{B%W}42g!u2UzWG9ufMa1B1 zMy^=4QUYYxmiCh(r8hRH{3OloL&u;Rv(d>9Y@W3FY+fl_m}-ra=V8tsha@(C*pV`2I|nxXn5Ycs zi;(r43or8AjcDA9n#Iezd?P60O@6gS$>i z+p-Qr+DQvrt&TOYw$VL1_?>#~kd(HsL4m(a3x>G;n}e)SZX{N8gyl05ZOI+IUB z$RI1i1r*m9SlLFelq$esJ(QnKXhg*zvj;9{{^MW>`$Z}KF?_Qsv-21dcOfuv)ld{s zYPA8ltu0x(4Q-)uOkucs@;I0kO@N6@L2#Sj9|(u>@3J7gD@V#;M5VT9-ow}sF?H@> zg=5$Fpal!*so|w<%iNn=?t|^)RgO`tVr!cf52}Jgr+90djL5(0wh(r%N@Z8lJ9SH8 z#TmY3C8tEyIJd7%9RCbKv7-lhMjIv@G@EWWRgiPo>0f3_t9LT9GK~l|MyEX>rP%I! zopLgbaEpSB=F#W`?0fGJL?g1ILw{QjKRIV*n9dRwOj*dMBP_SEr(AhA6IWwZn;#B| z9^T&Cz7i6lkdVKI5?=bK5`2ktAy;tZ>R;||-x?b&fz&)>L#$S%9K}fh$xDN!i$`ud z*;QK1jMn`26^ynv!EWnN`+zBPFTEu`2UKr9@n@B$W1kbR5n}=mR3j+TvZ0#RyKP<<{XnGg_tTR*eH%8|} zWT7d8$N72@@J|@Sjm0ii9{tnNnp6jacUyN)ZKr^!_?NS2+{Yw#bn}+oDXenDzC%b- z6>J#30z_-wzex$@qD;%JyQRGDfZnEOKk1O5Z$fVuYG~z@_hhDrT_S;1p3561$Nf7t zz0FT24TkVU0!oa?-w8-!nn&qdcAB@_lvI9p!3LhL#zYDO#_oRD7?#VX3-RHS(YgCJ znM6vN%Jf$^bTQ-koi$f+&jUG{iWhUJr!c?dzq&Kyfx z>S
@<6X;8EHvTfb+Fy;=(|Dz<1wTSRFa#lSKbz8*jjxHNHTE{Z#!qeAn$6GYBo z8kYJ+=Sc(9hPK5|bwYusQ|#hRrMs^}8=aKC=;4Yj82$T5nl{e${i4VlypKis7&I4Y z=w6ta_6_&&xlkr9NzO`#s9&G8uw{x=8TS?D=+d8Q=seMVLj*P{jdk)0dH@tV7|$gF zVC`S7G~ojB@|1qM z_K6)eP}$&6SqghExFwdm+HNF?-l?A{%As!VG&nVLydRhObY=F>As-Ead%g2Ala40Q z4{sZ=`;FVnLcLi<%IgH;4pcp50P?hK=yI!^1&tm(0szb2q6ehVDd$7Gt8Ds%0 zQ|;CQih@G|{LZHO!kx3zw-_MAsLY)ba~hp^d{mNur;jRZyE z_N$GmqM74DJ?+;p%0%%~-O{bf-T0SDkeRo@o!_0@1`!7NQl`RnlFqv!W*b{YO-qzD zr-&YSZ)QCx(hG68)|Me58tAz<&?}c8CN{&fUiIW8&daf^R@jPLYtRvYy=W`fC4a8# zmO0fAkAD&5iG4_9!k#aO z+;4n;b|yV$tv`a?8S{+0 z`?mGas)ufgdA&&9qR%_tt;CS_!Cojp3V&*AiEV26K^WA}54*DGP3>&bJO9Ocuz4Bb z>}IuF{ZQV1 zBq(LaOmci%CAux@(}dzkS1ugVJNHevoATj!Sse8m*IYU%hErxwxUM~b!zASSPn)lFI>k~<6Ca;<<2hq{|`wvQRP@Lc*j? z>GgBI#&M4*%GRukav8szR_?64%=5yThzS2LdEDIWm;ya(i+!+x&<$`wfwv0x3+nEJ zMMnWcSA&+(iX@_>w^d~Kn1C7HM>`#u~jTc%SUfAW_3oB7_Fe4d`AI$qgA#pF7~Q6a_r_QRU1r` zEX02B=I{Dw>$|m@@gXFO%{B{n`-9Ktevc~Z-`kCc5N@Z5!6xO&8SFGF@4OHr_Vx_& z;tck&>$$7|RF?>5yM(QL1uGebZ(A;0w9ie0?`{4(b!;XLohQEzApRf}5N0U}-Hx39 zJ^!(9OlzAN8)|RydSSeE`m;$7pzP79x1P z(z$U*w3jMvtkM&~?!UP<&7c03>}&G+Z9fm#tySWPLy>lfdf>57i$1}Sq{ zHV8!eEOxkol!6uH$58dS3#91R|zght@ zC9yq-S^SoFBcRa8;OL=kgl@}T2I;iab z+R8S2`#OHE#xrsN(r4xD7U7mn`0_)~&s@QGCkFSHoJo{&RhhIB-ZFt%jAsqBg2zc>%%^k$7lxy8!}n zT8pIO^&y!#SVLv(&2DEAm~P9a{#`7BsP#OWoZfd!+yb_FuzcelAEZr7uiwQA z&|Q``C_u*%lV!p1Qad@^kXUc>ZgIeaw)2BiS2-$=j#!xULj#6zfm{8ph-}6^+6AVxs7eFV4-BWZ!AY?&7XPHNMoNO>QPiRe=v#z}V<*vCC zcF-?;jR#v~miaA+zRg$*tMY~2vbb#F(!RL-SZbzqWo|#qt@a07eC5P;wgmkG0#TCh zR>oX`t?>i|?Tqj&moAk1nB}QwHSshdlArkJkn?82_kxvIPRA*{)|vw=PHK^oyyFkw zQhFAG)Z-RTN5rc(th3m6Cz`)uJ}qe4Am8T-S-j!`C)`{Z(N!& zZ&3UT;fScZ^WN&Mqu+F$yaQ}2mb>gQp{(YJp~AzSmmY?F9Aoa<+7I6w{IstO#W3d! zS;$Irt*jT3y6o{ZmI)d?NnL4bmc1XG0oHv{n3cdS23`<>!A3SchdGtiY#Md9hZ== zhNec3qBJ)Z8*XA737L< z_BqrW$R>+{jMkA7%Bnz?&*D(dL?PLTqZIn!oB7a@blfiFYYRo`Y}b;+loqclUQ~SA zX8-nYc;m1ji4$V;ewKOwQe{`6LiapwZ>(FF8dT3X@mMi&SC~Gy^R^^Owe0WpTt7SA zt`&dPN(B!iSM{}%;A`Yc@bAzY&$KG(Tr|g&f}f7>{Mc>jOtysi}-NMn#`EL)su_u#mFERSkplapO_`VF8^GmLqxKTCou{(9d_KOf~ zQ|ItbtuGQ!=y1ZTMyF( zJDZI=g3Sa6M~O{+|IOO76x?jV%rg(Mxw3SY!+2h!B3+&IS1x_Ki}B?y?|gjPkPKm; z^R#7yb;cv2If~`bmlt&DKM*Iif}(mYbccmrXLWy0XtRj9wOM~1o?i7HL~0GL2YSjP z5!Eo4Ian5IZDg`kvt7m~#dzyyAakqRZhhZu?32CoOhoG`X4!*)*Cb1hN zx860Q1*Bipqkf=G4}_tvPIW4sbaZ_htY4>27At}6phv{HDL#OzmTGOQqO9b1*Q&Y} zoZvATQuw9ly5} z^K=p9oOBNydrQc4w$IIMte;(62Ef-$=c3rcPZ{#8^D$RWrIoLX`tHUbY}`4Y-x0>n zW-)#CH7PCcR9!%h4p0n;Y6E}fBBBMitE;!4_zle4tpxjC{!ZTar~ZaJ*>Y99L2fw* z%U{_rxp0-eoL_k2a6h_p`8Xs%mg?}xkMZMg#ofJGTl>4HuwjX(Mq}D#x7*)|8qa;V zhcv0w=I>2F=J)112bXb;SwmeP)2TWA3j^DeLb}qkhsV2mW{t6#FZzBa?(91V#5uB1eTKalvHyR~Z5 z2)XE7wNW9R_-md=JMJBdw!kP9KoSmW!S_%%nmE!l);U)Eo#0;IK>Hh34~v(iFyG=5 zm!#0!Kl2nTsHOaC*Mv{q^1qRX7YRa7lAsyXZT2z1`>Rw4vc15T1!xDkqgCzV&qcf< zQ%Pv=`9^|lsNeAFct@#~gEfsLnk?m`?@m!4P%9sC^@wdwnSc%R)Sp!jz3ZD|fgQb8 zJY6C#@gA4(MVae8PM5Y2Eo4wM%b#_RdW3T?PYz0-538{mSBp^-x_c7wg{Z>K;XH(G zj!g=qRj=g*^)u63N!{vpKxmTrwuD2R{UBt6NyFJLx$!MzvAMRDc>ee1_9i|Jg`dnd zRJO?=>*gU=tYAC36DnUn&AH{vG=h+J!m@#)nFulB!mgJyue1EV)Svjl+U1}L$)vnV zeQH1A&a7je<-S-OpWUY&W8aP9b8bq)?sx_rKh&*hByFHYi`)#eY<-mqsUkGV*goww zXp{~Q^MdV0sn0X>)i=raA4gj#3(U`BenfSy&$jL>cf+(*a(ls39BO3Z9Y1iVi?%z0 zeHlmETJzbV6vB&~M%|BAn~jKzTP)nFdJ{{uy@Likble|&KM$hZyYVJ{mL2IY*lZC0 zqiuawh)j_DuY(QZvAk^=c`M#Yj^`Vm9=m+>64|I6$Kx3XqUw*3+e?aN!q?hlvGqOy zZyf(WjJsV%tu`|rr#$YVJ7w^yKd7kg{`~C6zb6#_obIv{6z4x4R&nN6Pc&T#foH6Sz zBT8{hE1EAH^H_hfcD|N-FHuZC!A75wB1u^9q6{QHI>0KtKk<3H4^=R54kiP;GCnL$ znnjHIp%Ho#w%?>?pvSG(LGr&b{4pKGZCI#xv^zDjmW9fM+f-QW``&qckA9NGhUQ1{ z+Ps5r!c>k{|Kvai`+%@V-Xj^1Y>xZU9OmheH=XetKiVJvX&ufTan8r$k--V%=OaZE zE8^&5+46s4?o*pM^W>v4cF_`%NB8J)_2#E!9yt81=Uvo+mLu(+ z<)2cUZh#J}p8ZniivwE!qlah-?7E#)1sE(=`*?`+3GgwcUzn9HGKfB*)!q`&xu

r;knILc=aV-X`TaS$9T0V4)(<(! z+k%=)YN|YxF|I-XKp*_6?*Hl}QUyiB26y}?qpNks?UH)M+8S&QIA4@#ZSO6~d+tMq z@++zoS#r+`R=yN*((;hJOdRSvgDr6A4NRd+1b{l40@T2f3)oA(4&kefS?wQ_y5(R0x)%@0fZwH`KuD)aj^0(ZQ5LaF{;XM?nO%ST zd-_rln{s&kjgo){*oP9`RAtWx-EL3^oK?}QNvX;HOz zL5@UBfUuPlIcadKT=k8=2@WBGUmI-K7Wy0mm;BCo=4n>$}DZ_O?OLXrYg zfo&#x$3<^~sSTdKN}7u`WDr~Vy85f%P@QX4>*scJ)+W0s%rP3^s1blnAJG#t(~Q?q zH<_!m>fL~ZJwk(RWXH)3ENh9CvJ}qq3(?k@@RLeMx4*PJNZ}rFOS+FsuEd&|S(Kl@ z^N=l;&>rdx*E0x;)4VxUt_eb!p|PW-q!`GgLTna!QoNS#ON>gxVh9*Xb0^a3MXxP? z*GNN@Z{kWOo%SS|yD};_vyRH)P%9PP@#`vRVXS$7+vZp2K}EWt_M2K6!Yr!0H+?z+ zSGL{DQ)7twDUGzN^qF#J8KJw>-8sr^=x0bOt^v?V=BB?b=XP@0K75k^@4xvuT(TR)3tf7*BG9584xbf&`Y{W(e0MyQdK7-uvAeBWUpj1 zL96^vYMysF!9yTzjTu~s^N%0IQ(9g(PiTl{0vn-J)kAL|H;Iez|Ej!Xh-|ddGMrr%2hR{?UcG0%N77EjCeb#@u@?0H>mT+vOqwpkDeJ6s3Jm=dHm zyndm`&HzN|7}#p`kSylIruoq^H3iXVYa?ucFM|%K?V%TzmY5L-_t~>5Gqr7-n-?#5 zw1jDl-g}Ry*}JEDYLX@)Bv!a$TCVYu)rS3_w&%bj4ui%rEVP>;P}w{`EH5q+JX+ZuzlCx%p&L`y1ggT zAoeQQ{N6FOjtO6FcIcDa;aH1HS3qa~Pg^;^l)>S6f*S%0A!&o?89{BWZER)67{4U; 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 I88rek`igs?J+C3rlPPpr-d;Yaj& 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 k*dby7su@`ls?kOt Date: Fri, 29 Nov 2024 22:09:37 +0000 Subject: [PATCH 068/344] Update Mac AppStore Guide to support app names containing spaces (#3923) * Update Mac AppStore Guide to support app names containing spaces * Update changelog * Add author --- website/docs/guides/mac-appstore.mdx | 4 ++-- website/src/pages/changelog.mdx | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/website/docs/guides/mac-appstore.mdx b/website/docs/guides/mac-appstore.mdx index f14ac3130..708528987 100644 --- a/website/docs/guides/mac-appstore.mdx +++ b/website/docs/guides/mac-appstore.mdx @@ -81,9 +81,9 @@ wails build -platform darwin/universal -clean cp ./embedded.provisionprofile "./build/bin/$APP_NAME.app/Contents" -codesign --timestamp --options=runtime -s "$APP_CERTIFICATE" -v --entitlements ./build/darwin/entitlements.plist ./build/bin/$APP_NAME.app +codesign --timestamp --options=runtime -s "$APP_CERTIFICATE" -v --entitlements ./build/darwin/entitlements.plist "./build/bin/$APP_NAME.app" -productbuild --sign "$PKG_CERTIFICATE" --component ./build/bin/$APP_NAME.app /Applications ./$APP_NAME.pkg +productbuild --sign "$PKG_CERTIFICATE" --component "./build/bin/$APP_NAME.app" /Applications "./$APP_NAME.pkg" ``` #### Upload App Bundle diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index f5887542c..69dacde62 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Changed - Removed documentation references for 'The default module name in go.mod is "changeme". You should change this to something more appropriate.' as it appears to be no longer relevant. +- Update script in Mac App Store guide to support app names containing spaces by @cristianrgreco ### Added - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin From dade880064ee6c9ffdbd311d223628abbaf090ca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 30 Nov 2024 11:30:24 +1100 Subject: [PATCH 069/344] Update Sponsor Image (#3918) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 0969c5052..62bf1351d 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -141,19 +141,23 @@ text { - + - + - + - + + + + + Helpers From 2c45ae69bb46c221d2811356c076a09a37e841ff Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 2 Dec 2024 07:48:38 +1100 Subject: [PATCH 070/344] Update go-webview2 to v1.0.18. --- v2/go.mod | 6 +++--- v2/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/v2/go.mod b/v2/go.mod index a0d0864b7..6787e8082 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -32,16 +32,16 @@ require ( github.com/pterm/pterm v0.12.49 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 github.com/samber/lo v1.38.1 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/tc-hib/winres v0.2.1 github.com/tidwall/sjson v1.1.7 github.com/tkrajina/go-reflector v0.5.6 - github.com/wailsapp/go-webview2 v1.0.17 + github.com/wailsapp/go-webview2 v1.0.18 github.com/wailsapp/mimetype v1.4.1 github.com/wzshiming/ctc v1.2.3 golang.org/x/mod v0.14.0 golang.org/x/net v0.25.0 - golang.org/x/sys v0.20.0 + golang.org/x/sys v0.27.0 golang.org/x/tools v0.17.0 ) diff --git a/v2/go.sum b/v2/go.sum index 5ea8bd581..786066821 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -212,8 +212,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= @@ -234,8 +234,8 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/wailsapp/go-webview2 v1.0.17 h1:DkLnUKqW7J///OBXkInMq1fzC88G6ZjHwKuHXThuaco= -github.com/wailsapp/go-webview2 v1.0.17/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= +github.com/wailsapp/go-webview2 v1.0.18 h1:SSSCoLA+MYikSp1U0WmvELF/4c3x5kH8Vi31TKyZ4yk= +github.com/wailsapp/go-webview2 v1.0.18/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wzshiming/ctc v1.2.3 h1:q+hW3IQNsjIlOFBTGZZZeIXTElFM4grF4spW/errh/c= @@ -310,8 +310,8 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From 6345b64a2241804389778d363ddee27076662f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B8=8C=E5=98=89=E5=98=89?= Date: Thu, 5 Dec 2024 02:18:29 +0800 Subject: [PATCH 071/344] Update templates.mdx (#3930) add a svelte templage --- website/versioned_docs/version-v2.9.0/community/templates.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/versioned_docs/version-v2.9.0/community/templates.mdx b/website/versioned_docs/version-v2.9.0/community/templates.mdx index 030600ddc..3853d91b0 100644 --- a/website/versioned_docs/version-v2.9.0/community/templates.mdx +++ b/website/versioned_docs/version-v2.9.0/community/templates.mdx @@ -53,6 +53,7 @@ If you are unsure about a template, inspect `package.json` and `wails.json` for - [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - A template using Svelte and Vite with TailwindCSS v3 - [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - An updated template using Svelte v4.2.0 and Vite with TailwindCSS v3.3.3 - [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - A template using SvelteKit +- [wails-template-shadcn-svelte](https://github.com/xijaja/wails-template-shadcn-svelte) - A template using Sveltekit and Shadcn-Svelte ## Solid From dd4aa56310b938e92461895c37b5eb206cd6c193 Mon Sep 17 00:00:00 2001 From: lvyaoting <166296299+lvyaoting@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:35:46 +0800 Subject: [PATCH 072/344] chore: fix some comments (#3932) Signed-off-by: lvyaoting --- v2/internal/frontend/desktop/darwin/single_instance.go | 2 +- v2/internal/frontend/desktop/windows/winc/controlbase.go | 2 +- v2/internal/menumanager/processedMenu.go | 2 +- v2/pkg/commands/buildtags/buildtags.go | 2 +- v2/pkg/menu/menuitem.go | 2 +- website/src/pages/changelog.mdx | 2 ++ 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/single_instance.go b/v2/internal/frontend/desktop/darwin/single_instance.go index 02a5c78ee..27b34045b 100644 --- a/v2/internal/frontend/desktop/darwin/single_instance.go +++ b/v2/internal/frontend/desktop/darwin/single_instance.go @@ -62,7 +62,7 @@ func HandleSecondInstanceData(secondInstanceMessage *C.char) { } } -// CreateLockFile tries to create a file with given name and acquire an +// createLockFile tries to create a file with given name and acquire an // exclusive lock on it. If the file already exists AND is still locked, it will // fail. func createLockFile(filename string) (*os.File, error) { diff --git a/v2/internal/frontend/desktop/windows/winc/controlbase.go b/v2/internal/frontend/desktop/windows/winc/controlbase.go index 086609aed..39b92d5a7 100644 --- a/v2/internal/frontend/desktop/windows/winc/controlbase.go +++ b/v2/internal/frontend/desktop/windows/winc/controlbase.go @@ -65,7 +65,7 @@ type ControlBase struct { dispatchq []func() } -// initControl is called by controls: edit, button, treeview, listview, and so on. +// InitControl is called by controls: edit, button, treeview, listview, and so on. func (cba *ControlBase) InitControl(className string, parent Controller, exstyle, style uint) { cba.hwnd = CreateWindow(className, parent, exstyle, style) if cba.hwnd == 0 { diff --git a/v2/internal/menumanager/processedMenu.go b/v2/internal/menumanager/processedMenu.go index 0f2351846..c87646ccb 100644 --- a/v2/internal/menumanager/processedMenu.go +++ b/v2/internal/menumanager/processedMenu.go @@ -23,7 +23,7 @@ type ProcessedMenuItem struct { Hidden bool `json:",omitempty"` // Checked indicates if the item is selected (used by Checkbox and Radio types only) Checked bool `json:",omitempty"` - // Submenu contains a list of menu items that will be shown as a submenu + // SubMenu contains a list of menu items that will be shown as a submenu // SubMenu []*MenuItem `json:"SubMenu,omitempty"` SubMenu *ProcessedMenu `json:",omitempty"` /* diff --git a/v2/pkg/commands/buildtags/buildtags.go b/v2/pkg/commands/buildtags/buildtags.go index 70820d03d..5cca16acf 100644 --- a/v2/pkg/commands/buildtags/buildtags.go +++ b/v2/pkg/commands/buildtags/buildtags.go @@ -8,7 +8,7 @@ import ( ) // Parse parses the given tags string and returns -// a cleaned slice of strings. Both comma and space delimeted +// a cleaned slice of strings. Both comma and space delimited // tags are supported but not mixed. If mixed, an error is returned. func Parse(tags string) ([]string, error) { if tags == "" { diff --git a/v2/pkg/menu/menuitem.go b/v2/pkg/menu/menuitem.go index 264b2ebd4..bffc522d8 100644 --- a/v2/pkg/menu/menuitem.go +++ b/v2/pkg/menu/menuitem.go @@ -22,7 +22,7 @@ type MenuItem struct { Hidden bool // Checked indicates if the item is selected (used by Checkbox and Radio types only) Checked bool - // Submenu contains a list of menu items that will be shown as a submenu + // SubMenu contains a list of menu items that will be shown as a submenu // SubMenu []*MenuItem `json:"SubMenu,omitempty"` SubMenu *Menu diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 69dacde62..c852352ab 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -26,6 +26,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) - Fixed typo by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3846) - Fixed incorrect TS definition of `WindowSetSize` by @leaanthony +- chore: fix some comments in [PR](https://github.com/wailsapp/wails/pull/3932) by @lvyaoting + ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From c27d2ceb8e540956ffb28379522018246751da1a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 8 Dec 2024 11:36:03 +1100 Subject: [PATCH 073/344] Update Sponsor Image (#3938) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 62bf1351d..7562b600a 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -48,7 +48,7 @@ text { Marcus - + John @@ -141,23 +141,19 @@ text { - + - + - - - - - + - + Helpers From 896a90f69ea46ec0695d0a975b82de9c1549e629 Mon Sep 17 00:00:00 2001 From: Akshay Kalose Date: Mon, 9 Dec 2024 17:31:25 +0530 Subject: [PATCH 074/344] Add Minesweeper XP to Community Showcase (#3940) --- .../docs/community/showcase/minesweeper-xp.mdx | 10 ++++++++++ .../static/img/showcase/minesweeper-xp.webp | Bin 0 -> 192196 bytes 2 files changed, 10 insertions(+) create mode 100644 website/docs/community/showcase/minesweeper-xp.mdx create mode 100644 website/static/img/showcase/minesweeper-xp.webp diff --git a/website/docs/community/showcase/minesweeper-xp.mdx b/website/docs/community/showcase/minesweeper-xp.mdx new file mode 100644 index 000000000..f127a005f --- /dev/null +++ b/website/docs/community/showcase/minesweeper-xp.mdx @@ -0,0 +1,10 @@ +# Minesweeper XP + +```mdx-code-block +

+ +
+

+``` + +[Minesweeper-XP](https://git.new/Minesweeper-XP) allows you to experience the classic Minesweeper XP (+ 98 and 3.1) on macOS, Windows, and Linux! diff --git a/website/static/img/showcase/minesweeper-xp.webp b/website/static/img/showcase/minesweeper-xp.webp new file mode 100644 index 0000000000000000000000000000000000000000..79f2b3e18fbf6f668116dda383a5af419dcfa9e2 GIT binary patch literal 192196 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%0Dd| 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%0AGUHy9COeqd;HG_preRl4peqfy%pQ zA^aZ~a}_GQ?V+>Nu~E<@0gJ5)4q(j=x8JNLa?mLc!ro zLqWJmNrvIR##++%+bP>k;86o25YK-|yco&ip{MSevD`-LOHhe4AKPI^`A?I)%PQCL z3G$iHp5EbzXb^Yl4UZOu%c|GI8uU9bU4J|z2QW;q+U!TD0;dA|-=6J>@uP9Mo;Uob z=fsh;PAB9j;Hkj9rd@0xHu$$|rMDM@8%wagCJO+ss`$wC1Uw04}L{SU(j%zt8l z651FQA2-ELm~mc{Fpd?vz+ly=HT{fWIEzC$eD&Hy!&;P5${7q_mq14Q2N>+`>soC% zUpv}--4h^!43s{;xYmlsOx@4J5`uCaTc0RV3oEz07v9#+>Q72D_7Nk7!JVgvctv#WvShv{&0K7OH}BG437T)A6;*n-Xz^zt0EumC_BLrk&)`#slH-Jk82 zAfSPz|9;12lUTMNyj+I~YCs-eQ!HC_)zD#xJktBXxrP?Tlj7pw8`y)E*B|>%~N11Zi7|AyR=7V z^rk1-W8~W~DHrrDYk*6sDGf~jDQ)E+H}io2zNf{7`kB-+?jxqPzMwxbgQ_L)->Qh# zh)MB}TZ%upaQx(7s~1~}Ke$L|@FF^gWKIbCE$8~#YU@s?Rc~4QzTu1%g3Roqt3lAz z2)j^=iP!$XkSFz>%VeuRpeSai9epDML)+AC!_6X|9I6*v?42~0%Igcv#aWo2I3T25 zB|o#9brvk8#;ozZV{_D5U8ZxaH~ikQ$Hg&`(?cpsLN?5P%VUNQwLF!w-!Ru;r(5Fk zVIg__t>G~kaHF)rqH30H+5d=cyjgD9cuaS~@G6K!GlD;WtC)c-#rbcr^`~@!YjNqz zzNQ)Mh`EbY2z!*|?*UDNNvJtC{P7T#h|d4zr!5#2Vgm}cOH?aC7W-4i5Oc$YQVGce z#AbxA&~+80f~*fPzoUx3&j8%X{TT*nDVAh_2tedvL;Nh(Kq}|$CE{%ehOQ=~W7f(K#(VE1W{hZCod)rA>0ZT?FhnRk$6natKl@W@n-LJ80^6j$ zJBFH>ET} zKspBMmGWAi4l`tq_mef#cZf2xy}ySM5F*T(hiShP`uLijZG~6?<-aSuFR%@pTh8sY z%QU2vl*q?Znpp7N5N?6C%aw-NcMmVih7>KcR|FO(wqj#2UuO%7b|ae6AnPi_cWxn= zz@2cDD0D@i?&9!}oEC{Xe3`&tYg30g0?^4XNXIIOATBj?%H-*5WClci@o0IO6NHkucDxjnna5DnO< z?9dHy<+9B~VYP{D$OW9;<-4guU_+V0%%hb%Kbu%eLC71aFoN2}{3ST>)UdT>bacU0w*;LQx3;a000Ba%l%pwMfiGh z;NuKO@QDF{^g1;ka3TfE? zOc2`ruk#`Gprmjup*Y%4l5(@>kCHm?#kuJNOq-dnT-Vw*l2C{7JMg@KZvBgxI0!^j z*SY|clTfP@VWeoHm)L!+onl`M7!ih+iHpCKTQE>BK}X2lPfK0OX_MeRC~*+s$KysE zu3n!SJ|Rs+0A7^bGC=Uvf$RD`9Lf#Wk+3m(xw#P;Jd^roAd ZRCx^5)NyY0_lPmUD^R(V@$diu0079bWETJc literal 0 HcmV?d00001 From 42e77506d94ba35e24a6c77159969389cdcb721d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 20:35:31 +1100 Subject: [PATCH 075/344] Update Sponsor Image (#3943) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 7562b600a..8ace57ac5 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -124,36 +124,32 @@ text { - - - - - + - + - - - - + - + - + + + + - + - + Helpers From e219e3b65e25f203a7de64f3d453d990fe395c6d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 19:48:44 +1100 Subject: [PATCH 076/344] Update Sponsor Image (#3952) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 8ace57ac5..e151d48a0 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -141,15 +141,19 @@ text { - + - + - + + + + + Helpers From fc0aea103813934f04d8cfab97da6f9202c6e593 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Dec 2024 19:47:40 +1100 Subject: [PATCH 077/344] Update Sponsor Image (#3956) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index e151d48a0..5b7c29cba 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -156,46 +156,50 @@ text { Helpers - + - + - + - + - + - + - + - + - + - + - + + + + + From d730c963f4b4a9227d0ce02fdd967d2cc76393d7 Mon Sep 17 00:00:00 2001 From: bronya0 Date: Mon, 23 Dec 2024 18:01:18 +0800 Subject: [PATCH 078/344] docs: add Kafka King to showcase (#3964) * add showcase img * Create kafka-king.mdx * add showcase * Update kafka-king.mdx * Delete website/static/img/showcase/kafka-King-img_3.png * Create kafka-king.mdx * Create kafka-king.mdx --- .../docs/community/showcase/kafka-king.mdx | 22 ++++++++++++++++++ .../current/community/showcase/kafka-king.mdx | 22 ++++++++++++++++++ .../current/community/showcase/kafka-king.mdx | 22 ++++++++++++++++++ .../static/img/showcase/kafka-King-img_3.webp | Bin 0 -> 28322 bytes 4 files changed, 66 insertions(+) create mode 100644 website/docs/community/showcase/kafka-king.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx create mode 100644 website/static/img/showcase/kafka-King-img_3.webp diff --git a/website/docs/community/showcase/kafka-king.mdx b/website/docs/community/showcase/kafka-king.mdx new file mode 100644 index 000000000..544595ba2 --- /dev/null +++ b/website/docs/community/showcase/kafka-king.mdx @@ -0,0 +1,22 @@ +# [Kafka-King](https://github.com/Bronya0/Kafka-King) + +```mdx-code-block +

    + +
    +

    +``` + +[Kafka-King](https://github.com/Bronya0/Kafka-King) is a kafka GUI client that supports various systems and is compact and easy to use. +This is made of Wails+vue3 + +# Kafka-King function list +- [x] View the cluster node list, support dynamic configuration of broker and topic configuration items +- [x] Supports consumer clients, consumes the specified topic, size, and timeout according to the specified group, and displays the message information in various dimensions in a table +- [x] Supports PLAIN, SSL, SASL, kerberos, sasl_plaintext, etc. etc. +- [x] Create topics (support batches), delete topics, specify replicas, partitions +- [x] Support statistics of the total number of messages, total number of submissions, and backlog for each topic based on consumer groups +- [x] Support viewing topics Detailed information (offset) of the partition, and support adding additional partitions +- [x] Support simulated producers, batch sending messages, specify headers, partitions +- [x] Health check +- [x] Support viewing consumer groups , Consumer- …… diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx new file mode 100644 index 000000000..7a064ac7b --- /dev/null +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx @@ -0,0 +1,22 @@ +# [Kafka-King](https://github.com/Bronya0/Kafka-King) + +```mdx-code-block +

    + +
    +

    +``` + +[Kafka-King](https://github.com/Bronya0/Kafka-King) は、さまざまなシステムをサポートし、コンパクトで使いやすい kafka GUI クライアントです。 +これは Wails+vue3 で作成されています + +# Kafka-King 関数リスト +- [x] クラスター ノード リストの表示、ブローカーおよびトピック構成項目の動的構成のサポート +- [x] コンシューマー クライアントのサポート、指定されたグループに従って指定されたトピック、サイズ、タイムアウトを消費し、さまざまなディメンションでメッセージ情報をテーブルに表示します +- [x] PLAIN、SSL、SASL、kerberos、sasl_plaintext などをサポートします +- [x] トピックの作成 (バッチのサポート)、トピックの削除、レプリカ、パーティションの指定 +- [x] コンシューマー グループに基づく各トピックの合計メッセージ数、合計送信数、バックログの統計のサポート +- [x] トピックのパーティションの詳細情報 (オフセット) の表示のサポート、および追加パーティションの追加のサポート +- [x] シミュレートされたプロデューサーのサポート、メッセージのバッチ送信、ヘッダー、パーティションの指定 +- [x] ヘルス チェック +- [x] コンシューマー グループの表示のサポート、Consumer- …… diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx new file mode 100644 index 000000000..5beee5ef9 --- /dev/null +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx @@ -0,0 +1,22 @@ +# [Kafka-King](https://github.com/Bronya0/Kafka-King) + +```mdx-code-block +

    + +
    +

    +``` + +[Kafka-King](https://github.com/Bronya0/Kafka-King) 是一个支持各种系统、小巧易用的 kafka GUI 客户端。 +这是由Wails+vue3制作的 + +# Kafka-King功能列表 +- [x] 查看集群节点列表,支持动态配置broker和topic配置项 +- [x] 支持consumer客户端,根据指定的group消费指定的topic、size、timeout,并将消息信息以表格形式展示在各个维度 +- [x] 支持PLAIN、SSL、SASL、kerberos、sasl_plaintext等 +- [x] 创建topic(支持批量)、删除topic、指定replicas、partitions +- [x] 支持根据consumer group统计每个topic的消息总数、提交总数、backlog数量 +- [x] 支持查看topic分区的详细信息(offset),支持添加额外的分区 +- [x] 支持模拟producer,批量发送消息,指定headers、partitions +- [x] 健康检查 +- [x] 支持查看consumer group、consumer…… diff --git a/website/static/img/showcase/kafka-King-img_3.webp b/website/static/img/showcase/kafka-King-img_3.webp new file mode 100644 index 0000000000000000000000000000000000000000..ed905d924eeeac022f406a1e590248aab569cca4 GIT binary patch literal 28322 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 a6I~1;3r_$4Ec?IdF8?12e5XTLsQ&}BH3-rG literal 0 HcmV?d00001 From ee2156ee2c5310368be85d6d941a213a6ce60301 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 23 Dec 2024 21:05:33 +1100 Subject: [PATCH 079/344] Added Go requirements for Mac 15+ --- website/docs/gettingstarted/installation.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/gettingstarted/installation.mdx b/website/docs/gettingstarted/installation.mdx index 00077816a..1511e3865 100644 --- a/website/docs/gettingstarted/installation.mdx +++ b/website/docs/gettingstarted/installation.mdx @@ -15,7 +15,7 @@ sidebar_position: 1 Wails has a number of common dependencies that are required before installation: -- Go 1.20+ +- Go 1.21+ (macOS 15+ requires Go 1.23.3+) - NPM (Node 15+) ### Go From 461d34c620c414273e4af11caac5022b9ecee8c9 Mon Sep 17 00:00:00 2001 From: 562589540 <73332665+562589540@users.noreply.github.com> Date: Thu, 26 Dec 2024 13:13:46 +0800 Subject: [PATCH 080/344] fix: prevent unnecessary redraws during window minimize/restore (#3955) * fix: prevent unnecessary redraws during window minimize/restore This fixes the window flickering issue when minimizing/restoring by: 1. Adding isMinimizing flag to track window state 2. Adding SetPadding filter to prevent redundant redraws 3. Properly handling minimize/restore window states Fixes #3951 * docs: improve comments and changelog for frameless window flickering fix - Add detailed comments about frameless window fix - Update changelog to clarify this is a frameless window issue - Add bilingual comments for better understanding Fixes #3951 --------- Co-authored-by: Lea Anthony --- .../frontend/desktop/windows/frontend.go | 11 +++++++ .../frontend/desktop/windows/window.go | 30 ++++++++++++++++--- website/src/pages/changelog.mdx | 1 + 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/v2/internal/frontend/desktop/windows/frontend.go b/v2/internal/frontend/desktop/windows/frontend.go index 806f4ffba..65490ef23 100644 --- a/v2/internal/frontend/desktop/windows/frontend.go +++ b/v2/internal/frontend/desktop/windows/frontend.go @@ -170,10 +170,21 @@ func (f *Frontend) Run(ctx context.Context) error { // depends on the content in the WebView, see https://github.com/wailsapp/wails/issues/1319 event, _ := arg.Data.(*winc.SizeEventData) if event != nil && event.Type == w32.SIZE_MINIMIZED { + // Set minimizing flag to prevent unnecessary redraws during minimize/restore for frameless windows + // 设置最小化标志以防止无边框窗口在最小化/恢复过程中的不必要重绘 + // This fixes window flickering when minimizing/restoring frameless windows + // 这修复了无边框窗口在最小化/恢复时的闪烁问题 + // Reference: https://github.com/wailsapp/wails/issues/3951 + f.mainWindow.isMinimizing = true return } } + // Clear minimizing flag for all non-minimize size events + // 对于所有非最小化的尺寸变化事件,清除最小化标志 + // Reference: https://github.com/wailsapp/wails/issues/3951 + f.mainWindow.isMinimizing = false + if f.resizeDebouncer != nil { f.resizeDebouncer(func() { f.mainWindow.Invoke(func() { diff --git a/v2/internal/frontend/desktop/windows/window.go b/v2/internal/frontend/desktop/windows/window.go index 1e4289ee6..19ea9db26 100644 --- a/v2/internal/frontend/desktop/windows/window.go +++ b/v2/internal/frontend/desktop/windows/window.go @@ -3,10 +3,11 @@ package windows import ( - "github.com/wailsapp/go-webview2/pkg/edge" "sync" "unsafe" + "github.com/wailsapp/go-webview2/pkg/edge" + "github.com/wailsapp/wails/v2/internal/frontend/desktop/windows/win32" "github.com/wailsapp/wails/v2/internal/system/operatingsystem" @@ -37,6 +38,13 @@ type Window struct { OnResume func() chromium *edge.Chromium + + // isMinimizing indicates whether the window is currently being minimized + // 标识窗口是否处于最小化状态,用于解决最小化/恢复时的闪屏问题 + // This flag is used to prevent unnecessary redraws during minimize/restore transitions for frameless windows + // 此标志用于防止无边框窗口在最小化/恢复过程中的不必要重绘 + // Reference: https://github.com/wailsapp/wails/issues/3951 + isMinimizing bool } func NewWindow(parent winc.Controller, appoptions *options.App, versionInfo *operatingsystem.WindowsVersionInfo, chromium *edge.Chromium) *Window { @@ -256,7 +264,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { rgrc := (*w32.RECT)(unsafe.Pointer(lparam)) if w.Form.IsFullScreen() { // In Full-Screen mode we don't need to adjust anything - w.chromium.SetPadding(edge.Rect{}) + w.SetPadding(edge.Rect{}) } else if w.IsMaximised() { // If the window is maximized we must adjust the client area to the work area of the monitor. Otherwise // some content goes beyond the visible part of the monitor. @@ -287,7 +295,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { } } } - w.chromium.SetPadding(edge.Rect{}) + w.SetPadding(edge.Rect{}) } else { // This is needed to workaround the resize flickering in frameless mode with WindowDecorations // See: https://stackoverflow.com/a/6558508 @@ -296,7 +304,7 @@ func (w *Window) WndProc(msg uint32, wparam, lparam uintptr) uintptr { // Increasing the bottom also worksaround the flickering but we would loose 1px of the WebView content // therefore let's pad the content with 1px at the bottom. rgrc.Bottom += 1 - w.chromium.SetPadding(edge.Rect{Bottom: 1}) + w.SetPadding(edge.Rect{Bottom: 1}) } return 0 } @@ -339,3 +347,17 @@ func invokeSync[T any](cba *Window, fn func() (T, error)) (res T, err error) { wg.Wait() return res, err } + +// SetPadding is a filter that wraps chromium.SetPadding to prevent unnecessary redraws during minimize/restore +// 包装了chromium.SetPadding的过滤器,用于防止窗口最小化/恢复过程中的不必要重绘 +// This fixes window flickering when minimizing/restoring frameless windows +// 这修复了无边框窗口在最小化/恢复时的闪烁问题 +// Reference: https://github.com/wailsapp/wails/issues/3951 +func (w *Window) SetPadding(padding edge.Rect) { + // Skip SetPadding if window is being minimized to prevent flickering + // 如果窗口正在最小化,跳过设置padding以防止闪烁 + if w.isMinimizing { + return + } + w.chromium.SetPadding(padding) +} diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index c852352ab..a0e491134 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -27,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed typo by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3846) - Fixed incorrect TS definition of `WindowSetSize` by @leaanthony - chore: fix some comments in [PR](https://github.com/wailsapp/wails/pull/3932) by @lvyaoting +- [windows] Fixed frameless window flickering when minimizing/restoring by preventing unnecessary redraws [#3951](https://github.com/wailsapp/wails/issues/3951) ### Changed From 82fd9de3391dc1719f0d60d4aff265ce88e6dbd2 Mon Sep 17 00:00:00 2001 From: bronya0 Date: Sat, 28 Dec 2024 01:26:27 +0800 Subject: [PATCH 081/344] =?UTF-8?q?Fix=EF=BC=9AAdjust=20the=20first-level?= =?UTF-8?q?=20heading=20to=20fix=20the=20page=20display=20format=20(#3968)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update kafka-king.mdx * Update kafka-king.mdx * Update kafka-king.mdx --- website/docs/community/showcase/kafka-king.mdx | 2 +- .../current/community/showcase/kafka-king.mdx | 2 +- .../current/community/showcase/kafka-king.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/website/docs/community/showcase/kafka-king.mdx b/website/docs/community/showcase/kafka-king.mdx index 544595ba2..0ba78a6ad 100644 --- a/website/docs/community/showcase/kafka-king.mdx +++ b/website/docs/community/showcase/kafka-king.mdx @@ -1,4 +1,4 @@ -# [Kafka-King](https://github.com/Bronya0/Kafka-King) +# Kafka-King ```mdx-code-block

    diff --git a/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx index 7a064ac7b..bdc3c6bea 100644 --- a/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx +++ b/website/i18n/ja/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx @@ -1,4 +1,4 @@ -# [Kafka-King](https://github.com/Bronya0/Kafka-King) +# Kafka-King ```mdx-code-block

    diff --git a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx index 5beee5ef9..b8179b2fc 100644 --- a/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx +++ b/website/i18n/zh-Hans/docusaurus-plugin-content-docs/current/community/showcase/kafka-king.mdx @@ -1,4 +1,4 @@ -# [Kafka-King](https://github.com/Bronya0/Kafka-King) +# Kafka-King ```mdx-code-block

    From 90be707d9c42b64b54c3ce889720dc68e8a7d0c0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 5 Jan 2025 12:34:48 +1100 Subject: [PATCH 082/344] Update Sponsor Image (#3983) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 5b7c29cba..deda6cc79 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -156,50 +156,46 @@ text { Helpers - - - - - + - + - + - + - + - + - + - + - + - + - + From 7566ed4ba6e41f2cd581e06a7c6204e8a71de9dc Mon Sep 17 00:00:00 2001 From: Jeremy Jay Date: Thu, 9 Jan 2025 23:11:13 -0500 Subject: [PATCH 083/344] Do not attempt to export fields that cannot be json-encoded (#3975) * Do not attempt to export fields that cannot be json-encoded * update changelog w/ PR * also skip UnsafePointers --------- Co-authored-by: Lea Anthony --- v2/internal/binding/binding.go | 8 ++++++++ v2/internal/binding/binding_test/binding_notags_test.go | 1 + v2/internal/typescriptify/typescriptify.go | 8 ++++++++ website/src/pages/changelog.mdx | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index b42718bff..b7794876b 100644 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -350,6 +350,14 @@ func (b *Bindings) hasExportedJSONFields(typeOf reflect.Type) bool { for i := 0; i < typeOf.NumField(); i++ { jsonFieldName := "" f := typeOf.Field(i) + // function, complex, and channel types cannot be json-encoded + if f.Type.Kind() == reflect.Chan || + f.Type.Kind() == reflect.Func || + f.Type.Kind() == reflect.UnsafePointer || + f.Type.Kind() == reflect.Complex128 || + f.Type.Kind() == reflect.Complex64 { + continue + } jsonTag, hasTag := f.Tag.Lookup("json") if !hasTag && f.IsExported() { return true diff --git a/v2/internal/binding/binding_test/binding_notags_test.go b/v2/internal/binding/binding_test/binding_notags_test.go index c59a86e1b..d4d9997e0 100644 --- a/v2/internal/binding/binding_test/binding_notags_test.go +++ b/v2/internal/binding/binding_test/binding_notags_test.go @@ -5,6 +5,7 @@ type NoFieldTags struct { Address string Zip *string Spouse *NoFieldTags + NoFunc func() string } func (n NoFieldTags) Get() NoFieldTags { diff --git a/v2/internal/typescriptify/typescriptify.go b/v2/internal/typescriptify/typescriptify.go index 1d22a1b65..f8cb14838 100644 --- a/v2/internal/typescriptify/typescriptify.go +++ b/v2/internal/typescriptify/typescriptify.go @@ -553,6 +553,14 @@ func (t *TypeScriptify) getFieldOptions(structType reflect.Type, field reflect.S func (t *TypeScriptify) getJSONFieldName(field reflect.StructField, isPtr bool) string { jsonFieldName := "" + // function, complex, and channel types cannot be json-encoded + if field.Type.Kind() == reflect.Chan || + field.Type.Kind() == reflect.Func || + field.Type.Kind() == reflect.UnsafePointer || + field.Type.Kind() == reflect.Complex128 || + field.Type.Kind() == reflect.Complex64 { + return "" + } jsonTag, hasTag := field.Tag.Lookup("json") if !hasTag && field.IsExported() { jsonFieldName = field.Name diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index a0e491134..bbe52a84b 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -28,7 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed incorrect TS definition of `WindowSetSize` by @leaanthony - chore: fix some comments in [PR](https://github.com/wailsapp/wails/pull/3932) by @lvyaoting - [windows] Fixed frameless window flickering when minimizing/restoring by preventing unnecessary redraws [#3951](https://github.com/wailsapp/wails/issues/3951) - +- Fixed failed models.ts build due to non-json-encodable Go types [PR](https://github.com/wailsapp/wails/pull/3975) by [@pbnjay](https://github.com/pbnjay) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 67afec3c2a09ef132a98a0193d7671a7899d6e0e Mon Sep 17 00:00:00 2001 From: Akshay Kalose Date: Sat, 11 Jan 2025 05:01:24 +0530 Subject: [PATCH 084/344] Add grpcmd-gui to Community Showcase (#3994) --- website/docs/community/showcase/grpcmd-gui.mdx | 10 ++++++++++ website/static/img/showcase/grpcmd-gui.webp | Bin 0 -> 90980 bytes 2 files changed, 10 insertions(+) create mode 100644 website/docs/community/showcase/grpcmd-gui.mdx create mode 100644 website/static/img/showcase/grpcmd-gui.webp diff --git a/website/docs/community/showcase/grpcmd-gui.mdx b/website/docs/community/showcase/grpcmd-gui.mdx new file mode 100644 index 000000000..891350290 --- /dev/null +++ b/website/docs/community/showcase/grpcmd-gui.mdx @@ -0,0 +1,10 @@ +# grpcmd-gui + +```mdx-code-block +

    + +
    +

    +``` + +[grpcmd-gui](https://grpc.md/gui) is a modern cross-platform desktop app and API client for gRPC development and testing. diff --git a/website/static/img/showcase/grpcmd-gui.webp b/website/static/img/showcase/grpcmd-gui.webp new file mode 100644 index 0000000000000000000000000000000000000000..16ac1542c0973065711321958e5e58f897b26564 GIT binary patch literal 90980 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 BX4Cw6PrNs&0MXt0_Z6e# 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 k00000000000000000000000000000000000000000LM+!^#A|> literal 0 HcmV?d00001 From caf05adff3373e0ef4378c7aeab14fe7f3b4f505 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 11 Jan 2025 14:34:42 +1100 Subject: [PATCH 085/344] Update Sponsor Image (#3998) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index deda6cc79..ef288c451 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -60,7 +60,7 @@ text { Iain - + Andrei From 3a4c3e7a7f1d7f246532ce4e3be5e232c47e8c11 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 11 Jan 2025 14:35:12 +1100 Subject: [PATCH 086/344] Ensure showHiddenFiles works with directory dialog (#3904) * Ensure showHiddenFiles works with directory dialog * Updated docs --- v2/internal/frontend/desktop/darwin/WailsContext.m | 3 +-- website/src/pages/changelog.mdx | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.m b/v2/internal/frontend/desktop/darwin/WailsContext.m index 581a8c138..67f9c2874 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.m +++ b/v2/internal/frontend/desktop/darwin/WailsContext.m @@ -594,9 +594,8 @@ typedef void (^schemeTaskCaller)(id); } [dialog setAllowsMultipleSelection: allowMultipleSelection]; - [dialog setShowsHiddenFiles: showHiddenFiles]; - } + [dialog setShowsHiddenFiles: showHiddenFiles]; // Default Directory if( defaultDirectory != nil ) { diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index bbe52a84b..2e148afb4 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) - Fixed typo by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3846) - Fixed incorrect TS definition of `WindowSetSize` by @leaanthony +- Ensure showHiddenFiles works with directory dialog by @leaanthony in [PR](https://github.com/wailsapp/wails/pull/3904) - chore: fix some comments in [PR](https://github.com/wailsapp/wails/pull/3932) by @lvyaoting - [windows] Fixed frameless window flickering when minimizing/restoring by preventing unnecessary redraws [#3951](https://github.com/wailsapp/wails/issues/3951) - Fixed failed models.ts build due to non-json-encodable Go types [PR](https://github.com/wailsapp/wails/pull/3975) by [@pbnjay](https://github.com/pbnjay) From d6383364ab16501ecabd60ffd83c9504b3a5f443 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:41:27 +1100 Subject: [PATCH 087/344] Update Sponsor Image (#4002) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index ef288c451..3fee97ac4 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -37,7 +37,7 @@ text { Ansar Smagulov - + Daniel Grice From d9b99a990d501fe4b1ae9a102c932090582882bc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 19:04:57 +1100 Subject: [PATCH 088/344] Update Sponsor Image (#4004) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 3fee97ac4..deda6cc79 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -37,7 +37,7 @@ text { Ansar Smagulov - + Daniel Grice @@ -60,7 +60,7 @@ text { Iain - + Andrei From c4fdfd641595a362d98fe10a5e2ebb311da154e4 Mon Sep 17 00:00:00 2001 From: Jeremy Jay Date: Mon, 13 Jan 2025 04:14:54 -0500 Subject: [PATCH 089/344] Fix miscellaneous bindings and typescript export bugs (#3978) * Do not attempt to export fields that cannot be json-encoded * update changelog w/ PR * also skip UnsafePointers * WIP to allow conversion from Go generic types to typescript * support for non-primitive generics also :) * fix generic types in parameters / return args * fixes a namespacing bug when mapping to pointer to struct * fixing invalid knownstructs * found a place it mattered, pushing the star replacement to the generate side * descend as much as necessary to find structs caught these examples in http.Request.TLS: PeerCertificates []*x509.Certificate VerifiedChains [][]*x509.Certificate * accidently reverted other fix * switch syntax for typescript record outputs prior syntax is primarily useful for naming keys so not useful here, and this syntax avoids square brackets in output which greatly simplifies generation for Go generics * better handle edge cases for nested arrays and slices * lots o tests * update changelog --------- Co-authored-by: Lea Anthony --- v2/internal/binding/binding.go | 41 +++-- .../binding_test/binding_deepelements_test.go | 126 ++++++++++++++ .../binding_test/binding_generics_test.go | 154 ++++++++++++++++++ .../binding_test/binding_ignored_test.go | 47 ++++++ .../binding_test/binding_importedmap_test.go | 2 +- .../binding_nonstringmapkey_test.go | 2 +- .../binding/binding_test/binding_test.go | 4 + .../binding_test/binding_type_alias_test.go | 4 +- v2/internal/binding/generate.go | 13 +- v2/internal/binding/generate_test.go | 14 +- v2/internal/binding/reflect.go | 2 +- v2/internal/typescriptify/typescriptify.go | 90 +++++++--- website/src/pages/changelog.mdx | 1 + 13 files changed, 450 insertions(+), 50 deletions(-) create mode 100644 v2/internal/binding/binding_test/binding_deepelements_test.go create mode 100644 v2/internal/binding/binding_test/binding_generics_test.go create mode 100644 v2/internal/binding/binding_test/binding_ignored_test.go diff --git a/v2/internal/binding/binding.go b/v2/internal/binding/binding.go index b7794876b..d2b437f2b 100644 --- a/v2/internal/binding/binding.go +++ b/v2/internal/binding/binding.go @@ -262,22 +262,19 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, // Iterate this struct and add any struct field references structType := reflect.TypeOf(s) - if hasElements(structType) { + for hasElements(structType) { structType = structType.Elem() } for i := 0; i < structType.NumField(); i++ { field := structType.Field(i) - if field.Anonymous { + if field.Anonymous || !field.IsExported() { continue } kind := field.Type.Kind() if kind == reflect.Struct { - if !field.IsExported() { - continue - } fqname := field.Type.String() - sNameSplit := strings.Split(fqname, ".") + sNameSplit := strings.SplitN(fqname, ".", 2) if len(sNameSplit) < 2 { continue } @@ -288,22 +285,24 @@ func (b *Bindings) AddStructToGenerateTS(packageName string, structName string, s := reflect.Indirect(a).Interface() b.AddStructToGenerateTS(pName, sName, s) } - } else if hasElements(field.Type) && field.Type.Elem().Kind() == reflect.Struct { - if !field.IsExported() { - continue + } else { + fType := field.Type + for hasElements(fType) { + fType = fType.Elem() } - fqname := field.Type.Elem().String() - sNameSplit := strings.Split(fqname, ".") - if len(sNameSplit) < 2 { - continue - } - sName := sNameSplit[1] - pName := getPackageName(fqname) - typ := field.Type.Elem() - a := reflect.New(typ) - if b.hasExportedJSONFields(typ) { - s := reflect.Indirect(a).Interface() - b.AddStructToGenerateTS(pName, sName, s) + if fType.Kind() == reflect.Struct { + fqname := fType.String() + sNameSplit := strings.SplitN(fqname, ".", 2) + if len(sNameSplit) < 2 { + continue + } + sName := sNameSplit[1] + pName := getPackageName(fqname) + a := reflect.New(fType) + if b.hasExportedJSONFields(fType) { + s := reflect.Indirect(a).Interface() + b.AddStructToGenerateTS(pName, sName, s) + } } } } diff --git a/v2/internal/binding/binding_test/binding_deepelements_test.go b/v2/internal/binding/binding_test/binding_deepelements_test.go new file mode 100644 index 000000000..488c58f6d --- /dev/null +++ b/v2/internal/binding/binding_test/binding_deepelements_test.go @@ -0,0 +1,126 @@ +package binding_test + +// Issues 2303, 3442, 3709 + +type DeepMessage struct { + Msg string +} + +type DeepElements struct { + Single []int + Double [][]string + FourDouble [4][]float64 + DoubleFour [][4]int64 + Triple [][][]int + + SingleMap map[string]int + SliceMap map[string][]int + DoubleSliceMap map[string][][]int + + ArrayMap map[string][4]int + DoubleArrayMap1 map[string][4][]int + DoubleArrayMap2 map[string][][4]int + DoubleArrayMap3 map[string][4][4]int + + OneStructs []*DeepMessage + TwoStructs [3][]*DeepMessage + ThreeStructs [][][]DeepMessage + MapStructs map[string][]*DeepMessage + MapTwoStructs map[string][4][]DeepMessage + MapThreeStructs map[string][][7][]*DeepMessage +} + +func (x DeepElements) Get() DeepElements { + return x +} + +var DeepElementsTest = BindingTest{ + name: "DeepElements", + structs: []interface{}{ + &DeepElements{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + + export class DeepMessage { + Msg: string; + + static createFrom(source: any = {}) { + return new DeepMessage(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Msg = source["Msg"]; + } + } + export class DeepElements { + Single: number[]; + Double: string[][]; + FourDouble: number[][]; + DoubleFour: number[][]; + Triple: number[][][]; + SingleMap: Record; + SliceMap: Record; + DoubleSliceMap: Record; + ArrayMap: Record; + DoubleArrayMap1: Record; + DoubleArrayMap2: Record; + DoubleArrayMap3: Record; + OneStructs: DeepMessage[]; + TwoStructs: DeepMessage[][]; + ThreeStructs: DeepMessage[][][]; + MapStructs: Record; + MapTwoStructs: Record; + MapThreeStructs: Record; + + static createFrom(source: any = {}) { + return new DeepElements(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Single = source["Single"]; + this.Double = source["Double"]; + this.FourDouble = source["FourDouble"]; + this.DoubleFour = source["DoubleFour"]; + this.Triple = source["Triple"]; + this.SingleMap = source["SingleMap"]; + this.SliceMap = source["SliceMap"]; + this.DoubleSliceMap = source["DoubleSliceMap"]; + this.ArrayMap = source["ArrayMap"]; + this.DoubleArrayMap1 = source["DoubleArrayMap1"]; + this.DoubleArrayMap2 = source["DoubleArrayMap2"]; + this.DoubleArrayMap3 = source["DoubleArrayMap3"]; + this.OneStructs = this.convertValues(source["OneStructs"], DeepMessage); + this.TwoStructs = this.convertValues(source["TwoStructs"], DeepMessage); + this.ThreeStructs = this.convertValues(source["ThreeStructs"], DeepMessage); + this.MapStructs = this.convertValues(source["MapStructs"], DeepMessage[], true); + this.MapTwoStructs = this.convertValues(source["MapTwoStructs"], DeepMessage[][], true); + this.MapThreeStructs = this.convertValues(source["MapThreeStructs"], DeepMessage[][][], true); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice && a.map) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } + + } +`, +} diff --git a/v2/internal/binding/binding_test/binding_generics_test.go b/v2/internal/binding/binding_test/binding_generics_test.go new file mode 100644 index 000000000..920bd2a7a --- /dev/null +++ b/v2/internal/binding/binding_test/binding_generics_test.go @@ -0,0 +1,154 @@ +package binding_test + +import "github.com/wailsapp/wails/v2/internal/binding/binding_test/binding_test_import/float_package" + +// Issues 3900, 3371, 2323 (no TS generics though) + +type ListData[T interface{}] struct { + Total int64 `json:"Total"` + TotalPage int64 `json:"TotalPage"` + PageNum int `json:"PageNum"` + List []T `json:"List,omitempty"` +} + +func (x ListData[T]) Get() ListData[T] { + return x +} + +var Generics1Test = BindingTest{ + name: "Generics1", + structs: []interface{}{ + &ListData[string]{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + + export class ListData_string_ { + Total: number; + TotalPage: number; + PageNum: number; + List?: string[]; + + static createFrom(source: any = {}) { + return new ListData_string_(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Total = source["Total"]; + this.TotalPage = source["TotalPage"]; + this.PageNum = source["PageNum"]; + this.List = source["List"]; + } + } + + } +`, +} + +var Generics2Test = BindingTest{ + name: "Generics2", + structs: []interface{}{ + &ListData[float_package.SomeStruct]{}, + &ListData[*float_package.SomeStruct]{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + + export class ListData__github_com_wailsapp_wails_v2_internal_binding_binding_test_binding_test_import_float_package_SomeStruct_ { + Total: number; + TotalPage: number; + PageNum: number; + List?: float_package.SomeStruct[]; + + static createFrom(source: any = {}) { + return new ListData__github_com_wailsapp_wails_v2_internal_binding_binding_test_binding_test_import_float_package_SomeStruct_(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Total = source["Total"]; + this.TotalPage = source["TotalPage"]; + this.PageNum = source["PageNum"]; + this.List = this.convertValues(source["List"], float_package.SomeStruct); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice && a.map) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } + export class ListData_github_com_wailsapp_wails_v2_internal_binding_binding_test_binding_test_import_float_package_SomeStruct_ { + Total: number; + TotalPage: number; + PageNum: number; + List?: float_package.SomeStruct[]; + + static createFrom(source: any = {}) { + return new ListData_github_com_wailsapp_wails_v2_internal_binding_binding_test_binding_test_import_float_package_SomeStruct_(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Total = source["Total"]; + this.TotalPage = source["TotalPage"]; + this.PageNum = source["PageNum"]; + this.List = this.convertValues(source["List"], float_package.SomeStruct); + } + + convertValues(a: any, classs: any, asMap: boolean = false): any { + if (!a) { + return a; + } + if (a.slice && a.map) { + return (a as any[]).map(elem => this.convertValues(elem, classs)); + } else if ("object" === typeof a) { + if (asMap) { + for (const key of Object.keys(a)) { + a[key] = new classs(a[key]); + } + return a; + } + return new classs(a); + } + return a; + } + } + + } + + export namespace float_package { + + export class SomeStruct { + string: string; + + static createFrom(source: any = {}) { + return new SomeStruct(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.string = source["string"]; + } + } + + } +`, +} diff --git a/v2/internal/binding/binding_test/binding_ignored_test.go b/v2/internal/binding/binding_test/binding_ignored_test.go new file mode 100644 index 000000000..aeb6a9c3f --- /dev/null +++ b/v2/internal/binding/binding_test/binding_ignored_test.go @@ -0,0 +1,47 @@ +package binding_test + +import ( + "unsafe" +) + +// Issues 3755, 3809 + +type Ignored struct { + Valid bool + Total func() int `json:"Total"` + UnsafeP unsafe.Pointer + Complex64 complex64 `json:"Complex"` + Complex128 complex128 + StringChan chan string +} + +func (x Ignored) Get() Ignored { + return x +} + +var IgnoredTest = BindingTest{ + name: "Ignored", + structs: []interface{}{ + &Ignored{}, + }, + exemptions: nil, + shouldError: false, + want: ` +export namespace binding_test { + + export class Ignored { + Valid: boolean; + + static createFrom(source: any = {}) { + return new Ignored(source); + } + + constructor(source: any = {}) { + if ('string' === typeof source) source = JSON.parse(source); + this.Valid = source["Valid"]; + } + } + + } +`, +} diff --git a/v2/internal/binding/binding_test/binding_importedmap_test.go b/v2/internal/binding/binding_test/binding_importedmap_test.go index 7fa11d54b..4a4b2996c 100644 --- a/v2/internal/binding/binding_test/binding_importedmap_test.go +++ b/v2/internal/binding/binding_test/binding_importedmap_test.go @@ -50,7 +50,7 @@ export namespace binding_test { export namespace binding_test_import { export class AMapWrapper { - AMap: {[key: string]: binding_test_nestedimport.A}; + AMap: Record; static createFrom(source: any = {}) { return new AMapWrapper(source); } diff --git a/v2/internal/binding/binding_test/binding_nonstringmapkey_test.go b/v2/internal/binding/binding_test/binding_nonstringmapkey_test.go index 37a61dd29..9efee710f 100644 --- a/v2/internal/binding/binding_test/binding_nonstringmapkey_test.go +++ b/v2/internal/binding/binding_test/binding_nonstringmapkey_test.go @@ -18,7 +18,7 @@ var NonStringMapKeyTest = BindingTest{ want: ` export namespace binding_test { export class NonStringMapKey { - numberMap: {[key: number]: any}; + numberMap: Record; static createFrom(source: any = {}) { return new NonStringMapKey(source); } diff --git a/v2/internal/binding/binding_test/binding_test.go b/v2/internal/binding/binding_test/binding_test.go index 32ebbe056..d358d8b0f 100644 --- a/v2/internal/binding/binding_test/binding_test.go +++ b/v2/internal/binding/binding_test/binding_test.go @@ -51,6 +51,10 @@ func TestBindings_GenerateModels(t *testing.T) { SpecialCharacterFieldTest, WithoutFieldsTest, NoFieldTagsTest, + Generics1Test, + Generics2Test, + IgnoredTest, + DeepElementsTest, } testLogger := &logger.Logger{} diff --git a/v2/internal/binding/binding_test/binding_type_alias_test.go b/v2/internal/binding/binding_test/binding_type_alias_test.go index 498c5976c..90b009c5f 100644 --- a/v2/internal/binding/binding_test/binding_type_alias_test.go +++ b/v2/internal/binding/binding_test/binding_type_alias_test.go @@ -15,11 +15,11 @@ const expectedTypeAliasBindings = `// Cynhyrchwyd y ffeil hon yn awtomatig. PEID import {binding_test} from '../models'; import {int_package} from '../models'; -export function Map():Promise<{[key: string]: string}>; +export function Map():Promise>; export function MapAlias():Promise; -export function MapWithImportedStructValue():Promise<{[key: string]: int_package.SomeStruct}>; +export function MapWithImportedStructValue():Promise>; export function Slice():Promise>; diff --git a/v2/internal/binding/generate.go b/v2/internal/binding/generate.go index 02a0bd292..77edc983d 100644 --- a/v2/internal/binding/generate.go +++ b/v2/internal/binding/generate.go @@ -171,7 +171,18 @@ func fullyQualifiedName(packageName string, typeName string) string { } } +var ( + jsVariableUnsafeChars = regexp.MustCompile(`[^A-Za-z0-9_]`) +) + func arrayifyValue(valueArray string, valueType string) string { + valueType = strings.ReplaceAll(valueType, "*", "") + gidx := strings.IndexRune(valueType, '[') + if gidx > 0 { // its a generic type + rem := strings.SplitN(valueType, "[", 2) + valueType = rem[0] + "_" + jsVariableUnsafeChars.ReplaceAllLiteralString(rem[1], "_") + } + if len(valueArray) == 0 { return valueType } @@ -217,7 +228,7 @@ func goTypeToJSDocType(input string, importNamespaces *slicer.StringSlicer) stri } if len(key) > 0 { - return fmt.Sprintf("{[key: %s]: %s}", key, arrayifyValue(valueArray, value)) + return fmt.Sprintf("Record<%s, %s>", key, arrayifyValue(valueArray, value)) } return arrayifyValue(valueArray, value) diff --git a/v2/internal/binding/generate_test.go b/v2/internal/binding/generate_test.go index 8d6a833b8..26d7c70df 100644 --- a/v2/internal/binding/generate_test.go +++ b/v2/internal/binding/generate_test.go @@ -116,18 +116,28 @@ func Test_goTypeToJSDocType(t *testing.T) { { name: "map", input: "map[string]float64", - want: "{[key: string]: number}", + want: "Record", }, { name: "map", input: "map[string]map[string]float64", - want: "{[key: string]: {[key: string]: number}}", + want: "Record>", }, { name: "types", input: "main.SomeType", want: "main.SomeType", }, + { + name: "primitive_generic", + input: "main.ListData[string]", + want: "main.ListData_string_", + }, + { + name: "stdlib_generic", + input: "main.ListData[*net/http.Request]", + want: "main.ListData_net_http_Request_", + }, } var importNamespaces slicer.StringSlicer for _, tt := range tests { diff --git a/v2/internal/binding/reflect.go b/v2/internal/binding/reflect.go index 57a6335bd..d293a743a 100644 --- a/v2/internal/binding/reflect.go +++ b/v2/internal/binding/reflect.go @@ -166,7 +166,7 @@ func getPackageName(in string) string { } func getSplitReturn(in string) (string, string) { - result := strings.Split(in, ".") + result := strings.SplitN(in, ".", 2) return result[0], result[1] } diff --git a/v2/internal/typescriptify/typescriptify.go b/v2/internal/typescriptify/typescriptify.go index f8cb14838..95376b2f4 100644 --- a/v2/internal/typescriptify/typescriptify.go +++ b/v2/internal/typescriptify/typescriptify.go @@ -40,6 +40,20 @@ const ( jsVariableNameRegex = `^([A-Z]|[a-z]|\$|_)([A-Z]|[a-z]|[0-9]|\$|_)*$` ) +var ( + jsVariableUnsafeChars = regexp.MustCompile(`[^A-Za-z0-9_]`) +) + +func nameTypeOf(typeOf reflect.Type) string { + tname := typeOf.Name() + gidx := strings.IndexRune(tname, '[') + if gidx > 0 { // its a generic type + rem := strings.SplitN(tname, "[", 2) + tname = rem[0] + "_" + jsVariableUnsafeChars.ReplaceAllLiteralString(rem[1], "_") + } + return tname +} + // TypeOptions overrides options set by `ts_*` tags. type TypeOptions struct { TSType string @@ -261,15 +275,32 @@ func (t *TypeScriptify) AddType(typeOf reflect.Type) *TypeScriptify { func (t *typeScriptClassBuilder) AddMapField(fieldName string, field reflect.StructField) { keyType := field.Type.Key() valueType := field.Type.Elem() - valueTypeName := valueType.Name() + valueTypeName := nameTypeOf(valueType) + valueTypeSuffix := "" + if valueType.Kind() == reflect.Ptr { + valueType = valueType.Elem() + valueTypeName = nameTypeOf(valueType) + } + if valueType.Kind() == reflect.Array || valueType.Kind() == reflect.Slice { + arrayDepth := 1 + for valueType.Elem().Kind() == reflect.Array || valueType.Elem().Kind() == reflect.Slice { + valueType = valueType.Elem() + arrayDepth++ + } + valueType = valueType.Elem() + valueTypeName = nameTypeOf(valueType) + valueTypeSuffix = strings.Repeat("[]", arrayDepth) + } + if valueType.Kind() == reflect.Ptr { + valueType = valueType.Elem() + valueTypeName = nameTypeOf(valueType) + } if name, ok := t.types[valueType.Kind()]; ok { valueTypeName = name } - if valueType.Kind() == reflect.Array || valueType.Kind() == reflect.Slice { - valueTypeName = valueType.Elem().Name() + "[]" - } - if valueType.Kind() == reflect.Ptr { - valueTypeName = valueType.Elem().Name() + if valueType.Kind() == reflect.Map { + // TODO: support nested maps + valueTypeName = "any" // valueType.Elem().Name() } if valueType.Kind() == reflect.Struct && differentNamespaces(t.namespace, valueType) { valueTypeName = valueType.String() @@ -294,11 +325,13 @@ func (t *typeScriptClassBuilder) AddMapField(fieldName string, field reflect.Str fieldName = fmt.Sprintf(`"%s"?`, strippedFieldName) } } - t.fields = append(t.fields, fmt.Sprintf("%s%s: {[key: %s]: %s};", t.indent, fieldName, keyTypeStr, valueTypeName)) + t.fields = append(t.fields, fmt.Sprintf("%s%s: Record<%s, %s>;", t.indent, fieldName, keyTypeStr, valueTypeName+valueTypeSuffix)) if valueType.Kind() == reflect.Struct { - t.constructorBody = append(t.constructorBody, fmt.Sprintf("%s%sthis%s = this.convertValues(source[\"%s\"], %s, true);", t.indent, t.indent, dotField, strippedFieldName, t.prefix+valueTypeName+t.suffix)) + t.constructorBody = append(t.constructorBody, fmt.Sprintf("%s%sthis%s = this.convertValues(source[\"%s\"], %s, true);", + t.indent, t.indent, dotField, strippedFieldName, t.prefix+valueTypeName+valueTypeSuffix+t.suffix)) } else { - t.constructorBody = append(t.constructorBody, fmt.Sprintf("%s%sthis%s = source[\"%s\"];", t.indent, t.indent, dotField, strippedFieldName)) + t.constructorBody = append(t.constructorBody, fmt.Sprintf("%s%sthis%s = source[\"%s\"];", + t.indent, t.indent, dotField, strippedFieldName)) } } @@ -501,7 +534,7 @@ func (t *TypeScriptify) convertEnum(depth int, typeOf reflect.Type, elements []e } t.alreadyConverted[typeOf.String()] = true - entityName := t.Prefix + typeOf.Name() + t.Suffix + entityName := t.Prefix + nameTypeOf(typeOf) + t.Suffix result := "enum " + entityName + " {\n" for _, val := range elements { @@ -607,7 +640,7 @@ func (t *TypeScriptify) convertType(depth int, typeOf reflect.Type, customCode m t.alreadyConverted[typeOf.String()] = true - entityName := t.Prefix + typeOf.Name() + t.Suffix + entityName := t.Prefix + nameTypeOf(typeOf) + t.Suffix if typeClashWithReservedKeyword(entityName) { warnAboutTypesClash(entityName) @@ -667,8 +700,10 @@ func (t *TypeScriptify) convertType(depth int, typeOf reflect.Type, customCode m } isKnownType := t.KnownStructs.Contains(getStructFQN(field.Type.String())) - println("KnownStructs:", t.KnownStructs.Join("\t")) - println(getStructFQN(field.Type.String())) + if !isKnownType { + println("KnownStructs:", t.KnownStructs.Join("\t")) + println("Not found:", getStructFQN(field.Type.String())) + } builder.AddStructField(jsonFieldName, field, !isKnownType) } else if field.Type.Kind() == reflect.Map { t.logf(depth, "- map field %s.%s", typeOf.Name(), field.Name) @@ -714,11 +749,15 @@ func (t *TypeScriptify) convertType(depth int, typeOf reflect.Type, customCode m } arrayDepth := 1 - for field.Type.Elem().Kind() == reflect.Slice { // Slice of slices: + for field.Type.Elem().Kind() == reflect.Slice || field.Type.Elem().Kind() == reflect.Array { // Slice of slices: field.Type = field.Type.Elem() arrayDepth++ } + if field.Type.Elem().Kind() == reflect.Ptr { // extract ptr type + field.Type = field.Type.Elem() + } + if field.Type.Elem().Kind() == reflect.Struct { // Slice of structs: t.logf(depth, "- struct slice %s.%s (%s)", typeOf.Name(), field.Name, field.Type.String()) typeScriptChunk, err := t.convertType(depth+1, field.Type.Elem(), customCode) @@ -808,8 +847,12 @@ type typeScriptClassBuilder struct { } func (t *typeScriptClassBuilder) AddSimpleArrayField(fieldName string, field reflect.StructField, arrayDepth int, opts TypeOptions) error { - fieldType, kind := field.Type.Elem().Name(), field.Type.Elem().Kind() - typeScriptType := t.types[kind] + fieldType := nameTypeOf(field.Type.Elem()) + kind := field.Type.Elem().Kind() + typeScriptType, ok := t.types[kind] + if !ok { + typeScriptType = "any" + } if len(fieldName) > 0 { strippedFieldName := strings.ReplaceAll(fieldName, "?", "") @@ -828,9 +871,14 @@ func (t *typeScriptClassBuilder) AddSimpleArrayField(fieldName string, field ref } func (t *typeScriptClassBuilder) AddSimpleField(fieldName string, field reflect.StructField, opts TypeOptions) error { - fieldType, kind := field.Type.Name(), field.Type.Kind() + fieldType := nameTypeOf(field.Type) + kind := field.Type.Kind() + + typeScriptType, ok := t.types[kind] + if !ok { + typeScriptType = "any" + } - typeScriptType := t.types[kind] if len(opts.TSType) > 0 { typeScriptType = opts.TSType } @@ -852,7 +900,7 @@ func (t *typeScriptClassBuilder) AddSimpleField(fieldName string, field reflect. } func (t *typeScriptClassBuilder) AddEnumField(fieldName string, field reflect.StructField) { - fieldType := field.Type.Name() + fieldType := nameTypeOf(field.Type) t.addField(fieldName, t.prefix+fieldType+t.suffix, false) strippedFieldName := strings.ReplaceAll(fieldName, "?", "") t.addInitializerFieldLine(strippedFieldName, fmt.Sprintf("source[\"%s\"]", strippedFieldName)) @@ -862,7 +910,7 @@ func (t *typeScriptClassBuilder) AddStructField(fieldName string, field reflect. strippedFieldName := strings.ReplaceAll(fieldName, "?", "") classname := "null" namespace := strings.Split(field.Type.String(), ".")[0] - fqname := t.prefix + field.Type.Name() + t.suffix + fqname := t.prefix + nameTypeOf(field.Type) + t.suffix if namespace != t.namespace { fqname = namespace + "." + fqname } @@ -881,7 +929,7 @@ func (t *typeScriptClassBuilder) AddStructField(fieldName string, field reflect. } func (t *typeScriptClassBuilder) AddArrayOfStructsField(fieldName string, field reflect.StructField, arrayDepth int) { - fieldType := field.Type.Elem().Name() + fieldType := nameTypeOf(field.Type.Elem()) if differentNamespaces(t.namespace, field.Type.Elem()) { fieldType = field.Type.Elem().String() } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 2e148afb4..9ba4eb43d 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - chore: fix some comments in [PR](https://github.com/wailsapp/wails/pull/3932) by @lvyaoting - [windows] Fixed frameless window flickering when minimizing/restoring by preventing unnecessary redraws [#3951](https://github.com/wailsapp/wails/issues/3951) - Fixed failed models.ts build due to non-json-encodable Go types [PR](https://github.com/wailsapp/wails/pull/3975) by [@pbnjay](https://github.com/pbnjay) +- Fixed more binding and typescript export bugs [PR](https://github.com/wailsapp/wails/pull/3978) by [@pbnjay](https://github.com/pbnjay) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 4598af4d7a48eb7ec98e1227a4c36949eaf2cbd3 Mon Sep 17 00:00:00 2001 From: ronaldinho_x86 Date: Fri, 17 Jan 2025 13:45:54 +0800 Subject: [PATCH 090/344] recover from process message instead crash the whole app (#4016) * recover from process message instead crash the whole app * update changelog.mdx (#4015) --- v2/internal/frontend/dispatcher/dispatcher.go | 16 +++++++++++++++- website/src/pages/changelog.mdx | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/v2/internal/frontend/dispatcher/dispatcher.go b/v2/internal/frontend/dispatcher/dispatcher.go index 97d9b32e9..60a99f467 100644 --- a/v2/internal/frontend/dispatcher/dispatcher.go +++ b/v2/internal/frontend/dispatcher/dispatcher.go @@ -2,6 +2,7 @@ package dispatcher import ( "context" + "fmt" "github.com/pkg/errors" "github.com/wailsapp/wails/v2/internal/binding" "github.com/wailsapp/wails/v2/internal/frontend" @@ -29,7 +30,20 @@ func NewDispatcher(ctx context.Context, log *logger.Logger, bindings *binding.Bi } } -func (d *Dispatcher) ProcessMessage(message string, sender frontend.Frontend) (string, error) { +func (d *Dispatcher) ProcessMessage(message string, sender frontend.Frontend) (_ string, err error) { + defer func() { + if e := recover(); e != nil { + if errPanic, ok := e.(error); ok { + err = errPanic + } else { + err = fmt.Errorf("%v", e) + } + } + if err != nil { + d.log.Error("process message error: %s -> %s", message, err) + } + }() + if message == "" { return "", errors.New("No message to process") } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 9ba4eb43d..ee9f029f3 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -31,6 +31,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [windows] Fixed frameless window flickering when minimizing/restoring by preventing unnecessary redraws [#3951](https://github.com/wailsapp/wails/issues/3951) - Fixed failed models.ts build due to non-json-encodable Go types [PR](https://github.com/wailsapp/wails/pull/3975) by [@pbnjay](https://github.com/pbnjay) - Fixed more binding and typescript export bugs [PR](https://github.com/wailsapp/wails/pull/3978) by [@pbnjay](https://github.com/pbnjay) +- Fixed Dispatcher.ProcessMessage crash process instead of return error [PR](https://github.com/wailsapp/wails/pull/4016) [#4015](https://github.com/wailsapp/wails/issues/4015) by [@ronaldinho_x86](https://github.com/RonaldinhoL) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 51c7453bd228aa77d04f5bb30e9eea53fa5ad8c0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 18:58:52 +1100 Subject: [PATCH 091/344] Update Sponsor Image (#4018) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index deda6cc79..be891bad3 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -17,8 +17,12 @@ text { } Silver Sponsors - Webtize - + Webtize + + + + Orb + Bronze Sponsors Cody Bentley @@ -60,7 +64,7 @@ text { Iain - + Andrei @@ -102,7 +106,7 @@ text { - + From 481c145cd33d05736058a547f42f78a1bb42e7a7 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Mon, 20 Jan 2025 21:51:11 +1100 Subject: [PATCH 092/344] Update deps --- v2/go.mod | 48 ++++++++++--------- v2/go.sum | 140 +++++++++++++++++++++--------------------------------- 2 files changed, 80 insertions(+), 108 deletions(-) diff --git a/v2/go.mod b/v2/go.mod index 6787e8082..649dcf2bf 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -1,6 +1,8 @@ module github.com/wailsapp/wails/v2 -go 1.21 +go 1.22.0 + +toolchain go1.23.4 require ( github.com/Masterminds/semver v1.5.0 @@ -10,7 +12,7 @@ require ( github.com/charmbracelet/glamour v0.5.0 github.com/flytam/filenamify v1.0.0 github.com/fsnotify/fsnotify v1.4.9 - github.com/go-git/go-git/v5 v5.11.0 + github.com/go-git/go-git/v5 v5.13.1 github.com/go-ole/go-ole v1.2.6 github.com/godbus/dbus/v5 v5.1.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 @@ -32,39 +34,39 @@ require ( github.com/pterm/pterm v0.12.49 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 github.com/samber/lo v1.38.1 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/tc-hib/winres v0.2.1 github.com/tidwall/sjson v1.1.7 github.com/tkrajina/go-reflector v0.5.6 github.com/wailsapp/go-webview2 v1.0.18 github.com/wailsapp/mimetype v1.4.1 github.com/wzshiming/ctc v1.2.3 - golang.org/x/mod v0.14.0 - golang.org/x/net v0.25.0 - golang.org/x/sys v0.27.0 - golang.org/x/tools v0.17.0 + golang.org/x/mod v0.22.0 + golang.org/x/net v0.34.0 + golang.org/x/sys v0.29.0 + golang.org/x/tools v0.29.0 ) require ( atomicgo.dev/cursor v0.1.1 // indirect atomicgo.dev/keyboard v0.2.8 // indirect bitbucket.org/creachadair/shell v0.0.7 // indirect - dario.cat/mergo v1.0.0 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + dario.cat/mergo v1.0.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProtonMail/go-crypto v1.1.5 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/alecthomas/chroma v0.10.0 // indirect github.com/aymerick/douceur v0.2.0 // indirect - github.com/cloudflare/circl v1.3.7 // indirect + github.com/cloudflare/circl v1.5.0 // indirect github.com/containerd/console v1.0.3 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/cyphar/filepath-securejoin v0.4.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dlclark/regexp2 v1.4.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/go-git/go-billy/v5 v5.6.2 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/gookit/color v1.5.2 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/jaypipes/pcidb v1.0.0 // indirect @@ -78,15 +80,16 @@ require ( github.com/mattn/go-runewidth v0.0.13 // indirect github.com/microcosm-cc/bluemonday v1.0.17 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mmcloughlin/avo v0.6.0 // indirect github.com/muesli/reflow v0.3.0 // indirect github.com/muesli/termenv v0.9.0 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pjbgf/sha1cd v0.3.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/sergi/go-diff v1.2.0 // indirect - github.com/skeema/knownhosts v1.2.1 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect + github.com/skeema/knownhosts v1.3.0 // indirect github.com/tidwall/gjson v1.9.3 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect @@ -97,11 +100,12 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect github.com/yuin/goldmark v1.4.13 // indirect github.com/yuin/goldmark-emoji v1.0.1 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect - golang.org/x/image v0.12.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/crypto v0.32.0 // indirect + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/image v0.23.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/v2/go.sum b/v2/go.sum index 786066821..83ec8568e 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -4,8 +4,8 @@ atomicgo.dev/keyboard v0.2.8 h1:Di09BitwZgdTV1hPyX/b9Cqxi8HVuJQwWivnZUEqlj4= atomicgo.dev/keyboard v0.2.8/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= bitbucket.org/creachadair/shell v0.0.7 h1:Z96pB6DkSb7F3Y3BBnJeOZH2gazyMTWlvecSD4vDqfk= bitbucket.org/creachadair/shell v0.0.7/go.mod h1:oqtXSSvSYr4624lnnabXHaBsYW6RD80caLi2b3hJk0U= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs= github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8= github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII= @@ -18,10 +18,10 @@ github.com/MarvinJWendt/testza v0.4.3/go.mod h1:CpXaOfceNEYnLDtNIyTrPPcCpDJYqzZn github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4= +github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= @@ -39,23 +39,21 @@ github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= github.com/bitfield/script v0.19.0 h1:W24f+FQuPab9gXcW8bhcbo5qO8AtrXyu3XOnR4zhHN0= github.com/bitfield/script v0.19.0/go.mod h1:ana6F8YOSZ3ImT8SauIzuYSqXgFVkSUJ6kgja+WMmIY= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/charmbracelet/glamour v0.5.0 h1:wu15ykPdB7X6chxugG/NNfDUbyyrCLV9XBalj5wdu3g= github.com/charmbracelet/glamour v0.5.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= -github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= +github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= +github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.4.0 h1:PioTG9TBRSApBpYGnDU8HC+miIsX8vitBH9LGNNMoLQ= +github.com/cyphar/filepath-securejoin v0.4.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= +github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/flytam/filenamify v1.0.0 h1:ewx6BY2dj7U6h2zGPJmt33q/BjkSf/YsY/woQvnUNIs= @@ -64,23 +62,23 @@ github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= +github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= +github.com/go-git/go-git/v5 v5.13.1 h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M= +github.com/go-git/go-git/v5 v5.13.1/go.mod h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -162,6 +160,8 @@ github.com/microcosm-cc/bluemonday v1.0.17 h1:Z1a//hgsQ4yjC+8zEkV8IWySkXnsxmdSY6 github.com/microcosm-cc/bluemonday v1.0.17/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mmcloughlin/avo v0.6.0 h1:QH6FU8SKoTLaVs80GA8TJuLNkUYl4VokHKlPhVDg4YY= +github.com/mmcloughlin/avo v0.6.0/go.mod h1:8CoAGaCSYXtCPR+8y18Y9aB/kxb8JSS6FRI7mSkvD+8= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.9.0 h1:wnbOaGz+LUR3jNT0zOzinPnyDaCZUQRZj9GxK8eRVl8= @@ -170,10 +170,10 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/pjbgf/sha1cd v0.3.1 h1:Dh2GYdpJnO84lIw0LJwTFXjcNbasP/bklicSznyAaPI= +github.com/pjbgf/sha1cd v0.3.1/go.mod h1:Y8t7jSB/dEI/lQE04A1HVKteqjj9bX5O4+Cex0TCu8s= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -193,17 +193,18 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= +github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= +github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -212,8 +213,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= @@ -252,39 +253,23 @@ github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= -golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= +golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -302,42 +287,25 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 2aea5e2daeeb51351a2bd06863909277435ba8e0 Mon Sep 17 00:00:00 2001 From: Ronen Lapushner Date: Tue, 21 Jan 2025 21:15:24 +0200 Subject: [PATCH 093/344] Added initial Windows 11-supporting branding --- v2/internal/system/operatingsystem/os.go | 7 ++-- .../system/operatingsystem/os_windows.go | 35 +++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/v2/internal/system/operatingsystem/os.go b/v2/internal/system/operatingsystem/os.go index 39f1de8e0..028a97b2e 100644 --- a/v2/internal/system/operatingsystem/os.go +++ b/v2/internal/system/operatingsystem/os.go @@ -2,9 +2,10 @@ package operatingsystem // OS contains information about the operating system type OS struct { - ID string - Name string - Version string + ID string + Name string + Version string + Branding string } // Info retrieves information about the current platform diff --git a/v2/internal/system/operatingsystem/os_windows.go b/v2/internal/system/operatingsystem/os_windows.go index 38ea43a12..a9aa05a92 100644 --- a/v2/internal/system/operatingsystem/os_windows.go +++ b/v2/internal/system/operatingsystem/os_windows.go @@ -4,10 +4,44 @@ package operatingsystem import ( "fmt" + "strings" + "syscall" + "unsafe" + "golang.org/x/sys/windows" "golang.org/x/sys/windows/registry" ) +func stripNulls(str string) string { + // Split the string into substrings at each null character + substrings := strings.Split(str, "\x00") + + // Join the substrings back into a single string + strippedStr := strings.Join(substrings, "") + + return strippedStr +} + +func mustStringToUTF16Ptr(input string) *uint16 { + input = stripNulls(input) + result, err := syscall.UTF16PtrFromString(input) + if err != nil { + panic(err) + } + return result +} + +func getBranding() string { + var modBranding = syscall.NewLazyDLL("winbrand.dll") + var brandingFormatString = modBranding.NewProc("BrandingFormatString") + + windowsLong := mustStringToUTF16Ptr("%WINDOWS_LONG%\x00") + ret, _, _ := brandingFormatString.Call( + uintptr(unsafe.Pointer(windowsLong)), + ) + return windows.UTF16PtrToString((*uint16)(unsafe.Pointer(ret))) +} + func platformInfo() (*OS, error) { // Default value var result OS @@ -27,6 +61,7 @@ func platformInfo() (*OS, error) { result.Name = productName result.Version = fmt.Sprintf("%s (Build: %s)", releaseId, currentBuild) result.ID = displayVersion + result.Branding = getBranding() return &result, key.Close() } From f82c971cb0016b4c9efdd678aac10fb105e6382e Mon Sep 17 00:00:00 2001 From: Ronen Lapushner Date: Tue, 21 Jan 2025 21:18:10 +0200 Subject: [PATCH 094/344] Added "Branding" to doctor --- v2/cmd/wails/doctor.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/v2/cmd/wails/doctor.go b/v2/cmd/wails/doctor.go index 5306cab17..eac5048b3 100644 --- a/v2/cmd/wails/doctor.go +++ b/v2/cmd/wails/doctor.go @@ -2,12 +2,13 @@ package main import ( "fmt" - "github.com/wailsapp/wails/v2/internal/shell" "runtime" "runtime/debug" "strconv" "strings" + "github.com/wailsapp/wails/v2/internal/shell" + "github.com/pterm/pterm" "github.com/jaypipes/ghw" @@ -78,6 +79,7 @@ func diagnoseEnvironment(f *flags.Doctor) error { {pterm.Bold.Sprint("OS"), info.OS.Name}, {pterm.Bold.Sprint("Version"), info.OS.Version}, {pterm.Bold.Sprint("ID"), info.OS.ID}, + {pterm.Bold.Sprint("Branding"), info.OS.Branding}, {pterm.Bold.Sprint("Go Version"), runtime.Version()}, {pterm.Bold.Sprint("Platform"), runtime.GOOS}, {pterm.Bold.Sprint("Architecture"), runtime.GOARCH}, From 55b90a50bcf0ae8fc6e099d20512171bf7605a8d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:59:02 +1100 Subject: [PATCH 095/344] Update Sponsor Image (#4022) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index be891bad3..1a5ace6f6 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -41,7 +41,7 @@ text { Ansar Smagulov - + Daniel Grice @@ -192,7 +192,7 @@ text { - + From 00be6f24d2d338ec842f71586b764707edcced6a Mon Sep 17 00:00:00 2001 From: Atterpac <89053530+atterpac@users.noreply.github.com> Date: Thu, 23 Jan 2025 04:11:29 -0700 Subject: [PATCH 096/344] [v2] Fix reloaddirs wails.json config (#4005) fix reloaddirs config option changelog.mdx --- v2/cmd/wails/internal/dev/dev.go | 6 +++--- v2/cmd/wails/internal/dev/watcher.go | 15 +++++++++++++-- website/src/pages/changelog.mdx | 1 + 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/v2/cmd/wails/internal/dev/dev.go b/v2/cmd/wails/internal/dev/dev.go index 2f6b10a73..5cb62421b 100644 --- a/v2/cmd/wails/internal/dev/dev.go +++ b/v2/cmd/wails/internal/dev/dev.go @@ -153,7 +153,7 @@ func Application(f *flags.Dev, logger *clilogger.CLILogger) error { }() // Watch for changes and trigger restartApp() - debugBinaryProcess, err = doWatcherLoop(cwd, buildOptions, debugBinaryProcess, f, exitCodeChannel, quitChannel, f.DevServerURL(), legacyUseDevServerInsteadofCustomScheme) + debugBinaryProcess, err = doWatcherLoop(cwd, projectConfig.ReloadDirectories, buildOptions, debugBinaryProcess, f, exitCodeChannel, quitChannel, f.DevServerURL(), legacyUseDevServerInsteadofCustomScheme) if err != nil { return err } @@ -326,9 +326,9 @@ func restartApp(buildOptions *build.Options, debugBinaryProcess *process.Process } // doWatcherLoop is the main watch loop that runs while dev is active -func doWatcherLoop(cwd string, buildOptions *build.Options, debugBinaryProcess *process.Process, f *flags.Dev, exitCodeChannel chan int, quitChannel chan os.Signal, devServerURL *url.URL, legacyUseDevServerInsteadofCustomScheme bool) (*process.Process, error) { +func doWatcherLoop(cwd string, reloadDirs string, buildOptions *build.Options, debugBinaryProcess *process.Process, f *flags.Dev, exitCodeChannel chan int, quitChannel chan os.Signal, devServerURL *url.URL, legacyUseDevServerInsteadofCustomScheme bool) (*process.Process, error) { // create the project files watcher - watcher, err := initialiseWatcher(cwd) + watcher, err := initialiseWatcher(cwd, reloadDirs) if err != nil { logutils.LogRed("Unable to create filesystem watcher. Reloads will not occur.") return nil, err diff --git a/v2/cmd/wails/internal/dev/watcher.go b/v2/cmd/wails/internal/dev/watcher.go index 4e7457ef9..e1161f87c 100644 --- a/v2/cmd/wails/internal/dev/watcher.go +++ b/v2/cmd/wails/internal/dev/watcher.go @@ -4,6 +4,7 @@ import ( "bufio" "os" "path/filepath" + "strings" "github.com/wailsapp/wails/v2/internal/fs" @@ -17,7 +18,7 @@ type Watcher interface { } // initialiseWatcher creates the project directory watcher that will trigger recompile -func initialiseWatcher(cwd string) (*fsnotify.Watcher, error) { +func initialiseWatcher(cwd, reloadDirs string) (*fsnotify.Watcher, error) { // Ignore dot files, node_modules and build directories by default ignoreDirs := getIgnoreDirs(cwd) @@ -27,12 +28,22 @@ func initialiseWatcher(cwd string) (*fsnotify.Watcher, error) { return nil, err } + customDirs := dirs.AsSlice() + seperatedDirs := strings.Split(reloadDirs, ",") + for _, dir := range seperatedDirs { + customSub, err := fs.GetSubdirectories(filepath.Join(cwd, dir)) + if err != nil { + return nil, err + } + customDirs = append(customDirs, customSub.AsSlice()...) + } + watcher, err := fsnotify.NewWatcher() if err != nil { return nil, err } - for _, dir := range processDirectories(dirs.AsSlice(), ignoreDirs) { + for _, dir := range processDirectories(customDirs, ignoreDirs) { err := watcher.Add(dir) if err != nil { return nil, err diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index ee9f029f3..0356342cc 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin ### Fixed +- Fixed `reloaddirs` wails.json config options by @atterpac in [#4005](https//github.com/wailsapp/wails/pull/4005) - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) From d824318a6655fb29f77a323c54ecb6c967fa89f8 Mon Sep 17 00:00:00 2001 From: Atterpac <89053530+atterpac@users.noreply.github.com> Date: Thu, 23 Jan 2025 04:12:18 -0700 Subject: [PATCH 097/344] fix dev mode logging bug (#3972) changelog.md retain env support actually fix the issue --- v2/internal/app/app_dev.go | 21 ++++++++++----------- v2/pkg/logger/logger.go | 18 ++++++++++++++++++ website/src/pages/changelog.mdx | 1 + 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/v2/internal/app/app_dev.go b/v2/internal/app/app_dev.go index 58cd94ef0..89265c9b9 100644 --- a/v2/internal/app/app_dev.go +++ b/v2/internal/app/app_dev.go @@ -75,7 +75,7 @@ func CreateApp(appoptions *options.App) (*App, error) { loglevel := os.Getenv("loglevel") if loglevel == "" { - loglevelFlag = devFlags.String("loglevel", "debug", "Loglevel to use - Trace, Debug, Info, Warning, Error") + loglevelFlag = devFlags.String("loglevel", appoptions.LogLevel.String(), "Loglevel to use - Trace, Debug, Info, Warning, Error") } // If we weren't given the assetdir in the environment variables @@ -91,8 +91,15 @@ func CreateApp(appoptions *options.App) (*App, error) { if frontendDevServerURLFlag != nil { frontendDevServerURL = *frontendDevServerURLFlag } - if loglevelFlag != nil { - loglevel = *loglevelFlag + // Only override LogLevel if the flag was explicitly set + if loglevelFlag != nil && devFlags.Lookup("loglevel").Value.String() != appoptions.LogLevel.String() { + loggerLevel, err := pkglogger.StringToLogLevel(*loglevelFlag) + if err != nil { + return nil, err + } + if loggerLevel != appoptions.LogLevel { + myLogger.SetLogLevel(loggerLevel) + } } } @@ -169,14 +176,6 @@ func CreateApp(appoptions *options.App) (*App, error) { ctx = context.WithValue(ctx, "devserver", devServer) } - if loglevel != "" { - level, err := pkglogger.StringToLogLevel(loglevel) - if err != nil { - return nil, err - } - myLogger.SetLogLevel(level) - } - // Attach logger to context ctx = context.WithValue(ctx, "logger", myLogger) ctx = context.WithValue(ctx, "buildtype", "dev") diff --git a/v2/pkg/logger/logger.go b/v2/pkg/logger/logger.go index abc288265..990dffe75 100644 --- a/v2/pkg/logger/logger.go +++ b/v2/pkg/logger/logger.go @@ -41,6 +41,24 @@ func StringToLogLevel(input string) (LogLevel, error) { return result, nil } +// String returns the string representation of the LogLevel +func (l LogLevel) String() string { + switch l { + case TRACE: + return "trace" + case DEBUG: + return "debug" + case INFO: + return "info" + case WARNING: + return "warning" + case ERROR: + return "error" + default: + return "debug" + } +} + // Logger specifies the methods required to attach // a logger to a Wails application type Logger interface { diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 0356342cc..697ee4ef2 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin ### Fixed +- Fixed dev mode logging bug by @attperac in [#3972](https://wailsapp/wails/pull/3972) - Fixed `reloaddirs` wails.json config options by @atterpac in [#4005](https//github.com/wailsapp/wails/pull/4005) - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony From 4a1d101d045ca45564c6aef17a400f1914402f5d Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 23 Jan 2025 22:12:37 +1100 Subject: [PATCH 098/344] Fix invalid path for windows dialogs (#4019) * Fix invalid path for windows dialogs * Update Go version in pipelines for v2 --- .github/workflows/pr.yml | 2 +- .../cfd/CommonFileDialog_nonWindows.go | 10 +++++----- .../go-common-file-dialog/cfd/DialogConfig.go | 17 ++++++++++++++++- v2/internal/go-common-file-dialog/cfd/errors.go | 4 +++- .../cfd/iFileOpenDialog.go | 10 +++++++--- .../cfd/iFileSaveDialog.go | 3 +-- .../cfd/iShellItemArray.go | 3 ++- .../go-common-file-dialog/cfd/vtblCommonFunc.go | 2 +- .../go-common-file-dialog/cfdutil/CFDUtil.go | 16 ++++------------ website/src/pages/changelog.mdx | 1 + 10 files changed, 41 insertions(+), 27 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c70050276..760fd277f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -56,7 +56,7 @@ jobs: strategy: matrix: os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04] - go-version: ['1.21'] + go-version: ['1.23'] steps: - name: Checkout code diff --git a/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go index 04c7cbcfe..3ab969850 100644 --- a/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go +++ b/v2/internal/go-common-file-dialog/cfd/CommonFileDialog_nonWindows.go @@ -5,24 +5,24 @@ package cfd import "fmt" -var errUnsupported = fmt.Errorf("common file dialogs are only available on windows") +var unsupportedError = fmt.Errorf("common file dialogs are only available on windows") // TODO doc func NewOpenFileDialog(config DialogConfig) (OpenFileDialog, error) { - return nil, errUnsupported + return nil, unsupportedError } // TODO doc func NewOpenMultipleFilesDialog(config DialogConfig) (OpenMultipleFilesDialog, error) { - return nil, errUnsupported + return nil, unsupportedError } // TODO doc func NewSelectFolderDialog(config DialogConfig) (SelectFolderDialog, error) { - return nil, errUnsupported + return nil, unsupportedError } // TODO doc func NewSaveFileDialog(config DialogConfig) (SaveFileDialog, error) { - return nil, errUnsupported + return nil, unsupportedError } diff --git a/v2/internal/go-common-file-dialog/cfd/DialogConfig.go b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go index edefd4e13..9e06fb503 100644 --- a/v2/internal/go-common-file-dialog/cfd/DialogConfig.go +++ b/v2/internal/go-common-file-dialog/cfd/DialogConfig.go @@ -2,7 +2,11 @@ package cfd -import "fmt" +import ( + "fmt" + "os" + "reflect" +) type FileFilter struct { // The display name of the filter (That is shown to the user) @@ -11,6 +15,9 @@ type FileFilter struct { Pattern string } +// Never obfuscate the FileFilter type. +var _ = reflect.TypeOf(FileFilter{}) + type DialogConfig struct { // The title of the dialog Title string @@ -69,6 +76,10 @@ func (config *DialogConfig) apply(dialog Dialog) (err error) { } if config.Folder != "" { + _, err = os.Stat(config.Folder) + if err != nil { + return + } err = dialog.SetFolder(config.Folder) if err != nil { return @@ -76,6 +87,10 @@ func (config *DialogConfig) apply(dialog Dialog) (err error) { } if config.DefaultFolder != "" { + _, err = os.Stat(config.DefaultFolder) + if err != nil { + return + } err = dialog.SetDefaultFolder(config.DefaultFolder) if err != nil { return diff --git a/v2/internal/go-common-file-dialog/cfd/errors.go b/v2/internal/go-common-file-dialog/cfd/errors.go index 6f21fedbf..c097c8eb2 100644 --- a/v2/internal/go-common-file-dialog/cfd/errors.go +++ b/v2/internal/go-common-file-dialog/cfd/errors.go @@ -2,4 +2,6 @@ package cfd import "errors" -var ErrCancelled = errors.New("cancelled by user") +var ( + ErrorCancelled = errors.New("cancelled by user") +) diff --git a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go index f94a9c7ed..404dedc22 100644 --- a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go +++ b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go @@ -5,7 +5,7 @@ package cfd import ( "github.com/go-ole/go-ole" - "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/util" + "github.com/google/uuid" "syscall" "unsafe" ) @@ -106,7 +106,7 @@ func (fileOpenDialog *iFileOpenDialog) SetFileFilters(filter []FileFilter) error } func (fileOpenDialog *iFileOpenDialog) SetRole(role string) error { - return fileOpenDialog.vtbl.setClientGuid(unsafe.Pointer(fileOpenDialog), util.StringToUUID(role)) + return fileOpenDialog.vtbl.setClientGuid(unsafe.Pointer(fileOpenDialog), StringToUUID(role)) } // This should only be callable when the user asks for a multi select because @@ -177,7 +177,7 @@ func (vtbl *iFileOpenDialogVtbl) getResultsStrings(objPtr unsafe.Pointer) ([]str return nil, err } if shellItemArray == nil { - return nil, ErrCancelled + return nil, ErrorCancelled } defer shellItemArray.vtbl.release(unsafe.Pointer(shellItemArray)) count, err := shellItemArray.vtbl.getCount(unsafe.Pointer(shellItemArray)) @@ -194,3 +194,7 @@ func (vtbl *iFileOpenDialogVtbl) getResultsStrings(objPtr unsafe.Pointer) ([]str } return results, nil } + +func StringToUUID(str string) *ole.GUID { + return ole.NewGUID(uuid.NewSHA1(uuid.Nil, []byte(str)).String()) +} diff --git a/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go index 3effeda25..ddee7b246 100644 --- a/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go +++ b/v2/internal/go-common-file-dialog/cfd/iFileSaveDialog.go @@ -5,7 +5,6 @@ package cfd import ( "github.com/go-ole/go-ole" - "github.com/wailsapp/wails/v2/internal/go-common-file-dialog/util" "unsafe" ) @@ -77,7 +76,7 @@ func (fileSaveDialog *iFileSaveDialog) SetFileFilters(filter []FileFilter) error } func (fileSaveDialog *iFileSaveDialog) SetRole(role string) error { - return fileSaveDialog.vtbl.setClientGuid(unsafe.Pointer(fileSaveDialog), util.StringToUUID(role)) + return fileSaveDialog.vtbl.setClientGuid(unsafe.Pointer(fileSaveDialog), StringToUUID(role)) } func (fileSaveDialog *iFileSaveDialog) SetDefaultExtension(defaultExtension string) error { diff --git a/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go index c548160d1..bdd459402 100644 --- a/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go +++ b/v2/internal/go-common-file-dialog/cfd/iShellItemArray.go @@ -4,6 +4,7 @@ package cfd import ( + "fmt" "github.com/go-ole/go-ole" "syscall" "unsafe" @@ -57,7 +58,7 @@ func (vtbl *iShellItemArrayVtbl) getItemAt(objPtr unsafe.Pointer, index uintptr) return "", err } if shellItem == nil { - return "", ErrCancelled + return "", fmt.Errorf("shellItem is nil") } defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) return shellItem.vtbl.getDisplayName(unsafe.Pointer(shellItem)) diff --git a/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go index 8c88c297c..9107c1904 100644 --- a/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go +++ b/v2/internal/go-common-file-dialog/cfd/vtblCommonFunc.go @@ -168,7 +168,7 @@ func (vtbl *iFileDialogVtbl) getResultString(objPtr unsafe.Pointer) (string, err return "", err } if shellItem == nil { - return "", ErrCancelled + return "", fmt.Errorf("shellItem is nil") } defer shellItem.vtbl.release(unsafe.Pointer(shellItem)) return shellItem.vtbl.getDisplayName(unsafe.Pointer(shellItem)) diff --git a/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go b/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go index 655266bc3..bde52d743 100644 --- a/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go +++ b/v2/internal/go-common-file-dialog/cfdutil/CFDUtil.go @@ -10,9 +10,7 @@ func ShowOpenFileDialog(config cfd.DialogConfig) (string, error) { if err != nil { return "", err } - defer func() { - _ = dialog.Release() - }() + defer dialog.Release() return dialog.ShowAndGetResult() } @@ -22,9 +20,7 @@ func ShowOpenMultipleFilesDialog(config cfd.DialogConfig) ([]string, error) { if err != nil { return nil, err } - defer func() { - _ = dialog.Release() - }() + defer dialog.Release() return dialog.ShowAndGetResults() } @@ -34,9 +30,7 @@ func ShowPickFolderDialog(config cfd.DialogConfig) (string, error) { if err != nil { return "", err } - defer func() { - _ = dialog.Release() - }() + defer dialog.Release() return dialog.ShowAndGetResult() } @@ -46,8 +40,6 @@ func ShowSaveFileDialog(config cfd.DialogConfig) (string, error) { if err != nil { return "", err } - defer func() { - _ = dialog.Release() - }() + defer dialog.Release() return dialog.ShowAndGetResult() } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 697ee4ef2..3cc504c90 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed failed models.ts build due to non-json-encodable Go types [PR](https://github.com/wailsapp/wails/pull/3975) by [@pbnjay](https://github.com/pbnjay) - Fixed more binding and typescript export bugs [PR](https://github.com/wailsapp/wails/pull/3978) by [@pbnjay](https://github.com/pbnjay) - Fixed Dispatcher.ProcessMessage crash process instead of return error [PR](https://github.com/wailsapp/wails/pull/4016) [#4015](https://github.com/wailsapp/wails/issues/4015) by [@ronaldinho_x86](https://github.com/RonaldinhoL) +- Fixed Windows SaveDialog crash by [@leaanthony](https://github.com/leaanthony) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 74fa41330e1ee4c9cd5458a5e0db7344142b4d12 Mon Sep 17 00:00:00 2001 From: Ronen Lapushner Date: Thu, 23 Jan 2025 14:15:53 +0200 Subject: [PATCH 099/344] Added to chaneglog --- website/src/pages/changelog.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index ee9f029f3..1fc21a5ff 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin +- Added "Branding" section to `wails doctor` to correctly identify Windows 11 [#3891](https://github.com/wailsapp/wails/pull/3891) by [@ronen25](https://github.com/ronen25) ### Fixed - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) From bed3ec416302460f8d770bd3b907646c37571767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Wed, 5 Feb 2025 15:13:11 +0100 Subject: [PATCH 100/344] add decorator diff to window max values --- v2/internal/frontend/desktop/linux/window.c | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/v2/internal/frontend/desktop/linux/window.c b/v2/internal/frontend/desktop/linux/window.c index 0dee24f42..a45ab0cdf 100644 --- a/v2/internal/frontend/desktop/linux/window.c +++ b/v2/internal/frontend/desktop/linux/window.c @@ -228,6 +228,9 @@ void SetPosition(void *window, int x, int y) ExecuteOnMainThread(setPosition, (gpointer)args); } +static int decoratorWidth = 0; +static int decoratorHeight = 0; + void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_width, int max_height) { GdkGeometry size; @@ -238,11 +241,33 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid { return; } + int flags = GDK_HINT_MAX_SIZE | GDK_HINT_MIN_SIZE; + size.max_height = (max_height == 0 ? monitorSize.height : max_height); size.max_width = (max_width == 0 ? monitorSize.width : max_width); size.min_height = min_height; size.min_width = min_width; + +# ifdef GDK_WINDOWING_WAYLAND + if (decoratorWidth == 0 && decoratorHeight == 0) { + char *gdkBackend = getenv("XDG_SESSION_TYPE"); + if(gdkBackend != NULL && strcmp(gdkBackend, "wayland") == 0 && gtk_window_get_decorated(window)) { + int windowWidth, windowHeight; + gtk_window_get_size(window, &windowWidth, &windowHeight); + + GtkAllocation windowAllocation; + gtk_widget_get_allocation(GTK_WIDGET(window), &windowAllocation); + + decoratorWidth = (windowAllocation.width-windowWidth); + decoratorHeight = (windowAllocation.height-windowHeight); + } + } + + size.max_height = decoratorHeight+size.max_height; + size.max_width = decoratorWidth+size.max_width; +#endif + gtk_window_set_geometry_hints(window, NULL, &size, flags); } From d04fd9a35fbac24aa93f3245539c30136f84b3ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Wed, 5 Feb 2025 15:49:11 +0100 Subject: [PATCH 101/344] change ifdef to function --- v2/internal/frontend/desktop/linux/window.c | 44 +++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/v2/internal/frontend/desktop/linux/window.c b/v2/internal/frontend/desktop/linux/window.c index a45ab0cdf..dd56c8af4 100644 --- a/v2/internal/frontend/desktop/linux/window.c +++ b/v2/internal/frontend/desktop/linux/window.c @@ -14,6 +14,9 @@ static float xroot = 0.0f; static float yroot = 0.0f; static int dragTime = -1; static uint mouseButton = 0; +static int wmIsWayland = -1; +static int decoratorWidth = -1; +static int decoratorHeight = -1; // casts void ExecuteOnMainThread(void *f, gpointer jscallback) @@ -68,6 +71,27 @@ static bool isNULLRectangle(GdkRectangle input) return input.x == -1 && input.y == -1 && input.width == -1 && input.height == -1; } +static gboolean onWayland() +{ + switch (wmIsWayland) + { + case -1: + char *gdkBackend = getenv("XDG_SESSION_TYPE"); + if(gdkBackend != NULL && strcmp(gdkBackend, "wayland") == 0) + { + wmIsWayland = 1; + return TRUE; + } + + wmIsWayland = 0; + return FALSE; + case 1: + return TRUE; + default: + return FALSE; + } +} + static GdkMonitor *getCurrentMonitor(GtkWindow *window) { // Get the monitor that the window is currently on @@ -228,9 +252,6 @@ void SetPosition(void *window, int x, int y) ExecuteOnMainThread(setPosition, (gpointer)args); } -static int decoratorWidth = 0; -static int decoratorHeight = 0; - void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_width, int max_height) { GdkGeometry size; @@ -249,10 +270,10 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid size.min_height = min_height; size.min_width = min_width; -# ifdef GDK_WINDOWING_WAYLAND - if (decoratorWidth == 0 && decoratorHeight == 0) { - char *gdkBackend = getenv("XDG_SESSION_TYPE"); - if(gdkBackend != NULL && strcmp(gdkBackend, "wayland") == 0 && gtk_window_get_decorated(window)) { + if(onWayland()) + { + if(decoratorWidth == -1 && decoratorHeight == -1) + { int windowWidth, windowHeight; gtk_window_get_size(window, &windowWidth, &windowHeight); @@ -260,14 +281,13 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid gtk_widget_get_allocation(GTK_WIDGET(window), &windowAllocation); decoratorWidth = (windowAllocation.width-windowWidth); - decoratorHeight = (windowAllocation.height-windowHeight); + decoratorHeight = (windowAllocation.height-windowHeight); } + + size.max_height = decoratorHeight+size.max_height; + size.max_width = decoratorWidth+size.max_width; } - size.max_height = decoratorHeight+size.max_height; - size.max_width = decoratorWidth+size.max_width; -#endif - gtk_window_set_geometry_hints(window, NULL, &size, flags); } From f07ead3fb2c5b15d8c95d8d69a8df056cb0a3583 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Wed, 5 Feb 2025 16:04:49 +0100 Subject: [PATCH 102/344] add comments --- v2/internal/frontend/desktop/linux/window.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/v2/internal/frontend/desktop/linux/window.c b/v2/internal/frontend/desktop/linux/window.c index dd56c8af4..cff982883 100644 --- a/v2/internal/frontend/desktop/linux/window.c +++ b/v2/internal/frontend/desktop/linux/window.c @@ -270,6 +270,7 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid size.min_height = min_height; size.min_width = min_width; + // On Wayland window manager get the decoratgors and calculate the differences from the windows' size. if(onWayland()) { if(decoratorWidth == -1 && decoratorHeight == -1) @@ -284,6 +285,7 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid decoratorHeight = (windowAllocation.height-windowHeight); } + // Add the decorator difference to the window so fullscreen and maximise can fill the window. size.max_height = decoratorHeight+size.max_height; size.max_width = decoratorWidth+size.max_width; } From 8d1e5188ad0090ae4c95ee87ddf180d22ddf421f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Wed, 5 Feb 2025 16:07:42 +0100 Subject: [PATCH 103/344] fix typo --- v2/internal/frontend/desktop/linux/window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2/internal/frontend/desktop/linux/window.c b/v2/internal/frontend/desktop/linux/window.c index cff982883..2a71ba2ec 100644 --- a/v2/internal/frontend/desktop/linux/window.c +++ b/v2/internal/frontend/desktop/linux/window.c @@ -270,7 +270,7 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid size.min_height = min_height; size.min_width = min_width; - // On Wayland window manager get the decoratgors and calculate the differences from the windows' size. + // On Wayland window manager get the decorators and calculate the differences from the windows' size. if(onWayland()) { if(decoratorWidth == -1 && decoratorHeight == -1) From 89db2ad0826a5f87c91d1de65116b3df3e8efb9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Z=C3=A1mb=C3=B3=2C=20Levente?= Date: Thu, 6 Feb 2025 11:23:50 +0100 Subject: [PATCH 104/344] add changelog --- website/src/pages/changelog.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 3cc504c90..bbc9ff230 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -35,6 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed more binding and typescript export bugs [PR](https://github.com/wailsapp/wails/pull/3978) by [@pbnjay](https://github.com/pbnjay) - Fixed Dispatcher.ProcessMessage crash process instead of return error [PR](https://github.com/wailsapp/wails/pull/4016) [#4015](https://github.com/wailsapp/wails/issues/4015) by [@ronaldinho_x86](https://github.com/RonaldinhoL) - Fixed Windows SaveDialog crash by [@leaanthony](https://github.com/leaanthony) +- Fixed Window size issues on Wayland [PR](https://github.com/wailsapp/wails/pull/4047) by [@lyimmi](https://github.com/lyimmi) ### Changed - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) From 347d8cf861f6d2f9a78ccfe48d016c6612e99c3c Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Feb 2025 10:37:58 +1100 Subject: [PATCH 105/344] Make calls thread safe --- v2/internal/frontend/desktop/linux/window.c | 41 ++++++--------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/v2/internal/frontend/desktop/linux/window.c b/v2/internal/frontend/desktop/linux/window.c index 2a71ba2ec..9c3b7c707 100644 --- a/v2/internal/frontend/desktop/linux/window.c +++ b/v2/internal/frontend/desktop/linux/window.c @@ -14,9 +14,6 @@ static float xroot = 0.0f; static float yroot = 0.0f; static int dragTime = -1; static uint mouseButton = 0; -static int wmIsWayland = -1; -static int decoratorWidth = -1; -static int decoratorHeight = -1; // casts void ExecuteOnMainThread(void *f, gpointer jscallback) @@ -73,23 +70,13 @@ static bool isNULLRectangle(GdkRectangle input) static gboolean onWayland() { - switch (wmIsWayland) + const char *gdkBackend = getenv("XDG_SESSION_TYPE"); + if(gdkBackend != NULL && strcmp(gdkBackend, "wayland") == 0) { - case -1: - char *gdkBackend = getenv("XDG_SESSION_TYPE"); - if(gdkBackend != NULL && strcmp(gdkBackend, "wayland") == 0) - { - wmIsWayland = 1; - return TRUE; - } - - wmIsWayland = 0; - return FALSE; - case 1: return TRUE; - default: - return FALSE; } + + return FALSE; } static GdkMonitor *getCurrentMonitor(GtkWindow *window) @@ -270,24 +257,18 @@ void SetMinMaxSize(GtkWindow *window, int min_width, int min_height, int max_wid size.min_height = min_height; size.min_width = min_width; - // On Wayland window manager get the decorators and calculate the differences from the windows' size. + // On Wayland window manager get the decorators and calculate the differences from the window size. if(onWayland()) { - if(decoratorWidth == -1 && decoratorHeight == -1) - { - int windowWidth, windowHeight; - gtk_window_get_size(window, &windowWidth, &windowHeight); + int windowWidth, windowHeight; + gtk_window_get_size(window, &windowWidth, &windowHeight); - GtkAllocation windowAllocation; - gtk_widget_get_allocation(GTK_WIDGET(window), &windowAllocation); + GtkAllocation windowAllocation; + gtk_widget_get_allocation(GTK_WIDGET(window), &windowAllocation); - decoratorWidth = (windowAllocation.width-windowWidth); - decoratorHeight = (windowAllocation.height-windowHeight); - } - // Add the decorator difference to the window so fullscreen and maximise can fill the window. - size.max_height = decoratorHeight+size.max_height; - size.max_width = decoratorWidth+size.max_width; + size.max_height = (windowAllocation.height-windowHeight)+size.max_height; + size.max_width = (windowAllocation.width-windowWidth)+size.max_width; } gtk_window_set_geometry_hints(window, NULL, &size, flags); From 3605fdf42f948ebfeec8babf089f63eed5f12e6b Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Feb 2025 12:56:06 +1100 Subject: [PATCH 106/344] Update dependencies. Fix `buildvcs` compile error --- v2/go.mod | 34 ++++++----- v2/go.sum | 86 ++++++++++++++++------------ v2/internal/github/github.go | 3 +- v2/pkg/commands/bindings/bindings.go | 2 +- v2/pkg/commands/build/base.go | 2 + website/src/pages/changelog.mdx | 7 ++- 6 files changed, 77 insertions(+), 57 deletions(-) diff --git a/v2/go.mod b/v2/go.mod index 649dcf2bf..c169e34d0 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -1,6 +1,6 @@ module github.com/wailsapp/wails/v2 -go 1.22.0 +go 1.23 toolchain go1.23.4 @@ -8,8 +8,8 @@ require ( github.com/Masterminds/semver v1.5.0 github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d github.com/bep/debounce v1.2.1 - github.com/bitfield/script v0.19.0 - github.com/charmbracelet/glamour v0.5.0 + github.com/bitfield/script v0.24.0 + github.com/charmbracelet/glamour v0.8.0 github.com/flytam/filenamify v1.0.0 github.com/fsnotify/fsnotify v1.4.9 github.com/go-git/go-git/v5 v5.13.1 @@ -50,25 +50,29 @@ require ( require ( atomicgo.dev/cursor v0.1.1 // indirect atomicgo.dev/keyboard v0.2.8 // indirect - bitbucket.org/creachadair/shell v0.0.7 // indirect dario.cat/mergo v1.0.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v1.1.5 // indirect github.com/StackExchange/wmi v1.2.1 // indirect - github.com/alecthomas/chroma v0.10.0 // indirect + github.com/alecthomas/chroma/v2 v2.14.0 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect + github.com/charmbracelet/lipgloss v0.12.1 // indirect + github.com/charmbracelet/x/ansi v0.1.4 // indirect github.com/cloudflare/circl v1.5.0 // indirect github.com/containerd/console v1.0.3 // indirect github.com/cyphar/filepath-securejoin v0.4.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dlclark/regexp2 v1.4.0 // indirect + github.com/dlclark/regexp2 v1.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/gookit/color v1.5.2 // indirect - github.com/gorilla/css v1.0.0 // indirect + github.com/gorilla/css v1.0.1 // indirect + github.com/itchyny/gojq v0.12.13 // indirect + github.com/itchyny/timefmt-go v0.1.5 // indirect github.com/jaypipes/pcidb v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect @@ -76,18 +80,17 @@ require ( github.com/lithammer/fuzzysearch v1.1.5 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/microcosm-cc/bluemonday v1.0.17 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/microcosm-cc/bluemonday v1.0.27 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mmcloughlin/avo v0.6.0 // indirect github.com/muesli/reflow v0.3.0 // indirect - github.com/muesli/termenv v0.9.0 // indirect + github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pjbgf/sha1cd v0.3.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect github.com/tidwall/gjson v1.9.3 // indirect @@ -98,8 +101,8 @@ require ( github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect - github.com/yuin/goldmark v1.4.13 // indirect - github.com/yuin/goldmark-emoji v1.0.1 // indirect + github.com/yuin/goldmark v1.7.4 // indirect + github.com/yuin/goldmark-emoji v1.0.3 // indirect golang.org/x/crypto v0.32.0 // indirect golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/image v0.23.0 // indirect @@ -110,4 +113,5 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.0 // indirect + mvdan.cc/sh/v3 v3.7.0 // indirect ) diff --git a/v2/go.sum b/v2/go.sum index 83ec8568e..2016c37f8 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -2,8 +2,6 @@ atomicgo.dev/cursor v0.1.1 h1:0t9sxQomCTRh5ug+hAMCs59x/UmC9QL6Ci5uosINKD4= atomicgo.dev/cursor v0.1.1/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= atomicgo.dev/keyboard v0.2.8 h1:Di09BitwZgdTV1hPyX/b9Cqxi8HVuJQwWivnZUEqlj4= atomicgo.dev/keyboard v0.2.8/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= -bitbucket.org/creachadair/shell v0.0.7 h1:Z96pB6DkSb7F3Y3BBnJeOZH2gazyMTWlvecSD4vDqfk= -bitbucket.org/creachadair/shell v0.0.7/go.mod h1:oqtXSSvSYr4624lnnabXHaBsYW6RD80caLi2b3hJk0U= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs= @@ -26,21 +24,35 @@ github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDO github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= -github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= -github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= +github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE= +github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E= +github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= +github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= -github.com/bitfield/script v0.19.0 h1:W24f+FQuPab9gXcW8bhcbo5qO8AtrXyu3XOnR4zhHN0= -github.com/bitfield/script v0.19.0/go.mod h1:ana6F8YOSZ3ImT8SauIzuYSqXgFVkSUJ6kgja+WMmIY= -github.com/charmbracelet/glamour v0.5.0 h1:wu15ykPdB7X6chxugG/NNfDUbyyrCLV9XBalj5wdu3g= -github.com/charmbracelet/glamour v0.5.0/go.mod h1:9ZRtG19AUIzcTm7FGLGbq3D5WKQ5UyZBbQsMQN0XIqc= +github.com/bitfield/script v0.24.0 h1:ic0Tbx+2AgRtkGGIcUyr+Un60vu4WXvqFrCSumf+T7M= +github.com/bitfield/script v0.24.0/go.mod h1:fv+6x4OzVsRs6qAlc7wiGq8fq1b5orhtQdtW0dwjUHI= +github.com/charmbracelet/glamour v0.8.0 h1:tPrjL3aRcQbn++7t18wOpgLyl8wrOHUEDS7IZ68QtZs= +github.com/charmbracelet/glamour v0.8.0/go.mod h1:ViRgmKkf3u5S7uakt2czJ272WSg2ZenlYEZXT2x7Bjw= +github.com/charmbracelet/lipgloss v0.12.1 h1:/gmzszl+pedQpjCOH+wFkZr/N90Snz40J/NR7A0zQcs= +github.com/charmbracelet/lipgloss v0.12.1/go.mod h1:V2CiwIuhx9S1S1ZlADfOj9HmxeMAORuz5izHb0zGbB8= +github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831KfiLM= +github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= +github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4 h1:6KzMkQeAF56rggw2NZu1L+TH7j9+DM1/2Kmh7KUxg1I= +github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= @@ -50,14 +62,16 @@ github.com/cyphar/filepath-securejoin v0.4.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= -github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= +github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/flytam/filenamify v1.0.0 h1:ewx6BY2dj7U6h2zGPJmt33q/BjkSf/YsY/woQvnUNIs= github.com/flytam/filenamify v1.0.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= +github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= +github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -79,8 +93,6 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -91,8 +103,14 @@ github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQ github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= -github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY= -github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= +github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU= +github.com/itchyny/gojq v0.12.13/go.mod h1:JzwzAqenfhrPUuwbmEz3nu3JQmFLlQTQMUcOdnu/Sf4= +github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= +github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/jackmordaunt/icns v1.0.0 h1:RYSxplerf/l/DUd09AHtITwckkv/mqjVv4DjYdPmAMQ= github.com/jackmordaunt/icns v1.0.0/go.mod h1:7TTQVEuGzVVfOPPlLNHJIkzA6CoV7aH1Dv9dW351oOo= github.com/jaypipes/ghw v0.12.0 h1:xU2/MDJfWmBhJnujHY9qwXQLs3DBsf0/Xa9vECY0Tho= @@ -147,29 +165,26 @@ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwM github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/microcosm-cc/bluemonday v1.0.17 h1:Z1a//hgsQ4yjC+8zEkV8IWySkXnsxmdSY642CTFQb5Y= -github.com/microcosm-cc/bluemonday v1.0.17/go.mod h1:Z0r70sCuXHig8YpBzCc5eGHAap2K7e/u082ZUpDRRqM= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= +github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mmcloughlin/avo v0.6.0 h1:QH6FU8SKoTLaVs80GA8TJuLNkUYl4VokHKlPhVDg4YY= github.com/mmcloughlin/avo v0.6.0/go.mod h1:8CoAGaCSYXtCPR+8y18Y9aB/kxb8JSS6FRI7mSkvD+8= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= -github.com/muesli/termenv v0.9.0 h1:wnbOaGz+LUR3jNT0zOzinPnyDaCZUQRZj9GxK8eRVl8= -github.com/muesli/termenv v0.9.0/go.mod h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= +github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a/go.mod h1:hxSnBBYLK21Vtq/PHd0S2FYCxBXzBua8ov5s1RobyRQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= github.com/pjbgf/sha1cd v0.3.1 h1:Dh2GYdpJnO84lIw0LJwTFXjcNbasP/bklicSznyAaPI= @@ -191,8 +206,8 @@ github.com/pterm/pterm v0.12.49 h1:qeNm0wTWawy6WhKoY8ZKq6qTXFr0s2UtUyRW0yVztEg= github.com/pterm/pterm v0.12.49/go.mod h1:D4OBoWNqAfXkm5QLTjIgjNiMXPHemLJHnIreGUsWzWg= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= @@ -247,12 +262,11 @@ github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.4/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark-emoji v1.0.1 h1:ctuWEyzGBwiucEqxzwe0SOYDXPAucOrE9NQC18Wa1os= -github.com/yuin/goldmark-emoji v1.0.1/go.mod h1:2w1E6FEWLcDQkoTE+7HU6QF1F6SLlNGjRIBbIZQFqkQ= +github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= +github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= +github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= +github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4= +github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= @@ -264,7 +278,6 @@ golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= @@ -274,7 +287,6 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -306,8 +318,6 @@ golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -325,3 +335,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= +mvdan.cc/sh/v3 v3.7.0 h1:lSTjdP/1xsddtaKfGg7Myu7DnlHItd3/M2tomOcNNBg= +mvdan.cc/sh/v3 v3.7.0/go.mod h1:K2gwkaesF/D7av7Kxl0HbF5kGOd2ArupNTX3X44+8l8= diff --git a/v2/internal/github/github.go b/v2/internal/github/github.go index c16e1d9dd..2aa5e1432 100644 --- a/v2/internal/github/github.go +++ b/v2/internal/github/github.go @@ -3,6 +3,7 @@ package github import ( "encoding/json" "fmt" + "github.com/charmbracelet/glamour/styles" "io" "net/http" "net/url" @@ -39,7 +40,7 @@ func GetReleaseNotes(tagVersion string, noColour bool) string { var termRendererOpts []glamour.TermRendererOption if runtime.GOOS == "windows" || noColour { - termRendererOpts = append(termRendererOpts, glamour.WithStyles(glamour.NoTTYStyleConfig)) + termRendererOpts = append(termRendererOpts, glamour.WithStyles(styles.NoTTYStyleConfig)) } else { termRendererOpts = append(termRendererOpts, glamour.WithAutoStyle()) } diff --git a/v2/pkg/commands/bindings/bindings.go b/v2/pkg/commands/bindings/bindings.go index d1c8d60bf..6034dd283 100644 --- a/v2/pkg/commands/bindings/bindings.go +++ b/v2/pkg/commands/bindings/bindings.go @@ -59,7 +59,7 @@ func GenerateBindings(options Options) (string, error) { envBuild = shell.SetEnv(envBuild, "GOOS", options.Platform) envBuild = shell.SetEnv(envBuild, "GOARCH", options.Arch) - stdout, stderr, err = shell.RunCommandWithEnv(envBuild, workingDirectory, options.Compiler, "build", "-tags", tagString, "-o", filename) + stdout, stderr, err = shell.RunCommandWithEnv(envBuild, workingDirectory, options.Compiler, "build", "-buildvcs=false", "-tags", tagString, "-o", filename) if err != nil { return stdout, fmt.Errorf("%s\n%s\n%s", stdout, stderr, err) } diff --git a/v2/pkg/commands/build/base.go b/v2/pkg/commands/build/base.go index aafee66ae..239932ce8 100644 --- a/v2/pkg/commands/build/base.go +++ b/v2/pkg/commands/build/base.go @@ -193,6 +193,8 @@ func (b *BaseBuilder) CompileProject(options *Options) error { // Default go build command commands.Add("build") + commands.Add("-buildvcs=false") + // Add better debugging flags if options.Mode == Dev || options.Mode == Debug { commands.Add("-gcflags") diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 3cc504c90..677d2bc3f 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -13,9 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Security` in case of vulnerabilities. ## [Unreleased] -### Changed -- Removed documentation references for 'The default module name in go.mod is "changeme". You should change this to something more appropriate.' as it appears to be no longer relevant. -- Update script in Mac App Store guide to support app names containing spaces by @cristianrgreco ### Added - Added option to set window class name on Windows. Added in [PR](https://github.com/wailsapp/wails/pull/3828) by @APshenkin @@ -35,9 +32,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed more binding and typescript export bugs [PR](https://github.com/wailsapp/wails/pull/3978) by [@pbnjay](https://github.com/pbnjay) - Fixed Dispatcher.ProcessMessage crash process instead of return error [PR](https://github.com/wailsapp/wails/pull/4016) [#4015](https://github.com/wailsapp/wails/issues/4015) by [@ronaldinho_x86](https://github.com/RonaldinhoL) - Fixed Windows SaveDialog crash by [@leaanthony](https://github.com/leaanthony) +- Fixed `buildvcs` errors by [@leaanthony](https://github.com/leaanthony) ### Changed +- Removed documentation references for 'The default module name in go.mod is "changeme". You should change this to something more appropriate.' as it appears to be no longer relevant. +- Update script in Mac App Store guide to support app names containing spaces by @cristianrgreco - Allow to specify macos-min-version externally. Implemented by @APshenkin in [PR](https://github.com/wailsapp/wails/pull/3756) +- Update to Go 1.23 ## v2.9.2 - 2024-09-18 From fa7c6d80a2da46ccab22d12ed602f35da8c7b322 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Feb 2025 13:03:38 +1100 Subject: [PATCH 107/344] Fix ErrorCancelled typo --- v2/internal/go-common-file-dialog/cfd/errors.go | 2 +- v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/v2/internal/go-common-file-dialog/cfd/errors.go b/v2/internal/go-common-file-dialog/cfd/errors.go index c097c8eb2..eeb48a9e9 100644 --- a/v2/internal/go-common-file-dialog/cfd/errors.go +++ b/v2/internal/go-common-file-dialog/cfd/errors.go @@ -3,5 +3,5 @@ package cfd import "errors" var ( - ErrorCancelled = errors.New("cancelled by user") + ErrCancelled = errors.New("cancelled by user") ) diff --git a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go index 404dedc22..b1be23fcf 100644 --- a/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go +++ b/v2/internal/go-common-file-dialog/cfd/iFileOpenDialog.go @@ -177,7 +177,7 @@ func (vtbl *iFileOpenDialogVtbl) getResultsStrings(objPtr unsafe.Pointer) ([]str return nil, err } if shellItemArray == nil { - return nil, ErrorCancelled + return nil, ErrCancelled } defer shellItemArray.vtbl.release(unsafe.Pointer(shellItemArray)) count, err := shellItemArray.vtbl.getCount(unsafe.Pointer(shellItemArray)) From 536422d508484bbcfb8dbb53b82deb65e14dd30f Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 9 Feb 2025 11:47:53 +1100 Subject: [PATCH 108/344] Update contributors --- website/src/pages/credits.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/website/src/pages/credits.mdx b/website/src/pages/credits.mdx index 61228af84..5503b048c 100644 --- a/website/src/pages/credits.mdx +++ b/website/src/pages/credits.mdx @@ -6,6 +6,7 @@ - [Atterpac](https://github.com/atterpac) - Developer, support guru, powerhouse - [Simon Thomas](mailto:enquiries@wails.io) - Growth Hacker - [Lyimmi](https://github.com/Lyimmi) - All things Linux +- [fbbdev](https://github.com/fbbdev) - Bindings Generator guru & core contributor ## Sponsors From bedebe0c0613b640c34be98a55c26df5077330cd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 9 Feb 2025 11:49:57 +1100 Subject: [PATCH 109/344] Update Sponsor Image (#4036) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 1a5ace6f6..20b1b6a98 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -112,52 +112,44 @@ text { - - - - - + - + - + - + - + - + - - - - + - + + + + - - - - - + Helpers From 49b524d16932e5ab93762f04d94dd1935cb5f58f Mon Sep 17 00:00:00 2001 From: stffabi Date: Mon, 10 Feb 2025 10:59:16 +0100 Subject: [PATCH 110/344] [v2, darwin] Fix updating menus (#4057) --- v2/internal/frontend/desktop/darwin/window.go | 12 +++++++++--- website/src/pages/changelog.mdx | 1 + 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index 121533a33..04b9f888d 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -32,6 +32,8 @@ func init() { type Window struct { context unsafe.Pointer + + applicationMenu *menu.Menu } func bool2Cint(value bool) C.int { @@ -292,12 +294,16 @@ func (w *Window) Size() (int, int) { } func (w *Window) SetApplicationMenu(inMenu *menu.Menu) { - mainMenu := NewNSMenu(w.context, "") - processMenu(mainMenu, inMenu) - C.SetAsApplicationMenu(w.context, mainMenu.nsmenu) + w.applicationMenu = inMenu + w.UpdateApplicationMenu() } func (w *Window) UpdateApplicationMenu() { + mainMenu := NewNSMenu(w.context, "") + if w.applicationMenu != nil { + processMenu(mainMenu, w.applicationMenu) + } + C.SetAsApplicationMenu(w.context, mainMenu.nsmenu) C.UpdateApplicationMenu(w.context) } diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 677d2bc3f..894da5b89 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -33,6 +33,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed Dispatcher.ProcessMessage crash process instead of return error [PR](https://github.com/wailsapp/wails/pull/4016) [#4015](https://github.com/wailsapp/wails/issues/4015) by [@ronaldinho_x86](https://github.com/RonaldinhoL) - Fixed Windows SaveDialog crash by [@leaanthony](https://github.com/leaanthony) - Fixed `buildvcs` errors by [@leaanthony](https://github.com/leaanthony) +- Fixed updating menus on MacOS by [@stffabi](https://github.com/stffabi) ### Changed - Removed documentation references for 'The default module name in go.mod is "changeme". You should change this to something more appropriate.' as it appears to be no longer relevant. From 7e45e3d02580e196c3f1b603e2dfb0fd7349cd4e Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Fri, 14 Feb 2025 08:42:17 +1100 Subject: [PATCH 111/344] [Snyk] Upgrade sponsorkit from 0.9.3 to 0.16.2 (#4062) fix: upgrade sponsorkit from 0.9.3 to 0.16.2 Snyk has created this PR to upgrade sponsorkit from 0.9.3 to 0.16.2. See this package in npm: sponsorkit See this project in Snyk: https://app.snyk.io/org/leaanthony/project/65547be6-c86d-4fef-aa06-dc1445189250?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot --- scripts/sponsors/package-lock.json | 1252 +++++++++++++++++----------- scripts/sponsors/package.json | 2 +- 2 files changed, 789 insertions(+), 465 deletions(-) diff --git a/scripts/sponsors/package-lock.json b/scripts/sponsors/package-lock.json index 934088703..656e338de 100644 --- a/scripts/sponsors/package-lock.json +++ b/scripts/sponsors/package-lock.json @@ -9,468 +9,773 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "sponsorkit": "^0.9.3" + "sponsorkit": "^0.16.2" } }, "node_modules/@antfu/utils": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz", - "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==", + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/@emnapi/runtime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.0.tgz", - "integrity": "sha512-gCGlE0fJGWalfy+wbFApjhKn6uoSVvopru77IPyxNKkjkaiSx2HxDS7eOYSmo9dcMIhmmIvoxiC3N9TM1c3EaA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz", - "integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ - "darwin" + "android" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.2" + "node": ">=18" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz", - "integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==", + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.2" + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", - "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", "cpu": [ - "arm64" + "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "macos": ">=11", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", - "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "darwin" ], - "engines": { - "macos": ">=10.13", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", - "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", "cpu": [ "arm" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", - "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", - "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", "cpu": [ "s390x" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.28", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", - "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "glibc": ">=2.26", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", - "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", "cpu": [ "arm64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", - "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", "cpu": [ "x64" ], + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "musl": ">=1.2.2", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" - }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz", - "integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", "cpu": [ "arm" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.2" + "@img/sharp-libvips-linux-arm": "1.0.5" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz", - "integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.2" + "@img/sharp-libvips-linux-arm64": "1.0.4" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz", - "integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", "cpu": [ "s390x" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.28", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.2" + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz", - "integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "glibc": ">=2.26", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.2" + "@img/sharp-libvips-linux-x64": "1.0.4" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz", - "integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", "cpu": [ "arm64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz", - "integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", "cpu": [ "x64" ], + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "musl": ">=1.2.2", - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz", - "integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", "cpu": [ "wasm32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.1.0" + "@emnapi/runtime": "^1.2.0" }, "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz", - "integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", "cpu": [ "ia32" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz", - "integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", "cpu": [ "x64" ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0", - "npm": ">=9.6.5", - "pnpm": ">=7.1.0", - "yarn": ">=3.2.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" } }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -485,10 +790,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } }, "node_modules/cliui": { "version": "8.0.1", @@ -526,6 +841,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -554,6 +870,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -567,122 +884,63 @@ "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/datauri": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz", - "integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==", + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", "dependencies": { - "image-size": "1.0.0", - "mimer": "^2.0.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/defu": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz", - "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==" + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" }, "node_modules/destr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz", - "integrity": "sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", + "license": "MIT" }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "license": "Apache-2.0", "engines": { "node": ">=8" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/emoji-regex": { @@ -690,15 +948,43 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/escalade": { @@ -709,6 +995,20 @@ "node": ">=6" } }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -717,37 +1017,41 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/image-size": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", - "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "license": "MIT", "dependencies": { - "queue": "6.0.2" + "resolve-pkg-maps": "^1.0.0" }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=12.0.0" + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "node_modules/importx": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/importx/-/importx-0.4.4.tgz", + "integrity": "sha512-Lo1pukzAREqrBnnHC+tj+lreMTAvyxtkKsMxLY8H15M/bvLl54p3YuoTI70Tz7Il0AsgSlD7Lrk/FaApRcBL7w==", + "license": "MIT", + "dependencies": { + "bundle-require": "^5.0.0", + "debug": "^4.3.6", + "esbuild": "^0.20.2 || ^0.21.0 || ^0.22.0 || ^0.23.0", + "jiti": "2.0.0-beta.3", + "jiti-v1": "npm:jiti@^1.21.6", + "pathe": "^1.1.2", + "tsx": "^4.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", @@ -758,113 +1062,94 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "2.0.0-beta.3", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.0.0-beta.3.tgz", + "integrity": "sha512-pmfRbVRs/7khFrSAYnSiJ8C0D5GvzkE4Ey2pAvUcJsw1ly/p+7ut27jbJrjY79BpAJQJ4gXYFtK6d1Aub+9baQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jiti-v1": { + "name": "jiti", + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/mimer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz", - "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==", - "bin": { - "mimer": "bin/mimer" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", - "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" - } + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/node-fetch-native": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.1.tgz", - "integrity": "sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==" + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "license": "MIT" }, - "node_modules/node-html-parser": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.11.tgz", - "integrity": "sha512-FAgwwZ6h0DSDWxfD0Iq1tsDcBCxdJB1nXpLPPxX8YyVWzbfCjKWEzaynF4gZZ/8hziUmp7ZSaKylcn0iKhufUQ==", - "dependencies": { - "css-select": "^5.1.0", - "he": "1.2.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" + "node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ofetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", - "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", "dependencies": { - "destr": "^2.0.1", - "node-fetch-native": "^1.4.0", - "ufo": "^1.3.0" + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/require-directory": { "version": "2.1.1", @@ -874,13 +1159,20 @@ "node": ">=0.10.0" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -889,69 +1181,73 @@ } }, "node_modules/sharp": { - "version": "0.33.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz", - "integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==", + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", - "semver": "^7.6.0" + "semver": "^7.6.3" }, "engines": { - "libvips": ">=8.15.2", "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.3", - "@img/sharp-darwin-x64": "0.33.3", - "@img/sharp-libvips-darwin-arm64": "1.0.2", - "@img/sharp-libvips-darwin-x64": "1.0.2", - "@img/sharp-libvips-linux-arm": "1.0.2", - "@img/sharp-libvips-linux-arm64": "1.0.2", - "@img/sharp-libvips-linux-s390x": "1.0.2", - "@img/sharp-libvips-linux-x64": "1.0.2", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", - "@img/sharp-libvips-linuxmusl-x64": "1.0.2", - "@img/sharp-linux-arm": "0.33.3", - "@img/sharp-linux-arm64": "0.33.3", - "@img/sharp-linux-s390x": "0.33.3", - "@img/sharp-linux-x64": "0.33.3", - "@img/sharp-linuxmusl-arm64": "0.33.3", - "@img/sharp-linuxmusl-x64": "0.33.3", - "@img/sharp-wasm32": "0.33.3", - "@img/sharp-win32-ia32": "0.33.3", - "@img/sharp-win32-x64": "0.33.3" + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" } }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/sponsorkit": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/sponsorkit/-/sponsorkit-0.9.3.tgz", - "integrity": "sha512-P7YLBr4Is+R7cl73E95wSCL/pKR8Cfqh156hQCcFxWZPxjGwt2BCKLd5S0Zx1XtvI5KrSbOczdjLQ5BVRk3L9Q==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/sponsorkit/-/sponsorkit-0.16.2.tgz", + "integrity": "sha512-58o/eEa5cczh2w9TK1hJahb3aDAyuubstlANapGSRkaeItDjmJQM8ptdoSJFD2T4/Ukcjvo+Oj11Y+XD1CDheg==", + "license": "MIT", "dependencies": { + "@antfu/utils": "^0.7.10", "consola": "^3.2.3", - "datauri": "^4.1.0", - "dotenv": "^16.3.1", - "node-html-parser": "^6.1.11", - "ofetch": "^1.3.3", - "picocolors": "^1.0.0", - "sharp": "^0.33.0", - "unconfig": "^0.3.11", + "d3-hierarchy": "^3.1.2", + "dotenv": "^16.4.5", + "normalize-url": "^8.0.1", + "ofetch": "^1.3.4", + "p-limit": "^6.1.0", + "picocolors": "^1.1.0", + "sharp": "^0.33.5", + "unconfig": "^0.5.5", "yargs": "^17.7.2" }, "bin": { - "sponsorkit": "bin/sponsorkit.js" + "sponsorkit": "bin/sponsorkit.mjs" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -990,25 +1286,46 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", "optional": true }, + "node_modules/tsx": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" }, "node_modules/unconfig": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.11.tgz", - "integrity": "sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.5.5.tgz", + "integrity": "sha512-VQZ5PT9HDX+qag0XdgQi8tJepPhXiR/yVOkn707gJDKo31lGjRilPREiQJ9Z6zd/Ugpv6ZvO5VxVIcatldYcNQ==", + "license": "MIT", "dependencies": { - "@antfu/utils": "^0.7.6", - "defu": "^6.1.2", - "jiti": "^1.20.0", - "mlly": "^1.4.2" + "@antfu/utils": "^0.7.10", + "defu": "^6.1.4", + "importx": "^0.4.3" }, "funding": { "url": "https://github.com/sponsors/antfu" @@ -1057,11 +1374,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -1086,6 +1398,18 @@ "engines": { "node": ">=12" } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/scripts/sponsors/package.json b/scripts/sponsors/package.json index eb013cef6..f29214b71 100644 --- a/scripts/sponsors/package.json +++ b/scripts/sponsors/package.json @@ -10,6 +10,6 @@ "author": "", "license": "ISC", "dependencies": { - "sponsorkit": "^0.9.3" + "sponsorkit": "^0.16.2" } } From ba0149219854542b6cd0de968ea5e0825370e29c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 18:15:43 +1100 Subject: [PATCH 112/344] Update Sponsor Image (#4073) chore: update sponsors.svg Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com> --- website/static/img/sponsors.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/static/img/sponsors.svg b/website/static/img/sponsors.svg index 20b1b6a98..b840ccd9a 100644 --- a/website/static/img/sponsors.svg +++ b/website/static/img/sponsors.svg @@ -60,7 +60,7 @@ text { Matt Holt - + Iain From 1fb6403e7dfc266b952dbfd1484aeaaa0f66d6f1 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Thu, 13 Feb 2025 06:20:00 +1100 Subject: [PATCH 113/344] v2.10 --- v2/cmd/wails/internal/version.txt | 2 +- v2/go.mod | 93 +- v2/go.sum | 227 ++-- v2/pkg/commands/bindings/bindings.go | 2 +- v2/pkg/templates/templates/lit-ts/go.mod.tmpl | 2 +- v2/pkg/templates/templates/lit/go.mod.tmpl | 2 +- v2/pkg/templates/templates/plain/go.mod.tmpl | 2 +- .../templates/templates/preact-ts/go.mod.tmpl | 2 +- v2/pkg/templates/templates/preact/go.mod.tmpl | 2 +- .../templates/templates/react-ts/go.mod.tmpl | 2 +- v2/pkg/templates/templates/react/go.mod.tmpl | 2 +- .../templates/templates/svelte-ts/go.mod.tmpl | 2 +- v2/pkg/templates/templates/svelte/go.mod.tmpl | 2 +- .../templates/vanilla-ts/go.mod.tmpl | 2 +- .../templates/templates/vanilla/go.mod.tmpl | 2 +- v2/pkg/templates/templates/vue-ts/go.mod.tmpl | 2 +- v2/pkg/templates/templates/vue/go.mod.tmpl | 2 +- .../version-v2.10.json | 38 + .../version-v2.10/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 0 .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 0 .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/mchat.mdx | 0 .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 0 .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 73 ++ .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 90 ++ .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 243 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 191 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10}/guides/nixos-font.mdx | 0 .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10/guides/routing.mdx | 68 ++ .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10/guides/sveltekit.mdx | 157 +++ .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10/reference/cli.mdx | 246 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 956 +++++++++++++++++ .../reference/project-config.mdx | 129 +++ .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ .../version-v2.10}/appendix/_category_.json | 0 .../version-v2.10}/community/_category_.json | 0 .../version-v2.10/community/links.mdx | 26 + .../community/showcase/_category_.json | 0 .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 22 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 0 .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 73 ++ .../gettingstarted/_category_.json | 0 .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 89 ++ .../version-v2.10}/guides/_category_.json | 0 .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 1 + .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 244 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 191 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10/guides/nixos-font.mdx | 10 + .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10/guides/routing.mdx | 68 ++ .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10}/guides/sveltekit.mdx | 25 +- .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10}/reference/_category_.json | 0 .../version-v2.10/reference/cli.mdx | 245 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 956 +++++++++++++++++ .../reference/project-config.mdx | 129 +++ .../reference/runtime/_category_.json | 0 .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10}/tutorials/_category_.json | 0 .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ .../version-v2.10/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 0 .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 0 .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 0 .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 0 .../community/showcase/riftshare.mdx | 0 .../community/showcase/scriptbar.mdx | 0 .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 0 .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wally.mdx | 0 .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10}/community/showcase/ytd.mdx | 0 .../version-v2.10}/community/templates.mdx | 10 +- .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 89 ++ .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 244 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 191 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10/guides/nixos-font.mdx | 10 + .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10}/guides/routing.mdx | 21 + .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10/guides/sveltekit.mdx | 157 +++ .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10/reference/cli.mdx | 245 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 956 +++++++++++++++++ .../reference/project-config.mdx | 0 .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ .../version-v2.10/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 73 ++ .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 90 ++ .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 244 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 191 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10/guides/nixos-font.mdx | 10 + .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10/guides/routing.mdx | 68 ++ .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10/guides/sveltekit.mdx | 157 +++ .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10/reference/cli.mdx | 245 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 956 +++++++++++++++++ .../reference/project-config.mdx | 130 +++ .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ .../version-v2.10/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 73 ++ .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 90 ++ .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 244 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 191 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10/guides/nixos-font.mdx | 10 + .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10/guides/routing.mdx | 68 ++ .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10/guides/sveltekit.mdx | 157 +++ .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10/reference/cli.mdx | 245 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 956 +++++++++++++++++ .../reference/project-config.mdx | 130 +++ .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ .../version-v2.10/appendix/_category_.json | 4 + .../version-v2.10/community/_category_.json | 4 + .../version-v2.10/community/links.mdx | 26 + .../community/showcase/_category_.json | 4 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 22 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 74 ++ .../contributing/developing-new-features.mdx | 34 + .../contributing/documenting.mdx | 34 + .../contributing/fixing-bugs.mdx | 29 + .../setting-up-a-dev-environment.mdx | 30 + .../contributing/ways-of-contributing.mdx | 18 + .../gettingstarted/_category_.json | 4 + .../version-v2.10/gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 130 +++ .../gettingstarted/installation.mdx | 89 ++ .../version-v2.10/guides/_category_.json | 4 + .../version-v2.10/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 +++++ .../guides/crossplatform-build.mdx | 66 ++ .../guides/custom-protocol-schemes.mdx | 204 ++++ .../version-v2.10/guides/dynamic-assets.mdx | 142 +++ .../version-v2.10/guides/file-association.mdx | 244 +++++ .../version-v2.10/guides/frameless.mdx | 87 ++ .../version-v2.10/guides/frontend.mdx | 72 ++ .../version-v2.10/guides/ides.mdx | 127 +++ .../guides/linux-distro-support.mdx | 103 ++ .../version-v2.10/guides/linux.mdx | 70 ++ .../guides/local-development.mdx | 55 + .../version-v2.10/guides/mac-appstore.mdx | 97 ++ .../version-v2.10/guides/manual-builds.mdx | 95 ++ .../version-v2.10/guides/migrating.mdx | 193 ++++ .../version-v2.10/guides/mouse-buttons.mdx | 25 + .../version-v2.10/guides/nixos-font.mdx | 10 + .../version-v2.10/guides/obfuscated.mdx | 40 + .../version-v2.10/guides/overscroll.mdx | 10 + .../version-v2.10/guides/routing.mdx | 68 ++ .../version-v2.10/guides/signing.mdx | 399 +++++++ .../guides/single-instance-lock.mdx | 81 ++ .../version-v2.10/guides/sveltekit.mdx | 157 +++ .../version-v2.10/guides/templates.mdx | 97 ++ .../version-v2.10/guides/troubleshooting.mdx | 368 +++++++ .../version-v2.10/guides/vscode.mdx | 82 ++ .../guides/windows-installer.mdx | 71 ++ .../version-v2.10/guides/windows.mdx | 67 ++ .../version-v2.10/howdoesitwork.mdx | 419 ++++++++ .../version-v2.10/introduction.mdx | 73 ++ .../version-v2.10/reference/_category_.json | 4 + .../version-v2.10/reference/cli.mdx | 245 +++++ .../version-v2.10/reference/menus.mdx | 230 +++++ .../version-v2.10/reference/options.mdx | 972 ++++++++++++++++++ .../reference/project-config.mdx | 129 +++ .../reference/runtime/_category_.json | 4 + .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 ++++++ .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../version-v2.10/reference/runtime/intro.mdx | 85 ++ .../version-v2.10/reference/runtime/log.mdx | 130 +++ .../version-v2.10/reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 ++++ .../version-v2.10/tutorials/_category_.json | 4 + .../version-v2.10/tutorials/dogsapi.mdx | 245 +++++ .../version-v2.10/tutorials/helloworld.mdx | 123 +++ website/src/pages/changelog.mdx | 21 +- .../version-v2.10/appendix/_category_.json | 4 + .../version-v2.10/community/_category_.json | 4 + .../community/links.mdx | 0 .../community/showcase/_category_.json | 4 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 0 .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 0 .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 0 .../community/showcase/kafka-king.mdx | 22 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 0 .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 0 .../community/showcase/mollywallet.mdx | 0 .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 0 .../community/showcase/portfall.mdx | 0 .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 0 .../community/showcase/wombat.mdx | 0 .../version-v2.10/community/showcase/ytd.mdx | 10 + .../version-v2.10/community/templates.mdx | 77 ++ .../gettingstarted/_category_.json | 4 + .../gettingstarted/building.mdx | 4 + .../gettingstarted/development.mdx | 0 .../gettingstarted/firstproject.mdx | 0 .../gettingstarted/installation.mdx | 6 +- .../version-v2.10/guides/_category_.json | 4 + .../guides/angular.mdx | 0 .../guides/application-development.mdx | 2 +- .../guides/crossplatform-build.mdx | 65 ++ .../guides/custom-protocol-schemes.mdx | 0 .../guides/dynamic-assets.mdx | 0 .../guides/file-association.mdx | 0 .../guides/frameless.mdx | 0 .../guides/frontend.mdx | 2 +- .../guides/ides.mdx | 2 +- .../guides/linux-distro-support.mdx | 0 .../guides/linux.mdx | 0 .../guides/local-development.mdx | 0 .../guides/mac-appstore.mdx | 6 +- .../guides/manual-builds.mdx | 0 .../guides/migrating.mdx | 2 +- .../guides/mouse-buttons.mdx | 0 .../version-v2.10/guides/nixos-font.mdx | 10 + .../guides/obfuscated.mdx | 2 +- .../guides/overscroll.mdx | 0 .../version-v2.10/guides/routing.mdx | 68 ++ .../guides/signing.mdx | 6 +- .../guides/single-instance-lock.mdx | 0 .../version-v2.10/guides/sveltekit.mdx | 136 +++ .../guides/templates.mdx | 0 .../guides/troubleshooting.mdx | 0 .../guides/vscode.mdx | 0 .../guides/windows-installer.mdx | 0 .../guides/windows.mdx | 0 .../howdoesitwork.mdx | 6 +- .../introduction.mdx | 0 .../version-v2.10/reference/_category_.json | 4 + .../reference/cli.mdx | 9 +- .../reference/menus.mdx | 12 +- .../reference/options.mdx | 95 +- .../reference/project-config.mdx | 130 +++ .../reference/runtime/_category_.json | 4 + .../reference/runtime/browser.mdx | 0 .../reference/runtime/clipboard.mdx | 0 .../reference/runtime/dialog.mdx | 0 .../reference/runtime/draganddrop.mdx | 38 + .../reference/runtime/events.mdx | 2 +- .../reference/runtime/intro.mdx | 0 .../reference/runtime/log.mdx | 0 .../reference/runtime/menu.mdx | 0 .../reference/runtime/screen.mdx | 0 .../reference/runtime/window.mdx | 2 +- .../version-v2.10/tutorials/_category_.json | 4 + .../tutorials/dogsapi.mdx | 0 .../tutorials/helloworld.mdx | 0 ...ebars.json => version-v2.10-sidebars.json} | 0 website/versions.json | 2 +- 589 files changed, 44827 insertions(+), 223 deletions(-) create mode 100644 website/i18n/en/docusaurus-plugin-content-docs/version-v2.10.json create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/fr/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/cfntracker.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/fr/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/espstudio.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/fr/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/mchat.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/fr/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/snippetexpander.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/fr/docusaurus-plugin-content-docs/version-v2.10}/guides/nixos-font.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/routing.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/sveltekit.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/project-config.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/appendix/_category_.json (100%) rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/community/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/kafka-king.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/tinyrdm.mdx (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/gettingstarted/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/guides/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/guides/crossplatform-build.mdx (99%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/nixos-font.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/routing.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/guides/sveltekit.mdx (95%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/reference/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/project-config.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/reference/runtime/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ja/docusaurus-plugin-content-docs/version-v2.10}/tutorials/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/bulletinboard.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/emailit.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/october.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/restic-browser.mdx (100%) rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/riftshare.mdx (100%) rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/scriptbar.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/surge.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/wally.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/showcase/ytd.mdx (100%) rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/community/templates.mdx (86%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/nixos-font.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/guides/routing.mdx (73%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/sveltekit.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx rename website/{versioned_docs/version-v2.8.1 => i18n/ko/docusaurus-plugin-content-docs/version-v2.10}/reference/project-config.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/nixos-font.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/routing.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/sveltekit.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/project-config.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/nixos-font.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/routing.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/sveltekit.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/project-config.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/appendix/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/kafka-king.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/contributing/developing-new-features.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/contributing/documenting.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/contributing/fixing-bugs.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/contributing/setting-up-a-dev-environment.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/contributing/ways-of-contributing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/local-development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/mac-appstore.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/manual-builds.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/migrating.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/mouse-buttons.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/nixos-font.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/obfuscated.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/overscroll.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/routing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/signing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/single-instance-lock.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/sveltekit.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/templates.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/troubleshooting.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/vscode.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/windows-installer.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/guides/windows.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/howdoesitwork.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/introduction.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/cli.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/menus.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/options.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/project-config.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/browser.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/clipboard.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/dialog.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/events.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/intro.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/log.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/menu.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/screen.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/reference/runtime/window.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/tutorials/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/tutorials/dogsapi.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.10/tutorials/helloworld.mdx create mode 100644 website/versioned_docs/version-v2.10/appendix/_category_.json create mode 100644 website/versioned_docs/version-v2.10/community/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/links.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/_category_.json create mode 100644 website/versioned_docs/version-v2.10/community/showcase/bulletinboard.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/cfntracker.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/emailit.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/encrypteasy.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/espstudio.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/filehound.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/grpcmd-gui.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/hiposter.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/kafka-king.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/mchat.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/minecraftupdater.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/minesweeper-xp.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/modalfilemanager.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/mollywallet.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/october.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/optimus.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/portfall.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/resizem.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/restic-browser.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/riftshare.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/scriptbar.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/snippetexpander.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/surge.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/tinyrdm.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/wailsterm.mdx create mode 100644 website/versioned_docs/version-v2.10/community/showcase/wally.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/warmine.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/community/showcase/wombat.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/community/showcase/ytd.mdx create mode 100644 website/versioned_docs/version-v2.10/community/templates.mdx create mode 100644 website/versioned_docs/version-v2.10/gettingstarted/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/gettingstarted/building.mdx (77%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/gettingstarted/development.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/gettingstarted/firstproject.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/gettingstarted/installation.mdx (87%) create mode 100644 website/versioned_docs/version-v2.10/guides/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/angular.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/application-development.mdx (99%) create mode 100644 website/versioned_docs/version-v2.10/guides/crossplatform-build.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/custom-protocol-schemes.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/dynamic-assets.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/file-association.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/frameless.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/frontend.mdx (97%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/ides.mdx (98%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/linux-distro-support.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/linux.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/local-development.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/mac-appstore.mdx (95%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/manual-builds.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/migrating.mdx (99%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/mouse-buttons.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/guides/nixos-font.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/obfuscated.mdx (98%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/overscroll.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/guides/routing.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/signing.mdx (98%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/single-instance-lock.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/guides/sveltekit.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/templates.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/troubleshooting.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/vscode.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/windows-installer.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/guides/windows.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/howdoesitwork.mdx (99%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/introduction.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/reference/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/cli.mdx (98%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/menus.mdx (94%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/options.mdx (95%) create mode 100644 website/versioned_docs/version-v2.10/reference/project-config.mdx create mode 100644 website/versioned_docs/version-v2.10/reference/runtime/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/browser.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/clipboard.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/dialog.mdx (100%) create mode 100644 website/versioned_docs/version-v2.10/reference/runtime/draganddrop.mdx rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/events.mdx (96%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/intro.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/log.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/menu.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/screen.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/reference/runtime/window.mdx (99%) create mode 100644 website/versioned_docs/version-v2.10/tutorials/_category_.json rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/tutorials/dogsapi.mdx (100%) rename website/versioned_docs/{version-v2.8.1 => version-v2.10}/tutorials/helloworld.mdx (100%) rename website/versioned_sidebars/{version-v2.8.1-sidebars.json => version-v2.10-sidebars.json} (100%) diff --git a/v2/cmd/wails/internal/version.txt b/v2/cmd/wails/internal/version.txt index e949dccbb..1953b7140 100644 --- a/v2/cmd/wails/internal/version.txt +++ b/v2/cmd/wails/internal/version.txt @@ -1 +1 @@ -v2.9.2 \ No newline at end of file +v2.10 \ No newline at end of file diff --git a/v2/go.mod b/v2/go.mod index c169e34d0..036dc4812 100644 --- a/v2/go.mod +++ b/v2/go.mod @@ -1,8 +1,6 @@ module github.com/wailsapp/wails/v2 -go 1.23 - -toolchain go1.23.4 +go 1.22.0 require ( github.com/Masterminds/semver v1.5.0 @@ -10,48 +8,49 @@ require ( github.com/bep/debounce v1.2.1 github.com/bitfield/script v0.24.0 github.com/charmbracelet/glamour v0.8.0 - github.com/flytam/filenamify v1.0.0 - github.com/fsnotify/fsnotify v1.4.9 - github.com/go-git/go-git/v5 v5.13.1 - github.com/go-ole/go-ole v1.2.6 + github.com/flytam/filenamify v1.2.0 + github.com/fsnotify/fsnotify v1.8.0 + github.com/go-git/go-git/v5 v5.13.2 + github.com/go-ole/go-ole v1.3.0 github.com/godbus/dbus/v5 v5.1.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 - github.com/google/uuid v1.3.0 + github.com/google/uuid v1.6.0 github.com/jackmordaunt/icns v1.0.0 - github.com/jaypipes/ghw v0.12.0 - github.com/labstack/echo/v4 v4.10.2 - github.com/labstack/gommon v0.4.0 + github.com/jaypipes/ghw v0.13.0 + github.com/labstack/echo/v4 v4.13.3 + github.com/labstack/gommon v0.4.2 github.com/leaanthony/clir v1.3.0 github.com/leaanthony/debme v1.2.1 - github.com/leaanthony/go-ansi-parser v1.6.0 - github.com/leaanthony/gosod v1.0.3 + github.com/leaanthony/go-ansi-parser v1.6.1 + github.com/leaanthony/gosod v1.0.4 github.com/leaanthony/slicer v1.6.0 - github.com/leaanthony/u v1.1.0 + github.com/leaanthony/u v1.1.1 github.com/leaanthony/winicon v1.0.0 - github.com/matryer/is v1.4.0 - github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 + github.com/matryer/is v1.4.1 + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c github.com/pkg/errors v0.9.1 - github.com/pterm/pterm v0.12.49 + github.com/pterm/pterm v0.12.80 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 - github.com/samber/lo v1.38.1 + github.com/samber/lo v1.49.1 github.com/stretchr/testify v1.10.0 - github.com/tc-hib/winres v0.2.1 - github.com/tidwall/sjson v1.1.7 - github.com/tkrajina/go-reflector v0.5.6 - github.com/wailsapp/go-webview2 v1.0.18 + github.com/tc-hib/winres v0.3.1 + github.com/tidwall/sjson v1.2.5 + github.com/tkrajina/go-reflector v0.5.8 + github.com/wailsapp/go-webview2 v1.0.19 github.com/wailsapp/mimetype v1.4.1 github.com/wzshiming/ctc v1.2.3 - golang.org/x/mod v0.22.0 - golang.org/x/net v0.34.0 - golang.org/x/sys v0.29.0 - golang.org/x/tools v0.29.0 + golang.org/x/mod v0.23.0 + golang.org/x/net v0.35.0 + golang.org/x/sys v0.30.0 + golang.org/x/tools v0.30.0 ) require ( - atomicgo.dev/cursor v0.1.1 // indirect - atomicgo.dev/keyboard v0.2.8 // indirect - dario.cat/mergo v1.0.1 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect + atomicgo.dev/cursor v0.2.0 // indirect + atomicgo.dev/keyboard v0.2.9 // indirect + atomicgo.dev/schedule v0.1.0 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v1.1.5 // indirect github.com/StackExchange/wmi v1.2.1 // indirect github.com/alecthomas/chroma/v2 v2.14.0 // indirect @@ -59,58 +58,54 @@ require ( github.com/aymerick/douceur v0.2.0 // indirect github.com/charmbracelet/lipgloss v0.12.1 // indirect github.com/charmbracelet/x/ansi v0.1.4 // indirect - github.com/cloudflare/circl v1.5.0 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/console v1.0.3 // indirect - github.com/cyphar/filepath-securejoin v0.4.0 // indirect + github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dlclark/regexp2 v1.11.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/ghodss/yaml v1.0.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.6.2 // indirect - github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/gookit/color v1.5.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/gookit/color v1.5.4 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/itchyny/gojq v0.12.13 // indirect github.com/itchyny/timefmt-go v0.1.5 // indirect - github.com/jaypipes/pcidb v1.0.0 // indirect + github.com/jaypipes/pcidb v1.0.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/lithammer/fuzzysearch v1.1.5 // indirect + github.com/lithammer/fuzzysearch v1.1.8 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mattn/go-runewidth v0.0.16 // indirect github.com/microcosm-cc/bluemonday v1.0.27 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mmcloughlin/avo v0.6.0 // indirect github.com/muesli/reflow v0.3.0 // indirect github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect - github.com/pjbgf/sha1cd v0.3.1 // indirect + github.com/pjbgf/sha1cd v0.3.2 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/skeema/knownhosts v1.3.0 // indirect - github.com/tidwall/gjson v1.9.3 // indirect + github.com/tidwall/gjson v1.14.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect github.com/yuin/goldmark v1.7.4 // indirect github.com/yuin/goldmark-emoji v1.0.3 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/image v0.23.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/image v0.12.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/text v0.22.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v1.0.0 // indirect mvdan.cc/sh/v3 v3.7.0 // indirect diff --git a/v2/go.sum b/v2/go.sum index 2016c37f8..ccf53eb07 100644 --- a/v2/go.sum +++ b/v2/go.sum @@ -1,9 +1,13 @@ -atomicgo.dev/cursor v0.1.1 h1:0t9sxQomCTRh5ug+hAMCs59x/UmC9QL6Ci5uosINKD4= -atomicgo.dev/cursor v0.1.1/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= -atomicgo.dev/keyboard v0.2.8 h1:Di09BitwZgdTV1hPyX/b9Cqxi8HVuJQwWivnZUEqlj4= -atomicgo.dev/keyboard v0.2.8/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= -dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= -dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +atomicgo.dev/assert v0.0.2 h1:FiKeMiZSgRrZsPo9qn/7vmr7mCsh5SZyXY4YGYiYwrg= +atomicgo.dev/assert v0.0.2/go.mod h1:ut4NcI3QDdJtlmAxQULOmA13Gz6e2DWbSAS8RUOmNYQ= +atomicgo.dev/cursor v0.2.0 h1:H6XN5alUJ52FZZUkI7AlJbUc1aW38GWZalpYRPpoPOw= +atomicgo.dev/cursor v0.2.0/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU= +atomicgo.dev/keyboard v0.2.9 h1:tOsIid3nlPLZ3lwgG8KZMp/SFmr7P0ssEN5JUsm78K8= +atomicgo.dev/keyboard v0.2.9/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ= +atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs= +atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs= github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8= github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII= @@ -11,13 +15,13 @@ github.com/MarvinJWendt/testza v0.2.10/go.mod h1:pd+VWsoGUiFtq+hRKSU1Bktnn+DMCSr github.com/MarvinJWendt/testza v0.2.12/go.mod h1:JOIegYyV7rX+7VZ9r77L/eH6CfJHHzXjB69adAhzZkI= github.com/MarvinJWendt/testza v0.3.0/go.mod h1:eFcL4I0idjtIx8P9C6KkAuLgATNKpX4/2oUqKc6bF2c= github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYewEjXsvsVUPbE= -github.com/MarvinJWendt/testza v0.4.3 h1:u2XaM4IqGp9dsdUmML8/Z791fu4yjQYzOiufOtJwTII= -github.com/MarvinJWendt/testza v0.4.3/go.mod h1:CpXaOfceNEYnLDtNIyTrPPcCpDJYqzZnu2aiA2Wp33U= +github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4= +github.com/MarvinJWendt/testza v0.5.2/go.mod h1:xu53QFE5sCdjtMCKk8YMQ2MnymimEctc4n3EjyIYvEY= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4= github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= @@ -53,29 +57,27 @@ github.com/charmbracelet/x/ansi v0.1.4 h1:IEU3D6+dWwPSgZ6HBH+v6oUuZ/nVawMiWj5831 github.com/charmbracelet/x/ansi v0.1.4/go.mod h1:dk73KoMTT5AX5BsX0KrqhsTqAnhZZoCBjs7dGWp4Ktw= github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4 h1:6KzMkQeAF56rggw2NZu1L+TH7j9+DM1/2Kmh7KUxg1I= github.com/charmbracelet/x/exp/golden v0.0.0-20240715153702-9ba8adf781c4/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= -github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= -github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/cyphar/filepath-securejoin v0.4.0 h1:PioTG9TBRSApBpYGnDU8HC+miIsX8vitBH9LGNNMoLQ= -github.com/cyphar/filepath-securejoin v0.4.0/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= +github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/elazarl/goproxy v1.2.3 h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ= -github.com/elazarl/goproxy v1.2.3/go.mod h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64= +github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM= +github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/flytam/filenamify v1.0.0 h1:ewx6BY2dj7U6h2zGPJmt33q/BjkSf/YsY/woQvnUNIs= -github.com/flytam/filenamify v1.0.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= +github.com/flytam/filenamify v1.2.0 h1:7RiSqXYR4cJftDQ5NuvljKMfd/ubKnW/j9C6iekChgI= +github.com/flytam/filenamify v1.2.0/go.mod h1:Dzf9kVycwcsBlr2ATg6uxjqiFgKGH+5SKFuhdeP5zu8= github.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA= github.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -84,25 +86,25 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.13.1 h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M= -github.com/go-git/go-git/v5 v5.13.1/go.mod h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc= +github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0= +github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= -github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= -github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= @@ -113,10 +115,10 @@ github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/jackmordaunt/icns v1.0.0 h1:RYSxplerf/l/DUd09AHtITwckkv/mqjVv4DjYdPmAMQ= github.com/jackmordaunt/icns v1.0.0/go.mod h1:7TTQVEuGzVVfOPPlLNHJIkzA6CoV7aH1Dv9dW351oOo= -github.com/jaypipes/ghw v0.12.0 h1:xU2/MDJfWmBhJnujHY9qwXQLs3DBsf0/Xa9vECY0Tho= -github.com/jaypipes/ghw v0.12.0/go.mod h1:jeJGbkRB2lL3/gxYzNYzEDETV1ZJ56OKr+CSeSEym+g= -github.com/jaypipes/pcidb v1.0.0 h1:vtZIfkiCUE42oYbJS0TAq9XSfSmcsgo9IdxSm9qzYU8= -github.com/jaypipes/pcidb v1.0.0/go.mod h1:TnYUvqhPBzCKnH34KrIX22kAeEbDCSRJ9cqLRCuNDfk= +github.com/jaypipes/ghw v0.13.0 h1:log8MXuB8hzTNnSktqpXMHc0c/2k/WgjOMSUtnI1RV4= +github.com/jaypipes/ghw v0.13.0/go.mod h1:In8SsaDqlb1oTyrbmTC14uy+fbBMvp+xdqX51MidlD8= +github.com/jaypipes/pcidb v1.0.1 h1:WB2zh27T3nwg8AE8ei81sNRb9yWBii3JGNJtT7K9Oic= +github.com/jaypipes/pcidb v1.0.1/go.mod h1:6xYUz/yYEyOkIkUt2t2J2folIuZ4Yg6uByCGFXMCeE4= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= @@ -127,8 +129,8 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= -github.com/klauspost/cpuid/v2 v2.1.0 h1:eyi1Ad2aNJMW95zcSbmGg7Cg6cq3ADwLpMAP96d8rF0= -github.com/klauspost/cpuid/v2 v2.1.0/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -136,49 +138,46 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= -github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= -github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= -github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= +github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= +github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= +github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/leaanthony/clir v1.0.4/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= github.com/leaanthony/clir v1.3.0 h1:L9nPDWrmc/qU9UWZZvRaFajWYuO0np9V5p+5gxyYno0= github.com/leaanthony/clir v1.3.0/go.mod h1:k/RBkdkFl18xkkACMCLt09bhiZnrGORoxmomeMvDpE0= github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= -github.com/leaanthony/go-ansi-parser v1.6.0 h1:T8TuMhFB6TUMIUm0oRrSbgJudTFw9csT3ZK09w0t4Pg= -github.com/leaanthony/go-ansi-parser v1.6.0/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= -github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= -github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= +github.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A= +github.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= +github.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI= +github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= -github.com/leaanthony/u v1.1.0 h1:2n0d2BwPVXSUq5yhe8lJPHdxevE2qK5G99PMStMZMaI= -github.com/leaanthony/u v1.1.0/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= +github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M= +github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= github.com/leaanthony/winicon v1.0.0 h1:ZNt5U5dY71oEoKZ97UVwJRT4e+5xo5o/ieKuHuk8NqQ= github.com/leaanthony/winicon v1.0.0/go.mod h1:en5xhijl92aphrJdmRPlh4NI1L6wq3gEm0LpXAPghjU= -github.com/lithammer/fuzzysearch v1.1.5 h1:Ag7aKU08wp0R9QCfF4GoGST9HbmAIeLP7xwMrOBEp1c= -github.com/lithammer/fuzzysearch v1.1.5/go.mod h1:1R1LRNk7yKid1BaQkmuLQaHruxcC4HmAH30Dh61Ih1Q= +github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4= +github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= +github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= -github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= +github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mmcloughlin/avo v0.6.0 h1:QH6FU8SKoTLaVs80GA8TJuLNkUYl4VokHKlPhVDg4YY= -github.com/mmcloughlin/avo v0.6.0/go.mod h1:8CoAGaCSYXtCPR+8y18Y9aB/kxb8JSS6FRI7mSkvD+8= github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.15.3-0.20240618155329-98d742f6907a h1:2MaM6YC3mGu54x+RKAA6JiFFHlHDY1UbkxqppT7wYOg= @@ -187,10 +186,10 @@ github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/pjbgf/sha1cd v0.3.1 h1:Dh2GYdpJnO84lIw0LJwTFXjcNbasP/bklicSznyAaPI= -github.com/pjbgf/sha1cd v0.3.1/go.mod h1:Y8t7jSB/dEI/lQE04A1HVKteqjj9bX5O4+Cex0TCu8s= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -202,8 +201,8 @@ github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEej github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE= github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8= github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s= -github.com/pterm/pterm v0.12.49 h1:qeNm0wTWawy6WhKoY8ZKq6qTXFr0s2UtUyRW0yVztEg= -github.com/pterm/pterm v0.12.49/go.mod h1:D4OBoWNqAfXkm5QLTjIgjNiMXPHemLJHnIreGUsWzWg= +github.com/pterm/pterm v0.12.80 h1:mM55B+GnKUnLMUSqhdINe4s6tOuVQIetQ3my8JGyAIg= +github.com/pterm/pterm v0.12.80/go.mod h1:c6DeF9bSnOSeFPZlfs4ZRAFcf5SCoTwvwQ5xaKGQlHo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= @@ -212,8 +211,8 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= -github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= -github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= +github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= @@ -221,37 +220,30 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tc-hib/winres v0.2.1 h1:YDE0FiP0VmtRaDn7+aaChp1KiF4owBiJa5l964l5ujA= -github.com/tc-hib/winres v0.2.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= -github.com/tidwall/gjson v1.8.0/go.mod h1:5/xDoumyyDNerp2U36lyolv46b3uF/9Bu6OfyQ9GImk= -github.com/tidwall/gjson v1.9.3 h1:hqzS9wAHMO+KVBBkLxYdkEeeFHuqr95GfClRLKlgK0E= -github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= -github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tc-hib/winres v0.3.1 h1:CwRjEGrKdbi5CvZ4ID+iyVhgyfatxFoizjPhzez9Io4= +github.com/tc-hib/winres v0.3.1/go.mod h1:C/JaNhH3KBvhNKVbvdlDWkbMDO9H4fKKDaN7/07SSuk= +github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= -github.com/tidwall/pretty v1.1.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tidwall/sjson v1.1.7 h1:sgVPwu/yygHJ2m1pJDLgGM/h+1F5odx5Q9ljG3imRm8= -github.com/tidwall/sjson v1.1.7/go.mod h1:w/yG+ezBeTdUxiKs5NcPicO9diP38nk96QBAbIIGeFs= -github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= -github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= +github.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ= +github.com/tkrajina/go-reflector v0.5.8/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/wailsapp/go-webview2 v1.0.18 h1:SSSCoLA+MYikSp1U0WmvELF/4c3x5kH8Vi31TKyZ4yk= -github.com/wailsapp/go-webview2 v1.0.18/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= +github.com/wailsapp/go-webview2 v1.0.19 h1:7U3QcDj1PrBPaxJNCui2k1SkWml+Q5kvFUFyTImA6NU= +github.com/wailsapp/go-webview2 v1.0.19/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= github.com/wzshiming/ctc v1.2.3 h1:q+hW3IQNsjIlOFBTGZZZeIXTElFM4grF4spW/errh/c= @@ -260,31 +252,44 @@ github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae h1:tpXvBXC3hpQBDC github.com/wzshiming/winseq v0.0.0-20200112104235-db357dc107ae/go.mod h1:VTAq37rkGeV+WOybvZwjXiJOicICdpLCN8ifpISjK20= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4= github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= -golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ= +golang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -293,31 +298,40 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -327,7 +341,6 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/v2/pkg/commands/bindings/bindings.go b/v2/pkg/commands/bindings/bindings.go index 6034dd283..4d41227ca 100644 --- a/v2/pkg/commands/bindings/bindings.go +++ b/v2/pkg/commands/bindings/bindings.go @@ -59,7 +59,7 @@ func GenerateBindings(options Options) (string, error) { envBuild = shell.SetEnv(envBuild, "GOOS", options.Platform) envBuild = shell.SetEnv(envBuild, "GOARCH", options.Arch) - stdout, stderr, err = shell.RunCommandWithEnv(envBuild, workingDirectory, options.Compiler, "build", "-buildvcs=false", "-tags", tagString, "-o", filename) + stdout, stderr, err = shell.RunCommandWithEnv(envBuild, workingDirectory, options.Compiler, "build", "-buildvcs=false", "-tags", tagString, "-buildvcs=false", "-o", filename) if err != nil { return stdout, fmt.Errorf("%s\n%s\n%s", stdout, stderr, err) } diff --git a/v2/pkg/templates/templates/lit-ts/go.mod.tmpl b/v2/pkg/templates/templates/lit-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/lit-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/lit-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/lit/go.mod.tmpl b/v2/pkg/templates/templates/lit/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/lit/go.mod.tmpl +++ b/v2/pkg/templates/templates/lit/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/plain/go.mod.tmpl b/v2/pkg/templates/templates/plain/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/plain/go.mod.tmpl +++ b/v2/pkg/templates/templates/plain/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/preact-ts/go.mod.tmpl b/v2/pkg/templates/templates/preact-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/preact-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/preact-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/preact/go.mod.tmpl b/v2/pkg/templates/templates/preact/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/preact/go.mod.tmpl +++ b/v2/pkg/templates/templates/preact/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/react-ts/go.mod.tmpl b/v2/pkg/templates/templates/react-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/react-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/react-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/react/go.mod.tmpl b/v2/pkg/templates/templates/react/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/react/go.mod.tmpl +++ b/v2/pkg/templates/templates/react/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/svelte-ts/go.mod.tmpl b/v2/pkg/templates/templates/svelte-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/svelte-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/svelte-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/svelte/go.mod.tmpl b/v2/pkg/templates/templates/svelte/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/svelte/go.mod.tmpl +++ b/v2/pkg/templates/templates/svelte/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/vanilla-ts/go.mod.tmpl b/v2/pkg/templates/templates/vanilla-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/vanilla-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/vanilla-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/vanilla/go.mod.tmpl b/v2/pkg/templates/templates/vanilla/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/vanilla/go.mod.tmpl +++ b/v2/pkg/templates/templates/vanilla/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/vue-ts/go.mod.tmpl b/v2/pkg/templates/templates/vue-ts/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/vue-ts/go.mod.tmpl +++ b/v2/pkg/templates/templates/vue-ts/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/v2/pkg/templates/templates/vue/go.mod.tmpl b/v2/pkg/templates/templates/vue/go.mod.tmpl index dd7184879..0dd9f465a 100644 --- a/v2/pkg/templates/templates/vue/go.mod.tmpl +++ b/v2/pkg/templates/templates/vue/go.mod.tmpl @@ -1,6 +1,6 @@ module changeme -go 1.18 +go 1.23 require github.com/wailsapp/wails/v2 {{.WailsVersion}} diff --git a/website/i18n/en/docusaurus-plugin-content-docs/version-v2.10.json b/website/i18n/en/docusaurus-plugin-content-docs/version-v2.10.json new file mode 100644 index 000000000..deb213d1a --- /dev/null +++ b/website/i18n/en/docusaurus-plugin-content-docs/version-v2.10.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.10", + "description": "The label for version v2.10" + }, + "sidebar.docs.category.Getting Started": { + "message": "Getting Started", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Reference", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Community", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Showcase", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Guides", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Tutorials", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Contributing", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx new file mode 100644 index 000000000..d6b742435 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/links.mdx @@ -0,0 +1,26 @@ +--- +sidebar_position: 2 +--- + +# Liens + +Cette page sert de liste pour les liens liés à la communauté. Veuillez soumettre une PR (cliquez sur `Modifier cette page` en bas) pour soumettre des liens. + +## Awesome Wails + +La [liste définitive](https://github.com/wailsapp/awesome-wails) de liens relatifs à Wails. + +## Canaux de support + +- [Serveur Discord Wails](https://discord.gg/JDdSxwjhGf) +- [Github Issues](https://github.com/wailsapp/wails/issues) +- [canal de discussion sur la bêta v2](https://github.com/wailsapp/wails/discussions/828) + +## Réseaux sociaux + +- [Twitter](https://twitter.com/wailsapp) +- [Groupe QQ pour la communauté chinoise de Wails](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - Numéro de groupe : 1067173054 + +## Autres tutoriels et articles + +- [Construction d'un Panneau d'Affichage](https://blog.customct.com/building-bulletin-board) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx new file mode 100644 index 000000000..2c56a2e83 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/bulletinboard.mdx @@ -0,0 +1,10 @@ +# BulletinBoard + +```mdx-code-block +

    + +
    +

    +``` + +L'application [BulletinBoard](https://github.com/raguay/BulletinBoard) est un panneau de messages versitaux pour les messages statiques ou les boîtes de dialogue pour obtenir des informations de l'utilisateur pour un script. Il a une TUI pour créer de nouvelles boîtes de dialogue qui peuvent être utilisées pour obtenir des informations de l'utilisateur. Son design est de rester en fonctionnement sur votre système et de montrer les informations au besoin, puis de se cacher. J'ai un processus pour surveiller un fichier sur mon système et pour envoyer le contenu à BulletinBoard une fois modifié. Cela fonctionne très bien avec mes workflows. Il y a auss un [workflow Alfred](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) pour envoyer les informations au programme. Le workflow fonctionne aussi avec [EmailIt](https://github.com/raguay/EmailIt). diff --git a/website/versioned_docs/version-v2.8.1/community/showcase/cfntracker.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx similarity index 100% rename from website/versioned_docs/version-v2.8.1/community/showcase/cfntracker.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/cfntracker.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx new file mode 100644 index 000000000..ac64e25ac --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/emailit.mdx @@ -0,0 +1,10 @@ +# EmailIt + +```mdx-code-block +

    + +
    +

    +``` + +[EmailIt](https://github.com/raguay/EmailIt/) est un programme Wails 2 qui est un expéditeur de courrier électronique basé sur le markdown uniquement avec neuf blocs-notes, pour manipuler le texte et les modèles. Il a également un terminal pour exécuter des scripts dans EmailIt sur les fichiers de votre système. Les scripts et modèles peuvent être utilisés depuis la ligne de commande elle-même ou avec les extensions Alfred, Keyboard Maestro, Dropzone ou PopClip. Il supporte également les scripts et thèmes téléchargés sous GitHub. La documentation n'est pas complète, mais le programme fonctionne. Il est construit en utilisant Wails2 et Svelte, et le téléchargement est une application macOS universelle. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx new file mode 100644 index 000000000..7f4bd7a63 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/encrypteasy.mdx @@ -0,0 +1,12 @@ +# EncryptEasy + +```mdx-code-block +

    + +
    +

    +``` + +**[EncryptEasy](https://www.encrypteasy.app) est un outil de chiffrement PGP simple et facile à utiliser, qui gère toutes vos clés et celles de vos contacts. Le chiffrement devrait être simple. Développé avec Wails.** + +Chiffrer les messages à l'aide de PGP est la norme de l'industrie. Tout le monde a une clé privée et publique. Votre clé privée, eh bien, doit être privée afin que vous seul puissiez lire les messages. Votre clé publique est distribuée à toute personne qui veut vous envoyer des messages secrets, chiffrés. Gérer les clés, chiffrer les messages et déchiffrer les messages devrait être une expérience agréable. EncryptEasy a pour but de vous simplifier la tâche. diff --git a/website/versioned_docs/version-v2.8.1/community/showcase/espstudio.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx similarity index 100% rename from website/versioned_docs/version-v2.8.1/community/showcase/espstudio.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/espstudio.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx new file mode 100644 index 000000000..7522afa6e --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/filehound.mdx @@ -0,0 +1,16 @@ +# Utilitaire d'exportation FileHound + +```mdx-code-block +

    + +
    +

    +``` + +[L'utilitaire d'exportation FileHound](https://www.filehound.co.uk/) est une plate-forme de gestion de documents cloud conçue pour la conservation sécurisée de fichiers, l'automatisation des processus métier et les capacités de SmartCapture. + +L'utilitaire d'exportation FileHound permet aux administrateurs FileHound d'exécuter des tâches sécurisées d'extraction de documents et de données à des fins alternatives de sauvegarde et de récupération. Cette application téléchargera tous les documents et/ou métadonnées enregistrés dans FileHound en fonction des filtres que vous avez choisis. Les métadonnées seront exportées dans les formats JSON et XML. + +Backend construit avec: Go 1.15 Wails 1.11.0 go-sqlite3 1.14.6 go-linq 3.2 + +Frontend avec: Vue 2.6.11 Vuex 3.4.0 TypeScript Tailwind 1.9.6 diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx new file mode 100644 index 000000000..21fd4b117 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/hiposter.mdx @@ -0,0 +1,10 @@ +# hiposter + +```mdx-code-block +

    + +
    +

    +``` + +[hiposter](https://github.com/obity/hiposter) est un outil client de test d'API http simple et efficace. Basé sur les Wails, Go et sveltejs. diff --git a/website/versioned_docs/version-v2.8.1/community/showcase/mchat.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx similarity index 100% rename from website/versioned_docs/version-v2.8.1/community/showcase/mchat.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mchat.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx new file mode 100644 index 000000000..5966e75fa --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/minecraftupdater.mdx @@ -0,0 +1,14 @@ +# Minecraft Updater + +```mdx-code-block +

    + +
    +

    +``` + +[Minecraft Updater](https://github.com/Gurkengewuerz/MinecraftModUpdater) est un outil utilitaire pour mettre à jour et synchroniser les mods Minecraft pour votre base d'utilisateurs. Il a été conçu en utilisant Wails2 et React avec [antd](https://ant.design/) comme framework frontend. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx new file mode 100644 index 000000000..fe644bd7b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/modalfilemanager.mdx @@ -0,0 +1,14 @@ +# Modal File Manager + +```mdx-code-block +

    + +
    +

    +``` + +[Modal File Manager](https://github.com/raguay/ModalFileManager) est un gestionnaire de fichiers à double volet utilisant des technologies web. Mon design original était basé sur NW.js et peut être trouvé [ici](https://github.com/raguay/ModalFileManager-NWjs). Cette version utilise le même code frontend basé sur Svelte (mais il a été grandement modifié depuis le départ de NW.js), mais le backend est une implémentation de [Wails 2](https://wails.io/). En utilisant cette implémentation, je n'utilise plus la ligne de commande `rm`, `cp`, etc. , mais une installation de git doit être présente sur le système pour télécharger des thèmes et des extensions. Il est entièrement codé en utilisant Go et fonctionne beaucoup plus rapidement que les versions précédentes. + +Ce gestionnaire de fichiers est conçu autour du même principe que Vim: l'état est contrôlé par des actions via le clavier. Le nombre d'états n'est pas fixe, mais très programmable. Par conséquent, un nombre infini de configurations de clavier qui peuvent être créées et utilisées. C'est la principale différence par rapport aux autres gestionnaires de fichiers. Il y a des thèmes et des extensions disponibles à télécharger à partir de GitHub. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx new file mode 100644 index 000000000..70a6cd1f4 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/mollywallet.mdx @@ -0,0 +1,10 @@ +# Molley Wallet + +```mdx-code-block +

    + +
    +

    +``` + +[Molly Wallet](https://github.com/grvlle/constellation_wallet/) le portefeuille officiel $DAG du Constellation Network. Cela permettra aux utilisateurs d'interagir avec le réseau Hypergraph de différentes manières, sans se limiter à la production de transactions en $DAG. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx new file mode 100644 index 000000000..5a9789d87 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/october.mdx @@ -0,0 +1,14 @@ +# October + +```mdx-code-block +

    + +
    +

    +``` + +[Octobre](https://october.utf9k.net) est une petite application Wails qui rend vraiment facile d'extraire les surlignements de [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) puis de les transférer vers [Readwise](https://readwise.io). + +Il a une taille relativement petite avec toutes les versions de la plate-forme pesant en moins de 10 Mo, et c'est sans activer la [compression UPX](https://upx.github.io/)! + +En revanche, les précédentes tentatives de l'auteur avec Electron ont rapidement gonflé à plusieurs centaines de mégaoctets. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx new file mode 100644 index 000000000..41744234d --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/optimus.mdx @@ -0,0 +1,10 @@ +# Optimus + +```mdx-code-block +

    + +
    +

    +``` + +[Optimus](https://github.com/splode/optimus) est une application d'optimisation d'image de bureau. Il supporte la conversion et la compression entre les formats d’images WebP, JPEG et PNG. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx new file mode 100644 index 000000000..acdc682be --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/portfall.mdx @@ -0,0 +1,10 @@ +# Portfall + +```mdx-code-block +

    + +
    +

    +``` + +[Portfall](https://github.com/rekon-oss/portfall) - Un portail de redirection de port k8 pour un accès facile à toutes les interfaces de votre instance diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx new file mode 100644 index 000000000..b65971668 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/restic-browser.mdx @@ -0,0 +1,12 @@ +# Restic Browser + +```mdx-code-block +

    + +
    +

    +``` + +[Restic-Browser](https://github.com/emuell/restic-browser) - Une interface de sauvegarde simple et multiplateforme [restic](https://github.com/restic/restic) pour la navigation et la restauration de dépôts restic. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx new file mode 100644 index 000000000..e47b2397e --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/riftshare.mdx @@ -0,0 +1,21 @@ +# RiftShare + +```mdx-code-block +

    + +
    +

    +``` + +Partage de fichiers facile, sécurisé et gratuit pour tout le monde. Apprenez-en plus sur [Riftshare.app](https://riftshare.app) + +## Fonctionnalités + +- Partage facile et sécurisé de fichiers entre ordinateurs à la fois sur le réseau local et via Internet +- Supporte l'envoi de fichiers ou de répertoires de manière sécurisée par le protocole [magic wormhole](https://magic-wormhole.readthedocs.io/en/latest/) +- Compatible avec toutes les autres applications utilisant magic wormhole (magic-wormhole or wormhole-william CLI, wormhole-gui, etc.) +- Compression automatique de plusieurs fichiers sélectionnés à envoyer en même temps +- Animations complètes, barre de progression et support d'annulation pour l'envoi et la réception +- Sélection de fichier natif au système d'exploitation +- Ouvrir les fichiers en un seul clic une fois reçus +- Mise à jour automatique - ne vous inquiétez pas d'avoir la dernière version! diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx new file mode 100644 index 000000000..d7215d661 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/scriptbar.mdx @@ -0,0 +1,10 @@ +# ScriptBar + +```mdx-code-block +

    + +
    +

    +``` + +[ScriptBar](https://GitHub.com/raguay/ScriptBarApp) est un programme pour afficher la sortie de scripts ou d'un serveur [Node-Red](https://nodered.org). Il exécute des scripts définis dans le programme EmailIt et affiche la sortie. Des scripts de xBar ou TextBar peuvent être utilisés. Actuellement sur les scripts TextBar fonctionnent bien. Il affiche également la sortie des scripts sur votre système. ScriptBar ne les met pas dans la barre de menus, mais les a tous dans une fenêtre convenable pour une visualisation facile. Vous pouvez avoir plusieurs onglets pour voir plusieurs choses différentes. Vous pouvez également conserver les liens vers vos sites Web les plus visités. diff --git a/website/versioned_docs/version-v2.8.1/community/showcase/snippetexpander.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx similarity index 100% rename from website/versioned_docs/version-v2.8.1/community/showcase/snippetexpander.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/snippetexpander.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx new file mode 100644 index 000000000..b59174843 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/surge.mdx @@ -0,0 +1,10 @@ +# Surge + +```mdx-code-block +

    + +
    +

    +``` + +[Surge](https://getsurge.io/) est une application de partage de fichiers p2p conçue pour utiliser les technologies blockchain afin d'activer les transferts de fichiers 100 % anonymes. Surge est chiffré de bout en bout, décentralisé et open source. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx new file mode 100644 index 000000000..5390d57fb --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/tinyrdm.mdx @@ -0,0 +1,11 @@ +# Tiny RDM + +```mdx-code-block +

    + + +
    +

    +``` + +L'application [Tiny RDM](https://redis.tinycraft.cc/) est une interface Redis moderne et open-source. Il possède une interface utilisateur magnifique, une gestion de base de données Redis intuitive et compatible avec Windows, Mac et Linux. Il fournit des opérations visuelles de données de clé-valeur, supporte diverses options de décodage et de visualisation des données, possède une console intégrée pour exécuter des commandes, des requêtes de log lentes et plus encore. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx new file mode 100644 index 000000000..ba2a7fccc --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wally.mdx @@ -0,0 +1,10 @@ +# Wally + +```mdx-code-block +

    + +
    +

    +``` + +[Wally](https://ergodox-ez.com/pages/wally) est le flasheur officiel du firmware pour les claviers [Ergodox](https://ergodox-ez.com/). C'est un excellent exemple de ce que vous pouvez réaliser avec Wails : la capacité de combiner la puissance de Go et les riches outils graphiques du monde du développement web. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx new file mode 100644 index 000000000..2e4274330 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/warmine.mdx @@ -0,0 +1,19 @@ +# Lanceur Minecraft pour WarMine + +```mdx-code-block +

    + + +
    +

    +``` + +[Lanceur Minecraft pour WarMine](https://warmine.ru/) est une application Wails qui vous permet facilement de rejoindre le serveur de jeu contenant les mods, ainsi que la gestion de vos comptes de jeu. + +Le Launcher télécharge les fichiers du jeu, vérifie leur intégrité et lance le jeu avec une large gamme d'options de personnalisation. + +Le frontend est écrit en Svelte, le lanceur entier tient dans 9Mo et prend en charge Windows 7-11. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx new file mode 100644 index 000000000..c431f6919 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/wombat.mdx @@ -0,0 +1,10 @@ +# Wombat + +```mdx-code-block +

    + +
    +

    +``` + +[Wombat](https://github.com/rogchap/wombat) est un client gRPC multi-plateforme. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx new file mode 100644 index 000000000..4f5bd993c --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/showcase/ytd.mdx @@ -0,0 +1,10 @@ +# Ytd + +```mdx-code-block +

    + +
    +

    +``` + +[Ytd](https://github.com/marcio199226/ytd/tree/v2-wails) est une application pour télécharger des pistes depuis youtube, créer des listes de lecture hors ligne et les partager avec vos amis, vos amis seront en mesure de lire vos playlists ou de les télécharger pour l'écoute hors ligne, a un lecteur intégré. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx new file mode 100644 index 000000000..297d07c7b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/community/templates.mdx @@ -0,0 +1,73 @@ +--- +sidebar_position: 1 +--- + +# Modèles + +Cette page sert de liste pour les modèles supportés par la communauté. Veuillez soumettre une PR (cliquez sur `Modifier cette page` en bas) pour inclure vos modèles. Pour construire votre propre modèle, veuillez consulter le guide [Modèles](../guides/templates.mdx). + +Pour utiliser ces modèles, exécutez `wails init -n "Votre nom de projet" -t [le lien ci-dessous[@version]]` + +S'il n'y a pas de suffixe de version, la branche principale du modèle de code sera alors utilisé par défaut. S'il y a un suffixe de version, le modèle de code correspondant au tag de cette version sera utilisé. + +Exemple : `wails init -n "Votre nom de projet" -t https://github.com/misitebao/wails-template-vue` + +:::warning Attention + +**Le projet Wails n'entretient pas, et n'est pas responsable des modèles de tierces parties!** + +Si vous n'êtes pas sûr d'un modèle, inspectez `package.json` et `wails.json` pour savoir quels scripts sont exécutés et quels paquets sont installés. + +::: + +## Vue + +- [wails-template-vue](https://github.com/misitebao/wails-template-vue) - Modèle de Wails basé sur Vue (TypeScript intégré, thème sombre, internationalisation, routage de page unique, TailwindCSS) +- [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - Un modèle utilisant JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier) +- [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - Un modèle utilisant TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API avec <script setup>) +- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Modèle Wails basé sur Naive UI (Librairie de composants Vue 3) + +## Angular + +- [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Modèle Angular 15+ prêt à être utilisé en production. +- [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular avec TypeScript, Sass, rechargement à chaud, découpage dynamique de code et i18n + +## React + +- [wails-react-template](https://github.com/AlienRecall/wails-react-template) - Un modèle utilisant reactjs +- [wails-react-template](https://github.com/flin7/wails-react-template) - Un modèle minimal pour React qui supporte le développement en direct +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - Un modèle utilisant Next.js et TypeScript +- [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router +- [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - Un modèle pour React + TypeScript + Vite + TailwindCSS +- [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - Un modèle avec Vite, React, TypeScript, TailwindCSS, et shadcn/ui + +## Svelte + +- [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - Un modèle utilisant Svelte +- [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - Un modèle utilisant Svelte et Vite +- [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - Un modèle utilisant Svelte et Vite avec TailwindCSS v3 +- [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - Un modèle mis à jour en utilisant Svelte v4.2.0 et Vite avec TailwindCSS v3.3.3 +- [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - Un modèle utilisant SvelteKit + +## Solid + +- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - Un modèle utilisant Solid + Ts + Vite +- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-js) - Un modèle utilisant Solid + Js + Vite + +## Elm + +- [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Développez votre application GUI avec de la programmation fonctionnelle et une configuration de développement en direct :tada: :rocket: +- [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine les puissances :muscle: d'Elm + Tailwind CSS + Wails ! Rechargement automatique pris en charge. + +## HTMX + +- [wails-htmx-templ-chi-tailwind](https://github.com/PylotLight/wails-hmtx-templ-template) - Utilisez une combinaison unique de htmx pour interactivité, et de templ pour créer des composants et des formes + +## Pure JavaScript (Vanilla) + +- [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - Un modèle avec rien que du JavaScript, du HTML et du CSS de base + + +## Lit (web components) + +- [wails-lit-shoelace-esbuild-template](https://github.com/Braincompiler/wails-lit-shoelace-esbuild-template) - Wails template providing frontend with lit, Shoelace component library + pre-configured prettier and typescript. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx new file mode 100644 index 000000000..c9cedbcd8 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/building.mdx @@ -0,0 +1,26 @@ +--- +sidebar_position: 6 +--- + +# Compiler votre projet + +À partir du répertoire du projet, exécutez `wails build`. Cela compilera votre projet et sauvegardera le binaire prêt à la production dans le répertoire `build/bin`. + +:::info Linux +If you are using a Linux distribution that does not have webkit2gtk-4.0 (such as Ubuntu 24.04), you will need to add `-tags webkit2_41`. +::: + +Si vous exécutez le binaire, vous devriez voir l'application par défaut : + +```mdx-code-block +
    + +
    +
    +``` + +Pour plus de détails sur les options de compilation, veuillez vous référer à la [documentation du CLI](../reference/cli.mdx#build). diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx new file mode 100644 index 000000000..307029141 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/development.mdx @@ -0,0 +1,16 @@ +--- +sidebar_position: 5 +--- + +# Développez votre application + +Vous pouvez exécuter votre application en mode développement en exécutant `wails dev` à partir du répertoire de votre projet. Cela fera les choses suivantes : + +- Construire votre application et l'exécuter +- Lier votre code Go au frontend pour qu'il puisse être appelé à partir de JavaScript +- En utilisant la puissance de [Vite](https://vitejs.dev/), surveillera les modifications dans vos fichiers Go et reconstruira / ré-exécutera en cas de changement +- Mettra en place un [serveur web](http://localhost:34115) qui servira votre application via un navigateur. Cela vous permet d'utiliser les extensions de votre navigateur préféré. Vous pouvez même appeler votre code Go depuis la console + +Pour commencer, exécutez `wails dev` dans le répertoire du projet. Plus d'informations à ce sujet peuvent être trouvées [ici](../reference/cli.mdx#dev). + +Prochainement : Tutoriel diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx new file mode 100644 index 000000000..383925af1 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/firstproject.mdx @@ -0,0 +1,130 @@ +--- +sidebar_position: 2 +--- + +# Créer un projet + +## Génération de projet + +Maintenant que le CLI est installé, vous pouvez générer un nouveau projet en utilisant la commande `wails init`. + +Choisissez votre framework favori : + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Générer un projet
    Svelte utilisant JavaScript avec:

    + + wails init -n myproject -t svelte + +Si vous préférez utiliser TypeScript:
    + + wails init -n myproject -t svelte-ts + + + + Générer un projet React utilisant JavaScript avec :

    + + wails init -n myproject -t react + +Si vous préférez utiliser TypeScript:
    + + wails init -n myproject -t react-ts + +
    + + Générer un projet Vue utilisant JavaScript avec:

    + + wails init -n myproject -t vue + +Si vous préférez TypeScript:
    + + wails init -n myproject -t vue-ts + +
    + + Générer un projet Preact utilisant JavaScript avec:

    + + wails init -n myproject -t preact + +Si vous préférez TypeScript:
    + + wails init -n myproject -t preact-ts + +
    + + Générer un projet Lit utilisant JavaScript avec:

    + + wails init -n myproject -t lit + +Si vous préférez TypeScript:
    + + wails init -n myproject -t lit-ts + +
    + + Générer un projet Vanilla utilisant JavaScript avec :

    + + wails init -n myproject -t vanilla + +Si vous préférez TypeScript:
    + + wails init -n myproject -t vanilla-ts + +
    + +``` + +
    + +Il y a aussi [des modèles créés par la communauté](../community/templates.mdx) qui sont disponibles et qui offrent différentes possibilités. + +Pour voir les autres options disponibles, vous pouvez exécuter `wails init -help`. Plus de détails peuvent être trouvés dans la [documentation du CLI](../reference/cli.mdx#init). + +## Structure du projet + +Les projets Wails ont la structure suivante: + +``` +. +├── build/ +│ ├── appicon.png +│ ├── darwin/ +│ └── windows/ +├── frontend/ +├── go.mod +├── go.sum +├── main.go +└── wails.json +``` + +### Récapitulatif de la structure du projet + +- `/main.go` - L'application principale +- `/frontend/` - Fichiers de la partie frontend +- `/build/` - Répertoire de construction du projet +- `/build/appicon.png` - L'icône de l'application +- `/build/darwin/` - Fichiers spécifiques pour Mac +- `/build/windows/` - Fichiers spécifiques pour Windows +- `/wails.json` - La configuration du projet +- `/go.mod` - Le fichier du module Go +- `/go.sum` - Le checksum du fichier du module Go + +Le répertoire `frontend` n'a rien de spécifique à Wails et n'importe quel outil de frontend peut être utilisé. + +Le répertoire `build` est utilisé pendant le processus de compilation. Ces fichiers peuvent être mis à jour pour personnaliser vos builds. Si fichiers sont supprimés du répertoire de compilation, les versions par défaut seront régénérées. + +Le nom du module par défaut dans `go.mod` est "changeme". Vous devriez changer cela pour quelque chose de plus approprié. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx new file mode 100644 index 000000000..b0fe8d1cf --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/gettingstarted/installation.mdx @@ -0,0 +1,90 @@ +--- +sidebar_position: 1 +--- + +# Installation + +## Plates-formes Prises en charge + +- Windows 10/11 AMD64/ARM64 +- MacOS 10.13+ AMD64 +- MacOS 11.0+ ARM64 +- Linux AMD64/ARM64 + +## Dépendances + +Wails a un certain nombre de dépendances communes qui sont nécessaires avant l'installation : + +- Go 1.20+ +- NPM (Node 15+) + +### Go + +Télécharger Go à partir de la [Page de téléchargement](https://go.dev/dl/). + +Assurez-vous que vous suivez les instructions officielles de [l'installation de Go](https://go.dev/doc/install). Vous devrez également vous assurer que votre variable d'environnement `PATH` inclut également le chemin vers votre répertoire `~/go/bin`. Redémarrez votre terminal et effectuez les vérifications suivantes : + +- Vérifiez que Go est installé correctement : `go version` +- Vérifiez que "~/go/bin" est dans votre variable PATH : `echo $PATH | grep go/bin` + +### NPM + +Téléchargez le NPM à partir de la [page de téléchargement de Node](https://nodejs.org/en/download/). Il est préférable d'utiliser la dernière version car c'est avec celle-là que nous effectuons nos tests. + +Exécutez `npm --version` pour vérifier. + +## Dépendances spécifiques aux plateformes + +Vous devrez également installer des dépendances spécifiques liés à la plateforme que vous utilisez : + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Wails a besoin que les outils de command line xocde soient installés. Cela peut être fait + en exécutant xcode-select --install. + + + Wails a besoin que WebView2 runtime soit installé. Certaines installations de Windows auront déjà installé cette fonctionnalité. Vous pouvez vérifier en utilisant la commande wails doctor. + + + Linux a besoin de gcc comme outil de compilation en plus de libgtk3 et libwebkit. Plutôt que de lister une tonne de commandes pour différentes distributions, Wails peut essayer de déterminer ce que sont les commandes d'installation pour votre distribution. Exécutez wails doctor après l'installation pour voir de quelles dépendances vous avez besoin. Si votre gestionnaire de distribution/paquet n'est pas pris en charge, veuillez consulter le guide Ajouter une distribution Linux. + + +``` + +## Dépendances optionnelles + +- [UPX](https://upx.github.io/) pour compresser vos applications. +- [NSIS](https://wails.io/docs/guides/windows-installer/) pour générer des installateurs Windows. + +## Installer Wails + +Exécutez `go go install github.com/wailsapp/wails/v2/cmd/wails@latest` pour installer le CLI. + +Note: Si vous obtenez une erreur similaire à ceci: + +```shell +....\Go\pkg\mod\github.com\wailsapp\wails\v2@v2.1.0\pkg\templates\templates.go:28:12: pattern all:ides/*: no matching files found +``` +vérifiez que vous avez installé Go 1.18+ : +```shell +go version +``` + +## Vérification du système + +Exécuter `wails doctor` qui vérifiera si vous avez les bonnes dépendances installées. Si ce n'est pas le cas, il vous conseillera sur ce qui manque et vous aidera à corriger tout problème. + +## La commande `wails` semble manquer ? + +Si votre système signale que la commande `wails` est manquante, assurez-vous que vous avez suivi le guide d'installation correctement. Normalement, cela signifie que le répertoire `go/bin` du répertoire racine de votre utilisateur n'est pas dans la variable d'environnement `PATH` . Vous devrez également normalement fermer et réouvrir toutes les commandes ouvertes afin que les modifications apportées à l'environnement par l'installateur soient reflétées dans l'invite de commande. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx new file mode 100644 index 000000000..1fe2f199f --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/angular.mdx @@ -0,0 +1,14 @@ +# Angular + +Bien que Wails n'ait pas de modèle Angular, il est possible d'utiliser Angular avec Wails. + +## Dev Mode + +Pour que le mode développeur fonctionne avec Angular, vous devez ajouter ce qui suit à votre fichier `wails.json`: + +```json + "frontend:build": "npx ng build", + "frontend:install": "npm install", + "frontend:dev:watcher": "npx ng serve", + "frontend:dev:serverUrl": "http://localhost:4200", +``` \ No newline at end of file diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx new file mode 100644 index 000000000..90ce51cb8 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/application-development.mdx @@ -0,0 +1,273 @@ +# Développement d'applications + +Il n'y a pas de règles gravées dans le marbre pour le développement d'applications avec Wails, mais il y a quelques lignes directrices de base. + +## Configuration de l'application + +Le modèle utilisé par défaut défini que `main.go` est utilisé pour configurer et démarrer l'application, tandis que `app.go` est utilisé pour définir la logique de l'application. + +Le fichier `app.go` va définir une structure qui a 2 méthodes qui agissent comme crochets dans l'application principale: + +```go title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +func (a *App) shutdown(ctx context.Context) { +} +``` + +- La méthode startup est appelée d-s que Wails a donné les ressources nécessaires et qu'il est dans un bon état pour créer les ressources, mettre en place les event listeners et tout ce dont l'application peut avoir besoin pour démarrer. Il est donné un `context.Context` qui est généralement sauvegardé dans un champ struct. Ce contexte est nécessaire pour appeler le [runtime](../reference/runtime/intro.mdx). Si cette méthode renvoie une erreur, l'application se fermera. En mode développement, l'erreur sera affichée dans la console. + +- La méthode d'arrêt sera appelée par Wails à la fin du processus d'arrêt. C'est un bon endroit pour vider la mémoire et effectuer toutes les tâches d'arrêt. + +Le fichier `main.go` consiste généralement en un seul appel à `wails.Run()`, qui accepte la configuration de l'application. Le modèle utilisé par les templates fait qu'avant l'appel à `wails.Run()`, une instance du struct que l'on a définie dans `app.go` est créée et instanciée dans une variable appelée `app`. Cette configuration est l'endroit où nous ajoutons nos callbacks : + +```go {3,9,10} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +Plus d'informations sur les crochets du cycle de vie des applications peuvent être trouvées [ici](../howdoesitwork.mdx#application-lifecycle-callbacks). + +## Méthodes de liaison + +Il est probable que vous vouliez appeler les méthodes Go depuis le frontend. Cela se fait normalement en ajoutant des méthodes publiques à le struct déjà défini dans `app.go`: + +```go {16-18} title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +func (a *App) shutdown(ctx context.Context) { +} + +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s!", name) +} +``` + +Dans la configuration principale de l'application, le paramètre `Bind` est l'endroit où nous pouvons dire à Wails ce que nous voulons lier : + +```go {11-13} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +Cela liera toutes les méthodes publiques de notre structure `App` (cela ne liera jamais les méthodes de démarrage et d'arrêt du système). + +### Traiter avec le contexte lors de la liaison de plusieurs structures + +Si vous voulez lier des méthodes pour des structures multiples, mais que vous voulez que chaque struct conserve une référence au contexte pour que vous puissiez utiliser les fonctions d'exécution... Un bon choix est de passer le contexte de la méthode `OnStartup` à vos instances struct : + +```go +func main() { + + app := NewApp() + otherStruct := NewOtherStruct() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: func(ctx context.Context){ + app.SetContext(ctx) + otherStruct.SetContext(ctx) + }, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + otherStruct + }, + }) + if err != nil { + log.Fatal(err) + } +} +``` + +Also you might want to use Enums in your structs and have models for them on frontend. In that case you should create array that will contain all possible enum values, instrument enum type and bind it to the app: + +```go {16-18} title="app.go" +type Weekday string + +const ( + Sunday Weekday = "Sunday" + Monday Weekday = "Monday" + Tuesday Weekday = "Tuesday" + Wednesday Weekday = "Wednesday" + Thursday Weekday = "Thursday" + Friday Weekday = "Friday" + Saturday Weekday = "Saturday" +) + +var AllWeekdays = []struct { + Value Weekday + TSName string +}{ + {Sunday, "SUNDAY"}, + {Monday, "MONDAY"}, + {Tuesday, "TUESDAY"}, + {Wednesday, "WEDNESDAY"}, + {Thursday, "THURSDAY"}, + {Friday, "FRIDAY"}, + {Saturday, "SATURDAY"}, +} +``` + +In the main application configuration, the `EnumBind` key is where we can tell Wails what we want to bind enums as well: + +```go {11-13} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + EnumBind: []interface{}{ + AllWeekdays, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +This will add missing enums to your `model.ts` file. + +Plus d'informations à sur Binding peuvent être trouvées [ici](../howdoesitwork.mdx#method-binding). + +## Menu de l’application + +Wails prend en charge l'ajout d'un menu à votre application. Ceci est fait en passant un [Menu](../reference/menus.mdx#menu) structuré à la configuration de l'application. Il est courant d'utiliser une méthode qui renvoie un Menu, et encore plus courant pour que cela soit une méthode sur la struct de l'`app` qui soit utilisée pour les hooks du cycle de vie. + +```go {11} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Menu: app.menu(), + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +## Ressources + +La grande chose à propos de la façon dont Wails v2 gère les ressources pour le frontend, est que ce n'est pas le cas! La seule chose que vous devez donner à Wails est un `embed.FS`. C'est à vous de décider comment vous y arrivez. Vous pouvez utiliser les fichiers html/css/js vanilla comme dans le modèle vanilla. Vous pourriez avoir un système de compilation compliqué, peu importe. + +Quand la commande `wails dev` est exécutée, elle vérifiera le fichier de projet `wails.json` à la racine du projet. Il y a 2 clés dans le fichier du projet qui sont lues : + +- "frontend:install" +- "frontend:build" + +Le premier, si fourni, sera exécuté dans le répertoire `frontend` pour installer les modules. Le second, si fourni, sera exécuté dans le répertoire `frontend` pour construire le projet frontend. + +Si ces 2 clés ne sont pas fournies, alors Wails ne fait absolument rien avec le frontend. Il n'attend que `embed.FS`. + +### AssetsHandler + +Une application Wails v2 peut éventuellement définir un `http.Handler` dans `options.app`, qui permet de se connecter à l'AssetServer pour créer des fichiers à la volée ou traiter les requêtes POST/PUT. Les requêtes GET sont toujours traitées d'abord par le `assets` FS. Si le FS ne trouve pas le fichier demandé, la requête sera transmise au `http.Handler`. Toute requête autre que GET sera traitée directement par le `AssetsHandler` si spécifié. Il est également possible d'utiliser le `AssetsHandler` uniquement en spécifiant `nil` dans l'option `Assets`. + +## Serveur de développement embarqué + +Exécuter `wails dev` démarrera le serveur de développement intégré qui démarrera un observateur de fichiers dans votre répertoire de projet. Par par défaut, si un fichier change, wails vérifie s'il s'agit d'un fichier d'application (par défaut: `.go`, configurable avec l'option `-e`). Si c'est le cas, il reconstruira votre application et la relancera. Si le fichier modifié se trouvait dans les actifs, il lancera un rechargement après un court laps de temps. + +Le serveur de développement utilise une technique appelée "debouncing", ce qui signifie qu'il ne se recharge pas tout de suite, comme il peut y avoir plusieurs fichiers modifiés en un court laps de temps. Lorsqu'un déclencheur se produit, il attend un temps défini avant d'émettre un rechargement. Si un autre déclencheur se produit, le temps d'attente se réinitialise avant un prochain rechargement. Par défaut, cette période est définie à `100ms`. Si cette valeur ne fonctionne pas pour votre projet, elle peut être configurée en utilisant l'option `-debounce`. Si elle est utilisée, cette valeur sera enregistrée dans la configuration de votre projet et deviendra la valeur par défaut. + +## Serveur de développement externe + +Certains frameworks sont fournis avec leur propre serveur de rechargement en direct, cependant ils ne seront pas en mesure de tirer parti des liaisons Wails Go. Dans ce scénario, il est préférable d'exécuter un script qui va surveiller le projet dans dossier build, dossier que Wails surveille aussi. Pour un exemple, voir le modèle svelte par défaut qui utilise [rollup](https://rollupjs.org/guide/en/). + +### Créer une application React + +Le processus pour créer un projet Reactest un peu plus compliqué. Afin de prendre en charge le rechargement du frontend en direct, la configuration suivante doit être ajoutée à votre `wails.json`: + +```json + "frontend:dev:watcher": "yarn start", + "frontend:dev:serverUrl": "http://localhost:3000", +``` + +La commande `frontend:dev:watcher` démarrera le serveur de développement React (hébergé sur le port `3000` typiquement). La commande `frontend:dev:serverUrl` demande ensuite à Wails d'exposer les ressources depuis le serveur de développement lors du chargement du frontend, plutôt que depuis le dossier de construction. En plus de ce qui précède, le fichier `index.html` doit être mis à jour avec les éléments suivants : + +```html + + + + + +``` + +Ceci est nécessaire, car la commande watcher qui reconstruit le frontend empêche Wails de les injecter. Ça contourne le problème en assurant les scripts sont toujours injectés. Avec cette configuration, `wails dev` peut être exécuté, ce qui construira le frontend et le backend de manière appropriée avec le rechargement à chaud activé. De plus, lorsque vous accédez à l'application à partir d'un navigateur, les outils de développement de React peuvent maintenant être utilisés sur une version non minifiée de l'application pour le débogage. Enfin, pour des compilations plus rapides, `wails dev -s` peut être exécuté pour passer la construction par défaut du frontend par Wails car c'est une étape inutile. + +## Module Go + +Les modèles Wails par défaut génèrent un fichier `go.mod` qui contient le nom de module "changeme". Vous devriez changer ceci pour quelque chose de plus approprié après la génération du projet. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx new file mode 100644 index 000000000..7a302e736 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Construction cross-plateforme avec Github Actions + +Pour construire un projet Wails pour toutes les plateformes disponibles, vous devez créer un build de l'application pour chaque système d'exploitation. Une méthode efficace pour y parvenir est d'utiliser GitHub Actions. + +Une action qui facilite la création d'une application Wails est disponible sur : +https://github.com/dAppServer/wails-build-action + +Dans le cas où l'action existante ne répond pas à vos exigences, vous ne pouvez sélectionner que les étapes nécessaires à partir de la source : +https://github.com/dAppServer/wails-build-action/blob/main/action.yml + +Voici un exemple complet qui démontre la construction d'une application lors de la création d'une nouvelle balise Git et qui la téléversera ensuite sur les artefacts Actions : + +```yaml +name: Wails build + +on: + push: + tags: + # Matche n'importe quel nouveau tag + - '*' + +env: + # Nécessaire pour la plupart des environnement, car des soucis de build peuvent arriver à cause de soucis de mémoire + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Afin d'éviter que l'échec du build d'une plateforme n'impacte les autres + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +Cet exemple offre des opportunités pour diverses améliorations, comprenant : + +- Mise en cache des dépendances +- Signature de code +- Envoi vers des plateformes comme S3, Supbase, etc. +- Injection de secrets en tant que variables d'environnement +- Utiliser des variables d'environnement comme variables de compilation (telles que la variable de version extraite de la balise Git actuelle) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx new file mode 100644 index 000000000..e4cd373ae --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/custom-protocol-schemes.mdx @@ -0,0 +1,204 @@ +# Custom Protocol Scheme association + +Custom Protocols feature allows you to associate specific custom protocol with your app so that when users open links with this protocol, +your app is launched to handle them. This can be particularly useful to connect your desktop app with your web app. +In this guide, we'll walk through the steps to implement custom protocols in Wails app. + +## Set Up Custom Protocol Schemes Association: + +To set up custom protocol, you need to modify your application's wails.json file. +In "info" section add a "protocols" section specifying the protocols your app should be associated with. + +For example: + +```json +{ + "info": { + "protocols": [ + { + "scheme": "myapp", + "description": "My App Protocol", + "role": "Editor" + } + ] + } +} +``` + +| Propriété | Description | +| :----------- | :------------------------------------------------------------------------------------------ | +| scheme | Custom Protocol scheme. e.g. myapp | +| description | Windows seulement. La description. | +| role | macOS uniquement. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Spécificités par platefome : + +### MacOS + +When you open custom protocol with your app, the system will launch your app and call the `OnUrlOpen` function in your Wails app. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnUrlOpen: func(url string) { println(url) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows Custom Protocol Schemes is supported only with NSIS installer. During installation, the installer will create a +registry entry for your schemes. When you open url with your app, new instance of app is launched and url is passed +as argument to your app. To handle this you should parse command line arguments in your app. Example: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there (note that `%u` is important in Exec). Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=x-scheme-handler/myapp; +``` + +2. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +``` + +3. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +# copy icons to Yaru theme as well. For some reason Ubuntu didn't pick up fileicons from hicolor theme +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +nfpm pkg --packager deb --target . +``` + +7. Now when your package is installed, your app will be associated with custom protocol scheme. When you open url with your app, + new instance of app is launched and file path is passed as argument to your app. + To handle this you should parse command line arguments in your app. Example: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx new file mode 100644 index 000000000..14a2ebe5b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/dynamic-assets.mdx @@ -0,0 +1,142 @@ +# Ressources dynamiques + +:::info + +This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details + +::: + +Si vous voulez charger ou générer des ressources pour votre frontend de manière dynamique, vous pouvez y parvenir en utilisant l'option [AssetsHandler](../reference/options#assetshandler). Le AssetsHandler est un générique`http.Handler` qui sera appelé pour toute requête non GET sur le serveur d'assets et pour les requêtes GET qui ne peuvent pas être servies car l'asset n'est pas trouvé. + +En installant un AssetsHandler personnalisé, vous pouvez servir vos propres ressources en utilisant un serveur de ressources personnalisé. + +## Exemple + +Dans notre exemple de projet, nous allons créer un gestionnaire de ressources simple qui chargera les fichiers à partir du disque: + +```go title=main.go {17-36,49} +package main + +import ( + "embed" + "fmt" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "net/http" + "os" + "strings" +) + +//go:embed all:frontend/dist +var assets embed.FS + +type FileLoader struct { + http.Handler +} + +func NewFileLoader() *FileLoader { + return &FileLoader{} +} + +func (h *FileLoader) ServeHTTP(res http.ResponseWriter, req *http.Request) { + var err error + requestedFilename := strings.TrimPrefix(req.URL.Path, "/") + println("Requesting file:", requestedFilename) + fileData, err := os.ReadFile(requestedFilename) + if err != nil { + res.WriteHeader(http.StatusBadRequest) + res.Write([]byte(fmt.Sprintf("Could not load file %s", requestedFilename))) + } + + res.Write(fileData) +} + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "helloworld", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + Handler: NewFileLoader(), + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 255}, + OnStartup: app.startup, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +Lorsque nous exécutons l'application en mode dev en utilisant `wails dev`, nous verrons la sortie suivante : + +``` +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed, using AssetHandler +Requesting file: favicon.ico +``` + +Comme vous pouvez le voir, le gestionnaire d'actifs est appelé lorsque le serveur d'assets par défaut est incapable de servir le fichier `favicon.ico`. + +Si vous faites un clic droit sur l'application principale et sélectionnez "inspecter" pour afficher les devtools, vous pouvez tester cette fonctionnalité en tapant ce qui suit dans la console : + +``` +let response = await fetch('does-not-exist.txt'); +``` + +Cela générera une erreur dans les devtools. Nous pouvons voir que l'erreur est ce que nous attendons est retourné par notre gestionnaire de ressources personnalisées : + +```mdx-code-block +

    + +

    +``` + +Cependant, si nous demandons `go.mod`, nous verrons la sortie suivante : + +```mdx-code-block +

    + +

    +``` + +Cette technique peut être utilisée pour charger des images directement dans la page. Si nous avons mis à jour notre modèle vanilla par défaut et a remplacé l'image du logo : + +```html + +``` + +avec : + +```html + +``` + +Nous verrions ensuite ce qui suit: + +```mdx-code-block +

    + +

    +``` + +:::warning + +Exposer votre système de fichiers de cette manière est un risque de sécurité. Il est recommandé de gérer correctement l'accès à votre système de fichiers. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx new file mode 100644 index 000000000..973a4d217 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/file-association.mdx @@ -0,0 +1,243 @@ +# Associations de fichiers + +La fonction d'association de fichiers vous permet d'associer des types de fichiers spécifiques à votre application afin que lorsque les utilisateurs ouvrent ces fichiers, +votre application est lancée pour les gérer. Cela peut être particulièrement utile pour les éditeurs de texte, les visualisateurs d'images ou n'importe quelle application +qui fonctionne avec des formats de fichiers spécifiques. Dans ce guide, nous allons parcourir les étapes pour implémenter l'association de fichiers dans l'application Wails. + +## Configurer l'association de fichiers : + +Pour configurer l'association de fichiers, vous devez modifier le fichier wails.json de votre application. +Dans la section "info", ajoutez une section "fileAssociations" spécifiant les types de fichiers auxquels votre application doit être associée. + +Par exemple : + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Propriété | Description | +| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | L'extension. ex: png | +| name | Le nom de l'extension. ex: PNG File | +| iconName | Le nom de l'icône sans extension. Les icônes doivent être situées dans le dossier de build. Des icônes appropriées seront générées à partir du fichier .png pour macOS et Windows | +| description | Windows seulement. La description. Il est affiché dans la colonne `Type` dans l'explorateur Windows. | +| role | macOS uniquement. Rôle de l'application par rapport au type. Correspond au rôle CFBundleTypeRole. | + +## Spécificités par platefome : + +### MacOS + +Lorsque vous ouvrez un fichier (ou des fichiers) avec votre application, le système lancera votre application et appellera la fonction `OnFileOpen` dans votre application Wails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +L'association de fichiers dans Windows n'est prise en charge qu'avec l'installateur NSS. Pendant l'installation, l'installateur créera une entrée de registre +pour vos associations de fichiers. Lorsque vous ouvrez un fichier avec votre application, une nouvelle instance d'application est lancée et le chemin d'accès est passé à +comme argument à votre application. Pour gérer cela, vous devez analyser les arguments de la ligne de commande dans votre application. Exemple: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +Vous pouvez également activer le verrouillage par instance unique pour votre application. Dans ce cas, lorsque vous ouvrez un fichier avec votre application, la nouvelle instance d'application n'est pas lancée +et les arguments sont passés à l'instance déjà en cours d'exécution. Consultez le guide de verrouillage de l'instance unique pour plus de détails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### Linux + +Actuellement, Wails ne prend pas en charge l'association de fichiers pour Linux. Vous devez donc créer des associations de fichiers manuellement. +Par exemple, si vous distribuez votre application en tant que package .deb, vous pouvez créer des associations de fichiers en ajoutant les fichiers requis dans votre bundle. +Vous pouvez utiliser [nfpm](https://nfpm.goreleaser.com/) pour créer un package .deb pour votre application. + +1. Créez un fichier .desktop pour votre application et spécifiez des associations de fichiers là-bas. Exemple: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Créer un fichier de type MIME. Exemple: + +```xml + + + + Wails Application File + + + +``` + +3. Créez des icônes pour vos types de fichiers. Les icônes SVG sont recommandées. +4. Préparez les scripts postInstall/postRemove pour votre paquet. Exemple: + +```sh +# Recharge les types MIME pour enregistrer votre association de fichiers +update-mime-database /usr/share/mime +# Recharge la base de données du bureau afin de rendre disponible votre application dans les choix possibles +update-desktop-database /usr/share/applications +# Mise à jour des icônes +update-icon-caches /usr/share/icons/* +``` + +5. Configurez nfpm pour utiliser vos scripts et fichiers. Exemple: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-test.svg +# copy icons to Yaru theme as well. For some reason Ubuntu didn't pick up fileicons from hicolor theme +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Construisez votre paquet .deb en utilisant nfpm: + +```sh +nfpm pkg --packager deb --target . +``` + +7. Maintenant que votre paquet est installé, votre application sera associée aux types de fichiers qui ont été spécifiés. Lorsque vous ouvrez un fichier avec votre application, une nouvelle instance est lancée et le chemin du fichier est passé en argument à votre application. + Pour gérer cela, vous devez analyser les arguments de la ligne de commande dans votre application. Exemple: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +Vous pouvez également activer le verrouillage par instance unique pour votre application. Dans ce cas, lorsque vous ouvrez un fichier avec votre application, la nouvelle instance d'application n'est pas lancée +et les arguments sont passés à l'instance déjà en cours d'exécution. Consultez le guide de verrouillage de l'instance unique pour plus de détails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx new file mode 100644 index 000000000..bbeb338f1 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frameless.mdx @@ -0,0 +1,87 @@ +# Applications sans cadre + +Wails prend en charge la création d'applications qui n'ont pas de cadres. Ceci peut être réalisé en utilisant le champ [frameless](../reference/options.mdx#frameless) dans [Application Options](../reference/options.mdx#application-options). + +Wails offre une solution simple pour faire glisser la fenêtre: N'importe quel élément HTML qui a le style CSS `--wails-draggable:drag` agira comme une "poignée de glisser". Cette propriété s'applique à tous les éléments enfants. Si vous devez indiquer qu'un élément imbriqué ne doit pas glisser, alors utilisez l'attribut '--wails-draggable:no-drag' sur cet élément. + +```html + + + + + + + +
    + + +
    +
    + + + + +``` + +Pour certains projets, l'utilisation d'une variable CSS peut ne pas être possible en raison du style dynamique. Dans ce cas, vous pouvez utiliser les options `CSSDragProperty` et `CSSDragValue` pour définir une propriété et une valeur qui seront utilisées pour indiquer régions glissables : + +```go title=main.go +package main + +import ( + "embed" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "alwaysontop", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Frameless: true, + CSSDragProperty: "widows", + CSSDragValue: "1", + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +```html title=index.html + + + + + + alwaysontop + + +
    + + + +``` + +:::info Plein écran + +Si vous autorisez votre application à être en plein écran, cette fonctionnalité de glissement sera désactivée. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx new file mode 100644 index 000000000..ea101019a --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/frontend.mdx @@ -0,0 +1,72 @@ +# Frontend + +## Injection de script + +Quand Wails sert votre fichier `index.html`, par défaut, il injectera 2 entrées de script dans la balise `` pour charger `/wails/ipc.js` et `/wails/runtime.js`. Ces fichiers installent respectivement les bindings et les runtime. + +Le code ci-dessous montre où ils sont injectés par défaut : + +```html + + + injection example + + + + + + + +
    Please enter your name below 👇
    +
    + + +
    + + + + +``` + +### Remplacer l'injection de script par défaut + +Pour fournir plus de flexibilité aux développeurs, il y a une balise meta qui peut être utilisée pour personnaliser ce comportement: + +```html + +``` + +Les options sont les suivantes : + +| Valeur | Description | +| ------------------- | -------------------------------------------------------------- | +| noautoinjectruntime | Pour désactiver l'injection automatique de `/wails/runtime.js` | +| noautoinjectipc | Pour désactiver l'injection automatique de `/wails/ipc.js` | +| noautoinject | Pour désactiver l'injection automatique de tous les scripts | + +Plusieurs options peuvent être utilisées à condition qu'elles soient séparées par des virgules. + +Ce code est parfaitement valide et fonctionne de la même manière que la version avec l'auto-injection : + +```html + + + injection example + + + + + + +
    Please enter your name below 👇
    +
    + + +
    + + + + + + +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx new file mode 100644 index 000000000..bd732e283 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/ides.mdx @@ -0,0 +1,127 @@ +# IDEs + +Wails vise à fournir une grande expérience de développement. À cet effet, nous supportons maintenant la génération d'une configuration spécifique IDE pour fournir une configuration plus souple du projet. + +Currently, we support [Visual Studio Code](https://code.visualstudio.com/) and [Goland](https://www.jetbrains.com/go/). + +## Visual Studio Code + +```mdx-code-block +

    + +

    +``` + +Lors de la génération d'un projet en utilisant l'option `-ide vscode` , les fichiers IDE seront créés à côté des autres fichiers du projet. Ces fichiers sont placés dans le répertoire `.vscode` et fournissent la configuration correcte pour déboguer votre application. + +Les 2 fichiers générés sont `tasks.json` et `launch.json`. Ci-dessous se trouvent les fichiers générés par défaut : + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/myproject.exe" + ] + } + ] +} +``` + +```json title="launch.json" +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Wails: Debug myproject", + "type": "go", + "request": "launch", + "mode": "exec", + "program": "${workspaceFolder}/build/bin/myproject.exe", + "preLaunchTask": "build", + "cwd": "${workspaceFolder}", + "env": {} + } + ] +} +``` + +### Configuration des étapes d'installation et de construction + +Le fichier `tasks.json` est simple pour le projet par défaut car il n'y a pas d'étapes `npm install` ou `npm build` nécessaire. Pour les projets qui ont une étape de construction en frontend comme avec Svelte, nous devrions modifier `tasks.json` pour ajouter les étapes d'installation et de construction suivantes : + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "npm install", + "type": "npm", + "script": "install", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "npm run build", + "type": "npm", + "script": "build", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/vscode.exe" + ], + "dependsOn": ["npm install", "npm run build"] + } + ] +} +``` + +:::info Améliorations futures + +Dans le futur, nous espérons générer un `tasks.json` qui inclut les étapes d'installation et de construction automatiquement. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx new file mode 100644 index 000000000..6bd2002fc --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux-distro-support.mdx @@ -0,0 +1,103 @@ +# Prise en charge des distributions Linux + +## Vue d'ensemble + +Wails offre le support de Linux, mais fournir des instructions d'installation pour toutes les distributions disponibles est une tâche impossible. À la place, Wails essaie de déterminer si les paquets dont vous avez besoin pour développer des applications sont disponibles via le gestionnaire de paquets de votre système. Actuellement, nous supportons les gestionnaires de paquets suivants : + +- apt +- dnf +- emerge +- eopkg +- nixpkgs +- pacman +- zypper + +## Ajout des noms de paquets + +Il peut y avoir des cas où votre distribution de linux utilise un des gestionnaires de paquets pris en charge mais le nom du paquet est différent. Par exemple, vous pouvez utiliser un dérivé Ubuntu, mais le nom du paquet pour gtk peut être différent. Wails tente de trouver le paquet correct en itérant une liste de noms de paquets. La liste des paquets est stockée dans un fichier spécifique dans le dossier `v2/internal/system/packagemanager` . Dans notre exemple, ce serait `v2/internal/system/packagemanager/apt.go`. + +Dans ce fichier, la liste des paquets est définie par la méthode `Packages()`: + +```go +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +Supposons que dans notre distribution linux, `libgtk-3` est empaqueté sous le nom `lib-gtk3-dev`. Nous pourrions ajouter le support de ce paquet en ajoutant la ligne suivante : + +```go {5} +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + {Name: "lib-gtk3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +## Ajout de nouveaux gestionnaires de paquets + +Pour ajouter un nouveau gestionnaire de paquets, effectuez les étapes suivantes : + +- Créez un nouveau fichier dans `v2/internal/system/packagemanager` appelé `.go`, où `` est le nom du gestionnaire de paquets. +- Définit une structure conforme à l'interface du gestionnaire de paquets définie dans `pm.go`: + +```go +type PackageManager interface { + Name() string + Packages() packagemap + PackageInstalled(*Package) (bool, error) + PackageAvailable(*Package) (bool, error) + InstallCommand(*Package) string +} +``` + +- `Name()` doit retourner le nom du gestionnaire de paquets +- `Packages()` doit retourner une `packagemap`, qui fournit des noms de fichiers candidats pour les dépendances +- `PackageInstalled()` devrait retourner `true` si le paquet donné est installé +- `PackageAvailable()` devrait retourner `true` si le paquet donné n'est pas installé mais disponible pour l'installation +- `InstallCommand()` doit retourner la commande exacte pour installer le nom du paquet donné + +Jetez un coup d'œil au code des autres gestionnaires de paquets pour avoir une idée de comment cela fonctionne. + +:::info Rappel + +Si vous ajoutez le support d'un nouveau gestionnaire de paquets, n'oubliez pas de mettre également à jour cette page ! + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx new file mode 100644 index 000000000..415418ebb --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.10/guides/linux.mdx @@ -0,0 +1,70 @@ +# Linux + +Cette page a divers guides liés au développement d'applications Wails pour Linux. + +## Video tag doesn't fire "ended" event + +Lorsque vous utilisez un tag vidéo, l'événement "terminé" n'est pas déclenché lorsque la vidéo est finie. Ceci est un bogue dans WebkitGTK, cependant vous pouvez utiliser le contournement suivant pour le corriger : + +```js +videoTag.addEventListener("timeupdate", (event) => { + if (event.target.duration - event.target.currentTime < 0.2) { + let ended = new Event("ended"); + event.target.dispatchEvent(ended); + } +}); +``` + +Source : [Lyimmi](https://github.com/Lyimmi) sur le [forum de discussion](https://github.com/wailsapp/wails/issues/1729#issuecomment-1212291275) + +## GStreamer error when using Audio or Video elements + +If you are seeing the following error when including `

+ +
+
+

HTML5 Source

+
Item 1
+
Item 2
+
Item 3
+
+ +
+

HTML5 Drop

+

Drop here

+
+ +
+

File Drop

+

Drop files here

+
+
+ +
+

Event Log

+
+
+`; + +// Get all draggable items and drop zones +const draggables = document.querySelectorAll('.draggable'); +const dropZone = document.getElementById('dropZone'); +const fileDropZone = document.getElementById('fileDropZone'); +const eventLog = document.getElementById('eventLog'); +const dropMessage = document.getElementById('dropMessage'); +const fileDropMessage = document.getElementById('fileDropMessage'); + +let draggedItem = null; +let eventCounter = 0; + +// Function to log events +function logEvent(eventName, details = '') { + eventCounter++; + const timestamp = new Date().toLocaleTimeString(); + const logEntry = document.createElement('div'); + logEntry.className = `log-entry ${eventName.replace(' ', '-').toLowerCase()}`; + logEntry.textContent = `[${timestamp}] ${eventCounter}. ${eventName} ${details}`; + eventLog.insertBefore(logEntry, eventLog.firstChild); + + // Keep only last 20 events + while (eventLog.children.length > 20) { + eventLog.removeChild(eventLog.lastChild); + } + + console.log(`Event: ${eventName} ${details}`); +} + +// Add event listeners to draggable items +draggables.forEach(item => { + // Drag start + item.addEventListener('dragstart', (e) => { + draggedItem = e.target; + e.target.classList.add('dragging'); + e.dataTransfer.effectAllowed = 'copy'; + e.dataTransfer.setData('text/plain', e.target.dataset.item); + logEvent('drag-start', `- Started dragging: ${e.target.dataset.item}`); + }); + + // Drag end + item.addEventListener('dragend', (e) => { + e.target.classList.remove('dragging'); + logEvent('drag-end', `- Ended dragging: ${e.target.dataset.item}`); + }); +}); + +// Add event listeners to HTML drop zone +dropZone.addEventListener('dragenter', (e) => { + e.preventDefault(); + dropZone.classList.add('drag-over'); + logEvent('drag-enter', '- Entered HTML drop zone'); +}); + +dropZone.addEventListener('dragover', (e) => { + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + // Don't log every dragover to avoid spam +}); + +dropZone.addEventListener('dragleave', (e) => { + if (e.target === dropZone) { + dropZone.classList.remove('drag-over'); + logEvent('drag-leave', '- Left HTML drop zone'); + } +}); + +dropZone.addEventListener('drop', (e) => { + e.preventDefault(); + dropZone.classList.remove('drag-over'); + + const data = e.dataTransfer.getData('text/plain'); + logEvent('drop', `- Dropped in HTML zone: ${data}`); + + if (draggedItem) { + // Create a copy of the dragged item + const droppedElement = document.createElement('div'); + droppedElement.className = 'dropped-item'; + droppedElement.textContent = data; + + // Remove the placeholder message if it exists + if (dropMessage) { + dropMessage.style.display = 'none'; + } + + dropZone.appendChild(droppedElement); + } + + draggedItem = null; +}); + +// Add event listeners to file drop zone +fileDropZone.addEventListener('dragenter', (e) => { + e.preventDefault(); + fileDropZone.classList.add('drag-over'); + logEvent('drag-enter', '- Entered file drop zone'); +}); + +fileDropZone.addEventListener('dragover', (e) => { + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; +}); + +fileDropZone.addEventListener('dragleave', (e) => { + if (e.target === fileDropZone) { + fileDropZone.classList.remove('drag-over'); + logEvent('drag-leave', '- Left file drop zone'); + } +}); + +fileDropZone.addEventListener('drop', (e) => { + e.preventDefault(); + fileDropZone.classList.remove('drag-over'); + + const files = [...e.dataTransfer.files]; + if (files.length > 0) { + logEvent('file-drop', `- Dropped ${files.length} file(s)`); + + // Hide the placeholder message + if (fileDropMessage) { + fileDropMessage.style.display = 'none'; + } + + // Display dropped files + files.forEach(file => { + const fileElement = document.createElement('div'); + fileElement.className = 'dropped-file'; + + // Format file size + let size = file.size; + let unit = 'bytes'; + if (size > 1024 * 1024) { + size = (size / (1024 * 1024)).toFixed(2); + unit = 'MB'; + } else if (size > 1024) { + size = (size / 1024).toFixed(2); + unit = 'KB'; + } + + fileElement.textContent = `📄 ${file.name} (${size} ${unit})`; + fileDropZone.appendChild(fileElement); + }); + } +}); + +// Log when page loads +window.addEventListener('DOMContentLoaded', () => { + logEvent('page-loaded', '- Wails drag-and-drop test page ready'); + console.log('Wails Drag and Drop test application loaded'); + + // Check if Wails drag and drop is enabled + if (window.wails && window.wails.flags) { + logEvent('wails-status', `- Wails DnD enabled: ${window.wails.flags.enableWailsDragAndDrop}`); + } + + // IMPORTANT: Register Wails drag-and-drop handlers to prevent browser navigation + // This will ensure external files don't open in new windows when dropped anywhere + if (window.runtime && window.runtime.OnFileDrop) { + window.runtime.OnFileDrop((x, y, paths) => { + logEvent('wails-file-drop', `- Wails received ${paths.length} file(s) at (${x}, ${y})`); + console.log('Wails OnFileDrop:', paths); + }, false); // false = don't require drop target, handle all file drops + logEvent('wails-setup', '- Wails OnFileDrop handlers registered'); + } +}); \ No newline at end of file diff --git a/v2/examples/dragdrop-test/frontend/src/style.css b/v2/examples/dragdrop-test/frontend/src/style.css new file mode 100644 index 000000000..f5d071597 --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/src/style.css @@ -0,0 +1,33 @@ +html { + background-color: rgba(27, 38, 54, 1); + text-align: center; + color: white; + height: 100%; + overflow: hidden; +} + +body { + margin: 0; + color: white; + font-family: "Nunito", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", + "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", + sans-serif; + height: 100%; + overflow: hidden; +} + +@font-face { + font-family: "Nunito"; + font-style: normal; + font-weight: 400; + src: local(""), + url("assets/fonts/nunito-v16-latin-regular.woff2") format("woff2"); +} + +#app { + height: 100vh; + text-align: center; + overflow: hidden; + box-sizing: border-box; + padding: 10px; +} diff --git a/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.d.ts b/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.d.ts new file mode 100644 index 000000000..02a3bb988 --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.d.ts @@ -0,0 +1,4 @@ +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export function Greet(arg1:string):Promise; diff --git a/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.js b/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.js new file mode 100644 index 000000000..c71ae77cb --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/wailsjs/go/main/App.js @@ -0,0 +1,7 @@ +// @ts-check +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export function Greet(arg1) { + return window['go']['main']['App']['Greet'](arg1); +} diff --git a/v2/examples/dragdrop-test/frontend/wailsjs/runtime/package.json b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/package.json new file mode 100644 index 000000000..1e7c8a5d7 --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/package.json @@ -0,0 +1,24 @@ +{ + "name": "@wailsapp/runtime", + "version": "2.0.0", + "description": "Wails Javascript runtime library", + "main": "runtime.js", + "types": "runtime.d.ts", + "scripts": { + }, + "repository": { + "type": "git", + "url": "git+https://github.com/wailsapp/wails.git" + }, + "keywords": [ + "Wails", + "Javascript", + "Go" + ], + "author": "Lea Anthony ", + "license": "MIT", + "bugs": { + "url": "https://github.com/wailsapp/wails/issues" + }, + "homepage": "https://github.com/wailsapp/wails#readme" +} diff --git a/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.d.ts b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.d.ts new file mode 100644 index 000000000..4445dac21 --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.d.ts @@ -0,0 +1,249 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +export interface Position { + x: number; + y: number; +} + +export interface Size { + w: number; + h: number; +} + +export interface Screen { + isCurrent: boolean; + isPrimary: boolean; + width : number + height : number +} + +// Environment information such as platform, buildtype, ... +export interface EnvironmentInfo { + buildType: string; + platform: string; + arch: string; +} + +// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit) +// emits the given event. Optional data may be passed with the event. +// This will trigger any event listeners. +export function EventsEmit(eventName: string, ...data: any): void; + +// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name. +export function EventsOn(eventName: string, callback: (...data: any) => void): () => void; + +// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple) +// sets up a listener for the given event name, but will only trigger a given number times. +export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void; + +// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce) +// sets up a listener for the given event name, but will only trigger once. +export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void; + +// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff) +// unregisters the listener for the given event name. +export function EventsOff(eventName: string, ...additionalEventNames: string[]): void; + +// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall) +// unregisters all listeners. +export function EventsOffAll(): void; + +// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint) +// logs the given message as a raw message +export function LogPrint(message: string): void; + +// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace) +// logs the given message at the `trace` log level. +export function LogTrace(message: string): void; + +// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug) +// logs the given message at the `debug` log level. +export function LogDebug(message: string): void; + +// [LogError](https://wails.io/docs/reference/runtime/log#logerror) +// logs the given message at the `error` log level. +export function LogError(message: string): void; + +// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal) +// logs the given message at the `fatal` log level. +// The application will quit after calling this method. +export function LogFatal(message: string): void; + +// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo) +// logs the given message at the `info` log level. +export function LogInfo(message: string): void; + +// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning) +// logs the given message at the `warning` log level. +export function LogWarning(message: string): void; + +// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload) +// Forces a reload by the main application as well as connected browsers. +export function WindowReload(): void; + +// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp) +// Reloads the application frontend. +export function WindowReloadApp(): void; + +// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop) +// Sets the window AlwaysOnTop or not on top. +export function WindowSetAlwaysOnTop(b: boolean): void; + +// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme) +// *Windows only* +// Sets window theme to system default (dark/light). +export function WindowSetSystemDefaultTheme(): void; + +// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme) +// *Windows only* +// Sets window to light theme. +export function WindowSetLightTheme(): void; + +// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme) +// *Windows only* +// Sets window to dark theme. +export function WindowSetDarkTheme(): void; + +// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter) +// Centers the window on the monitor the window is currently on. +export function WindowCenter(): void; + +// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle) +// Sets the text in the window title bar. +export function WindowSetTitle(title: string): void; + +// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen) +// Makes the window full screen. +export function WindowFullscreen(): void; + +// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen) +// Restores the previous window dimensions and position prior to full screen. +export function WindowUnfullscreen(): void; + +// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen) +// Returns the state of the window, i.e. whether the window is in full screen mode or not. +export function WindowIsFullscreen(): Promise; + +// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) +// Sets the width and height of the window. +export function WindowSetSize(width: number, height: number): void; + +// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) +// Gets the width and height of the window. +export function WindowGetSize(): Promise; + +// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize) +// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. +// Setting a size of 0,0 will disable this constraint. +export function WindowSetMaxSize(width: number, height: number): void; + +// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize) +// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. +// Setting a size of 0,0 will disable this constraint. +export function WindowSetMinSize(width: number, height: number): void; + +// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition) +// Sets the window position relative to the monitor the window is currently on. +export function WindowSetPosition(x: number, y: number): void; + +// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition) +// Gets the window position relative to the monitor the window is currently on. +export function WindowGetPosition(): Promise; + +// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide) +// Hides the window. +export function WindowHide(): void; + +// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow) +// Shows the window, if it is currently hidden. +export function WindowShow(): void; + +// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise) +// Maximises the window to fill the screen. +export function WindowMaximise(): void; + +// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise) +// Toggles between Maximised and UnMaximised. +export function WindowToggleMaximise(): void; + +// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise) +// Restores the window to the dimensions and position prior to maximising. +export function WindowUnmaximise(): void; + +// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised) +// Returns the state of the window, i.e. whether the window is maximised or not. +export function WindowIsMaximised(): Promise; + +// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise) +// Minimises the window. +export function WindowMinimise(): void; + +// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise) +// Restores the window to the dimensions and position prior to minimising. +export function WindowUnminimise(): void; + +// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised) +// Returns the state of the window, i.e. whether the window is minimised or not. +export function WindowIsMinimised(): Promise; + +// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal) +// Returns the state of the window, i.e. whether the window is normal or not. +export function WindowIsNormal(): Promise; + +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) +// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; + +// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall) +// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system. +export function ScreenGetAll(): Promise; + +// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) +// Opens the given URL in the system browser. +export function BrowserOpenURL(url: string): void; + +// [Environment](https://wails.io/docs/reference/runtime/intro#environment) +// Returns information about the environment +export function Environment(): Promise; + +// [Quit](https://wails.io/docs/reference/runtime/intro#quit) +// Quits the application. +export function Quit(): void; + +// [Hide](https://wails.io/docs/reference/runtime/intro#hide) +// Hides the application. +export function Hide(): void; + +// [Show](https://wails.io/docs/reference/runtime/intro#show) +// Shows the application. +export function Show(): void; + +// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext) +// Returns the current text stored on clipboard +export function ClipboardGetText(): Promise; + +// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext) +// Sets a text on the clipboard +export function ClipboardSetText(text: string): Promise; + +// [OnFileDrop](https://wails.io/docs/reference/runtime/draganddrop#onfiledrop) +// OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings. +export function OnFileDrop(callback: (x: number, y: number ,paths: string[]) => void, useDropTarget: boolean) :void + +// [OnFileDropOff](https://wails.io/docs/reference/runtime/draganddrop#dragandddropoff) +// OnFileDropOff removes the drag and drop listeners and handlers. +export function OnFileDropOff() :void + +// Check if the file path resolver is available +export function CanResolveFilePaths(): boolean; + +// Resolves file paths for an array of files +export function ResolveFilePaths(files: File[]): void \ No newline at end of file diff --git a/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.js b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.js new file mode 100644 index 000000000..7cb89d750 --- /dev/null +++ b/v2/examples/dragdrop-test/frontend/wailsjs/runtime/runtime.js @@ -0,0 +1,242 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +export function LogPrint(message) { + window.runtime.LogPrint(message); +} + +export function LogTrace(message) { + window.runtime.LogTrace(message); +} + +export function LogDebug(message) { + window.runtime.LogDebug(message); +} + +export function LogInfo(message) { + window.runtime.LogInfo(message); +} + +export function LogWarning(message) { + window.runtime.LogWarning(message); +} + +export function LogError(message) { + window.runtime.LogError(message); +} + +export function LogFatal(message) { + window.runtime.LogFatal(message); +} + +export function EventsOnMultiple(eventName, callback, maxCallbacks) { + return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks); +} + +export function EventsOn(eventName, callback) { + return EventsOnMultiple(eventName, callback, -1); +} + +export function EventsOff(eventName, ...additionalEventNames) { + return window.runtime.EventsOff(eventName, ...additionalEventNames); +} + +export function EventsOffAll() { + return window.runtime.EventsOffAll(); +} + +export function EventsOnce(eventName, callback) { + return EventsOnMultiple(eventName, callback, 1); +} + +export function EventsEmit(eventName) { + let args = [eventName].slice.call(arguments); + return window.runtime.EventsEmit.apply(null, args); +} + +export function WindowReload() { + window.runtime.WindowReload(); +} + +export function WindowReloadApp() { + window.runtime.WindowReloadApp(); +} + +export function WindowSetAlwaysOnTop(b) { + window.runtime.WindowSetAlwaysOnTop(b); +} + +export function WindowSetSystemDefaultTheme() { + window.runtime.WindowSetSystemDefaultTheme(); +} + +export function WindowSetLightTheme() { + window.runtime.WindowSetLightTheme(); +} + +export function WindowSetDarkTheme() { + window.runtime.WindowSetDarkTheme(); +} + +export function WindowCenter() { + window.runtime.WindowCenter(); +} + +export function WindowSetTitle(title) { + window.runtime.WindowSetTitle(title); +} + +export function WindowFullscreen() { + window.runtime.WindowFullscreen(); +} + +export function WindowUnfullscreen() { + window.runtime.WindowUnfullscreen(); +} + +export function WindowIsFullscreen() { + return window.runtime.WindowIsFullscreen(); +} + +export function WindowGetSize() { + return window.runtime.WindowGetSize(); +} + +export function WindowSetSize(width, height) { + window.runtime.WindowSetSize(width, height); +} + +export function WindowSetMaxSize(width, height) { + window.runtime.WindowSetMaxSize(width, height); +} + +export function WindowSetMinSize(width, height) { + window.runtime.WindowSetMinSize(width, height); +} + +export function WindowSetPosition(x, y) { + window.runtime.WindowSetPosition(x, y); +} + +export function WindowGetPosition() { + return window.runtime.WindowGetPosition(); +} + +export function WindowHide() { + window.runtime.WindowHide(); +} + +export function WindowShow() { + window.runtime.WindowShow(); +} + +export function WindowMaximise() { + window.runtime.WindowMaximise(); +} + +export function WindowToggleMaximise() { + window.runtime.WindowToggleMaximise(); +} + +export function WindowUnmaximise() { + window.runtime.WindowUnmaximise(); +} + +export function WindowIsMaximised() { + return window.runtime.WindowIsMaximised(); +} + +export function WindowMinimise() { + window.runtime.WindowMinimise(); +} + +export function WindowUnminimise() { + window.runtime.WindowUnminimise(); +} + +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); +} + +export function ScreenGetAll() { + return window.runtime.ScreenGetAll(); +} + +export function WindowIsMinimised() { + return window.runtime.WindowIsMinimised(); +} + +export function WindowIsNormal() { + return window.runtime.WindowIsNormal(); +} + +export function BrowserOpenURL(url) { + window.runtime.BrowserOpenURL(url); +} + +export function Environment() { + return window.runtime.Environment(); +} + +export function Quit() { + window.runtime.Quit(); +} + +export function Hide() { + window.runtime.Hide(); +} + +export function Show() { + window.runtime.Show(); +} + +export function ClipboardGetText() { + return window.runtime.ClipboardGetText(); +} + +export function ClipboardSetText(text) { + return window.runtime.ClipboardSetText(text); +} + +/** + * Callback for OnFileDrop returns a slice of file path strings when a drop is finished. + * + * @export + * @callback OnFileDropCallback + * @param {number} x - x coordinate of the drop + * @param {number} y - y coordinate of the drop + * @param {string[]} paths - A list of file paths. + */ + +/** + * OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings. + * + * @export + * @param {OnFileDropCallback} callback - Callback for OnFileDrop returns a slice of file path strings when a drop is finished. + * @param {boolean} [useDropTarget=true] - Only call the callback when the drop finished on an element that has the drop target style. (--wails-drop-target) + */ +export function OnFileDrop(callback, useDropTarget) { + return window.runtime.OnFileDrop(callback, useDropTarget); +} + +/** + * OnFileDropOff removes the drag and drop listeners and handlers. + */ +export function OnFileDropOff() { + return window.runtime.OnFileDropOff(); +} + +export function CanResolveFilePaths() { + return window.runtime.CanResolveFilePaths(); +} + +export function ResolveFilePaths(files) { + return window.runtime.ResolveFilePaths(files); +} \ No newline at end of file diff --git a/v2/examples/dragdrop-test/go.mod b/v2/examples/dragdrop-test/go.mod new file mode 100644 index 000000000..be13aac19 --- /dev/null +++ b/v2/examples/dragdrop-test/go.mod @@ -0,0 +1,37 @@ +module dragdrop-test + +go 1.23 + +require github.com/wailsapp/wails/v2 v2.10.1 + +require ( + github.com/bep/debounce v1.2.1 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect + github.com/labstack/echo/v4 v4.13.3 // indirect + github.com/labstack/gommon v0.4.2 // indirect + github.com/leaanthony/go-ansi-parser v1.6.1 // indirect + github.com/leaanthony/gosod v1.0.4 // indirect + github.com/leaanthony/slicer v1.6.0 // indirect + github.com/leaanthony/u v1.1.1 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rivo/uniseg v0.4.7 // indirect + github.com/samber/lo v1.49.1 // indirect + github.com/tkrajina/go-reflector v0.5.8 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/wailsapp/go-webview2 v1.0.22 // indirect + github.com/wailsapp/mimetype v1.4.1 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sys v0.30.0 // indirect + golang.org/x/text v0.22.0 // indirect +) + +replace github.com/wailsapp/wails/v2 => E:/releases/wails/v2 diff --git a/v2/examples/dragdrop-test/go.sum b/v2/examples/dragdrop-test/go.sum new file mode 100644 index 000000000..10d4a9b18 --- /dev/null +++ b/v2/examples/dragdrop-test/go.sum @@ -0,0 +1,79 @@ +github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= +github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY= +github.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g= +github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= +github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= +github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= +github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= +github.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A= +github.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= +github.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI= +github.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw= +github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= +github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= +github.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M= +github.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ= +github.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= +github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ= +github.com/tkrajina/go-reflector v0.5.8/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/wailsapp/go-webview2 v1.0.22 h1:YT61F5lj+GGaat5OB96Aa3b4QA+mybD0Ggq6NZijQ58= +github.com/wailsapp/go-webview2 v1.0.22/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc= +github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= +github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/v2/examples/dragdrop-test/main.go b/v2/examples/dragdrop-test/main.go new file mode 100644 index 000000000..64a0c2734 --- /dev/null +++ b/v2/examples/dragdrop-test/main.go @@ -0,0 +1,36 @@ +package main + +import ( + "embed" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "Wails Drag & Drop Test", + Width: 800, + Height: 600, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + OnStartup: app.startup, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} diff --git a/v2/examples/dragdrop-test/wails.json b/v2/examples/dragdrop-test/wails.json new file mode 100644 index 000000000..7970ea4ca --- /dev/null +++ b/v2/examples/dragdrop-test/wails.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://wails.io/schemas/config.v2.json", + "name": "dragdrop-test", + "outputfilename": "dragdrop-test", + "frontend:install": "npm install", + "frontend:build": "npm run build", + "frontend:dev:watcher": "npm run dev", + "frontend:dev:serverUrl": "auto", + "author": { + "name": "Lea Anthony", + "email": "lea.anthony@gmail.com" + } +} diff --git a/v2/internal/frontend/runtime/desktop/draganddrop.js b/v2/internal/frontend/runtime/desktop/draganddrop.js index 8a088e5b8..e470e4823 100644 --- a/v2/internal/frontend/runtime/desktop/draganddrop.js +++ b/v2/internal/frontend/runtime/desktop/draganddrop.js @@ -44,15 +44,27 @@ function checkStyleDropTarget(style) { /** * onDragOver is called when the dragover event is emitted. - * @param {DragEvent} e - * @returns + * @param {DragEvent} e + * @returns */ function onDragOver(e) { + // Check if this is an external file drop or internal HTML drag + // External file drops will have "Files" in the types array + // Internal HTML drags typically have "text/plain", "text/html" or custom types + const isFileDrop = e.dataTransfer.types.includes("Files"); + + // Only handle external file drops, let internal HTML5 drag-and-drop work normally + if (!isFileDrop) { + return; + } + + // ALWAYS prevent default for file drops to stop browser navigation + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + if (!window.wails.flags.enableWailsDragAndDrop) { return; } - e.dataTransfer.dropEffect = 'copy'; - e.preventDefault(); if (!flags.useDropTarget) { return; @@ -80,14 +92,24 @@ function onDragOver(e) { /** * onDragLeave is called when the dragleave event is emitted. - * @param {DragEvent} e - * @returns + * @param {DragEvent} e + * @returns */ function onDragLeave(e) { + // Check if this is an external file drop or internal HTML drag + const isFileDrop = e.dataTransfer.types.includes("Files"); + + // Only handle external file drops, let internal HTML5 drag-and-drop work normally + if (!isFileDrop) { + return; + } + + // ALWAYS prevent default for file drops to stop browser navigation + e.preventDefault(); + if (!window.wails.flags.enableWailsDragAndDrop) { return; } - e.preventDefault(); if (!flags.useDropTarget) { return; @@ -122,14 +144,24 @@ function onDragLeave(e) { /** * onDrop is called when the drop event is emitted. - * @param {DragEvent} e - * @returns + * @param {DragEvent} e + * @returns */ function onDrop(e) { + // Check if this is an external file drop or internal HTML drag + const isFileDrop = e.dataTransfer.types.includes("Files"); + + // Only handle external file drops, let internal HTML5 drag-and-drop work normally + if (!isFileDrop) { + return; + } + + // ALWAYS prevent default for file drops to stop browser navigation + e.preventDefault(); + if (!window.wails.flags.enableWailsDragAndDrop) { return; } - e.preventDefault(); if (CanResolveFilePaths()) { // process files diff --git a/v2/internal/frontend/runtime/runtime_debug_desktop.js b/v2/internal/frontend/runtime/runtime_debug_desktop.js index 3b18c69bd..a5f6068e9 100644 --- a/v2/internal/frontend/runtime/runtime_debug_desktop.js +++ b/v2/internal/frontend/runtime/runtime_debug_desktop.js @@ -459,11 +459,15 @@ return false; } function onDragOver(e) { + const isFileDrop = e.dataTransfer.types.includes("Files"); + if (!isFileDrop) { + return; + } + e.preventDefault(); + e.dataTransfer.dropEffect = "copy"; if (!window.wails.flags.enableWailsDragAndDrop) { return; } - e.dataTransfer.dropEffect = "copy"; - e.preventDefault(); if (!flags.useDropTarget) { return; } @@ -482,10 +486,14 @@ } } function onDragLeave(e) { - if (!window.wails.flags.enableWailsDragAndDrop) { + const isFileDrop = e.dataTransfer.types.includes("Files"); + if (!isFileDrop) { return; } e.preventDefault(); + if (!window.wails.flags.enableWailsDragAndDrop) { + return; + } if (!flags.useDropTarget) { return; } @@ -508,10 +516,14 @@ }, 50); } function onDrop(e) { - if (!window.wails.flags.enableWailsDragAndDrop) { + const isFileDrop = e.dataTransfer.types.includes("Files"); + if (!isFileDrop) { return; } e.preventDefault(); + if (!window.wails.flags.enableWailsDragAndDrop) { + return; + } if (CanResolveFilePaths()) { let files = []; if (e.dataTransfer.items) { @@ -777,4 +789,4 @@ }); window.WailsInvoke("runtime:ready"); })(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX19cclxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vKipcclxuICogU2VuZHMgYSBsb2cgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB3aXRoIHRoZSBnaXZlbiBsZXZlbCArIG1lc3NhZ2VcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xyXG5cclxuXHQvLyBMb2cgTWVzc2FnZSBmb3JtYXQ6XHJcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxyXG5cdHdpbmRvdy5XYWlsc0ludm9rZSgnTCcgKyBsZXZlbCArIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB0cmFjZSBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1RyYWNlKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnVCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1ByaW50KG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBkZWJ1ZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnRCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBpbmZvIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nSW5mbyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0knLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1dhcm5pbmcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdFJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGZhdGFsIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRmF0YWwobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdGJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNldExvZ0xldmVsKGxvZ2xldmVsKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XHJcbn1cclxuXHJcbi8vIExvZyBsZXZlbHNcclxuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xyXG5cdFRSQUNFOiAxLFxyXG5cdERFQlVHOiAyLFxyXG5cdElORk86IDMsXHJcblx0V0FSTklORzogNCxcclxuXHRFUlJPUjogNSxcclxufTtcclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuLy8gRGVmaW5lcyBhIHNpbmdsZSBsaXN0ZW5lciB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbGJhY2tcclxuXHJcbi8qKlxyXG4gKiBUaGUgTGlzdGVuZXIgY2xhc3MgZGVmaW5lcyBhIGxpc3RlbmVyISA6LSlcclxuICpcclxuICogQGNsYXNzIExpc3RlbmVyXHJcbiAqL1xyXG5jbGFzcyBMaXN0ZW5lciB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heENhbGxiYWNrc1xyXG4gICAgICogQG1lbWJlcm9mIExpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcclxuICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBnaXZlbiBkYXRhXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxyXG4gICAgICAgIHRoaXMuQ2FsbGJhY2sgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhDYWxsYmFja3MgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRGVjcmVtZW50IG1heENhbGxiYWNrcy4gUmV0dXJuIHRydWUgaWYgbm93IDAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGV2ZW50TGlzdGVuZXJzID0ge307XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGBtYXhDYWxsYmFja3NgIHRpbWVzIGJlZm9yZSBiZWluZyBkZXN0cm95ZWRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XHJcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh0aGlzTGlzdGVuZXIpO1xyXG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVyT2ZmKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoZXZlbnREYXRhKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBldmVudCBuYW1lXHJcbiAgICBsZXQgZXZlbnROYW1lID0gZXZlbnREYXRhLm5hbWU7XHJcblxyXG4gICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XHJcbiAgICBjb25zdCBuZXdFdmVudExpc3RlbmVyTGlzdCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0/LnNsaWNlKCkgfHwgW107XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgbGlzdGVuZXJzIGZvciB0aGlzIGV2ZW50XHJcbiAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXHJcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSBuZXdFdmVudExpc3RlbmVyTGlzdC5sZW5ndGggLSAxOyBjb3VudCA+PSAwOyBjb3VudCAtPSAxKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgbmV4dCBsaXN0ZW5lclxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0W2NvdW50XTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnREYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcclxuICAgICAgICAgICAgY29uc3QgZGVzdHJveSA9IGxpc3RlbmVyLkNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcclxuICAgICAgICAgICAgICAgIG5ld0V2ZW50TGlzdGVuZXJMaXN0LnNwbGljZShjb3VudCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBjYWxsYmFja3Mgd2l0aCBuZXcgbGlzdCBvZiBsaXN0ZW5lcnNcclxuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSkge1xyXG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xyXG4gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFWCcgKyBldmVudE5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT24sXHJcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09mZihldmVudE5hbWUsIC4uLmFkZGl0aW9uYWxFdmVudE5hbWVzKSB7XHJcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXHJcblxyXG4gICAgaWYgKGFkZGl0aW9uYWxFdmVudE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGFsbCBldmVudCBsaXN0ZW5lcnMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT25cclxuICovXHJcbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xyXG4gICAgY29uc3QgZXZlbnROYW1lcyA9IE9iamVjdC5rZXlzKGV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGV2ZW50TmFtZXMuZm9yRWFjaChldmVudE5hbWUgPT4ge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBsaXN0ZW5lck9mZiB1bnJlZ2lzdGVycyBhIGxpc3RlbmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIEV2ZW50c09uXHJcbiAqXHJcbiAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXHJcbiAqL1xyXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcclxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGxpc3RlbmVyLmV2ZW50TmFtZTtcclxuICAgIGlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBSZW1vdmUgbG9jYWwgbGlzdGVuZXJcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihsID0+IGwgIT09IGxpc3RlbmVyKTtcclxuXHJcbiAgICAvLyBDbGVhbiB1cCBpZiB0aGVyZSBhcmUgbm8gZXZlbnQgbGlzdGVuZXJzIGxlZnRcclxuICAgIGlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGNhbGxiYWNrcyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBudW1iZXIgZnJvbSB0aGUgbmF0aXZlIGJyb3dzZXIgcmFuZG9tIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gY3J5cHRvUmFuZG9tKCkge1xyXG5cdHZhciBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKTtcclxuXHRyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpWzBdO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciB1c2luZyBkYSBvbGQtc2tvb2wgTWF0aC5SYW5kb21cclxuICogSSBsaWtlcyB0byBjYWxsIGl0IExPTFJhbmRvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyBudW1iZXJcclxuICovXHJcbmZ1bmN0aW9uIGJhc2ljUmFuZG9tKCkge1xyXG5cdHJldHVybiBNYXRoLnJhbmRvbSgpICogOTAwNzE5OTI1NDc0MDk5MTtcclxufVxyXG5cclxuLy8gUGljayBhIHJhbmRvbSBudW1iZXIgZnVuY3Rpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5XHJcbnZhciByYW5kb21GdW5jO1xyXG5pZiAod2luZG93LmNyeXB0bykge1xyXG5cdHJhbmRvbUZ1bmMgPSBjcnlwdG9SYW5kb207XHJcbn0gZWxzZSB7XHJcblx0cmFuZG9tRnVuYyA9IGJhc2ljUmFuZG9tO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGwgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHRvIGNhbGwgdGhlIGJpbmRpbmcgd2l0aCB0aGVcclxuICogZ2l2ZW4gZGF0YS4gQSBwcm9taXNlIGlzIHJldHVybmVkIGFuZCB3aWxsIGJlIGNvbXBsZXRlZCB3aGVuIHRoZVxyXG4gKiBiYWNrZW5kIHJlc3BvbmRzLiBUaGlzIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bFxyXG4gKiBvciByZWplY3RlZCBpZiBhbiBlcnJvciBpcyBwYXNzZWQgYmFjay5cclxuICogVGhlcmUgaXMgYSB0aW1lb3V0IG1lY2hhbmlzbS4gSWYgdGhlIGNhbGwgZG9lc24ndCByZXNwb25kIGluIHRoZSBnaXZlblxyXG4gKiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHthbnk9fSBhcmdzXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gdGltZW91dFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENhbGwobmFtZSwgYXJncywgdGltZW91dCkge1xyXG5cclxuXHQvLyBUaW1lb3V0IGluZmluaXRlIGJ5IGRlZmF1bHRcclxuXHRpZiAodGltZW91dCA9PSBudWxsKSB7XHJcblx0XHR0aW1lb3V0ID0gMDtcclxuXHR9XHJcblxyXG5cdC8vIENyZWF0ZSBhIHByb21pc2VcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cclxuXHRcdC8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lEXHJcblx0XHR2YXIgY2FsbGJhY2tJRDtcclxuXHRcdGRvIHtcclxuXHRcdFx0Y2FsbGJhY2tJRCA9IG5hbWUgKyAnLScgKyByYW5kb21GdW5jKCk7XHJcblx0XHR9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xyXG5cclxuXHRcdHZhciB0aW1lb3V0SGFuZGxlO1xyXG5cdFx0Ly8gU2V0IHRpbWVvdXRcclxuXHRcdGlmICh0aW1lb3V0ID4gMCkge1xyXG5cdFx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmVqZWN0KEVycm9yKCdDYWxsIHRvICcgKyBuYW1lICsgJyB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICcgKyBjYWxsYmFja0lEKSk7XHJcblx0XHRcdH0sIHRpbWVvdXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIGNhbGxiYWNrXHJcblx0XHRjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGU6IHRpbWVvdXRIYW5kbGUsXHJcblx0XHRcdHJlamVjdDogcmVqZWN0LFxyXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlXHJcblx0XHR9O1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHBheWxvYWQgPSB7XHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGNhbGxiYWNrSUQsXHJcblx0XHRcdH07XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBjYWxsXHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnQycgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxud2luZG93Lk9iZnVzY2F0ZWRDYWxsID0gKGlkLCBhcmdzLCB0aW1lb3V0KSA9PiB7XHJcblxyXG4gICAgLy8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XHJcbiAgICBpZiAodGltZW91dCA9PSBudWxsKSB7XHJcbiAgICAgICAgdGltZW91dCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgcHJvbWlzZVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuICAgICAgICB2YXIgY2FsbGJhY2tJRDtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrSUQgPSBpZCArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuICAgICAgICB9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xyXG5cclxuICAgICAgICB2YXIgdGltZW91dEhhbmRsZTtcclxuICAgICAgICAvLyBTZXQgdGltZW91dFxyXG4gICAgICAgIGlmICh0aW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoJ0NhbGwgdG8gbWV0aG9kICcgKyBpZCArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xyXG4gICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFN0b3JlIGNhbGxiYWNrXHJcbiAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSURdID0ge1xyXG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxyXG4gICAgICAgICAgICByZWplY3Q6IHJlamVjdCxcclxuICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcblx0XHRcdFx0aWQsXHJcblx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRjYWxsYmFja0lELFxyXG5cdFx0XHR9O1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxyXG4gICAgICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ2MnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkXHJcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYWxsYmFjayhpbmNvbWluZ01lc3NhZ2UpIHtcclxuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxyXG5cdGxldCBtZXNzYWdlO1xyXG5cdHRyeSB7XHJcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYEludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICR7ZS5tZXNzYWdlfS4gTWVzc2FnZTogJHtpbmNvbWluZ01lc3NhZ2V9YDtcclxuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XHJcblx0bGV0IGNhbGxiYWNrRGF0YSA9IGNhbGxiYWNrc1tjYWxsYmFja0lEXTtcclxuXHRpZiAoIWNhbGxiYWNrRGF0YSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRjbGVhclRpbWVvdXQoY2FsbGJhY2tEYXRhLnRpbWVvdXRIYW5kbGUpO1xyXG5cclxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cclxuXHRpZiAobWVzc2FnZS5lcnJvcikge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpO1xyXG5cdH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy8gIFxyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tICcuL2NhbGxzJztcclxuXHJcbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcclxud2luZG93LmdvID0ge307XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcclxuXHR0cnkge1xyXG5cdFx0YmluZGluZ3NNYXAgPSBKU09OLnBhcnNlKGJpbmRpbmdzTWFwKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGlzZSB0aGUgYmluZGluZ3MgbWFwXHJcblx0d2luZG93LmdvID0gd2luZG93LmdvIHx8IHt9O1xyXG5cclxuXHQvLyBJdGVyYXRlIHBhY2thZ2UgbmFtZXNcclxuXHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcCkuZm9yRWFjaCgocGFja2FnZU5hbWUpID0+IHtcclxuXHJcblx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuXHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdC8vIEl0ZXJhdGUgc3RydWN0IG5hbWVzXHJcblx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV0pLmZvckVhY2goKHN0cnVjdE5hbWUpID0+IHtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdID0gd2luZG93LmdvW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSB8fCB7fTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdFx0XHRcdC8vIE5vIHRpbWVvdXQgYnkgZGVmYXVsdFxyXG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFjdHVhbCBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhbGwoW3BhY2thZ2VOYW1lLCBzdHJ1Y3ROYW1lLCBtZXRob2ROYW1lXS5qb2luKCcuJyksIGFyZ3MsIHRpbWVvdXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IHNldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcclxuXHRcdFx0XHRcdFx0dGltZW91dCA9IG5ld1RpbWVvdXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IGdldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XHJcblx0XHRcdFx0fSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZCgpIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZEFwcCgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1InKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFN5c3RlbURlZmF1bHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FTRFQnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldExpZ2h0VGhlbWUoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dBTFQnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldERhcmtUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FEVCcpO1xyXG59XHJcblxyXG4vKipcclxuICogUGxhY2UgdGhlIHdpbmRvdyBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0NlbnRlcigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFRpdGxlKHRpdGxlKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dUJyArIHRpdGxlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1ha2VzIHRoZSB3aW5kb3cgZ28gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93RnVsbHNjcmVlbigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0YnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldmVydHMgdGhlIHdpbmRvdyBmcm9tIGZ1bGxzY3JlZW5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VuZnVsbHNjcmVlbigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2YnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIGluIGZ1bGwgc2NyZWVuIG1vZGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNGdWxsc2NyZWVuKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNGdWxsc2NyZWVuXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt3OiBudW1iZXIsIGg6IG51bWJlcn0+fSBUaGUgc2l6ZSBvZiB0aGUgd2luZG93XHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFNpemUoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dHZXRTaXplXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1daOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNaW5TaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QWx3YXlzT25Ub3AoYikge1xyXG5cclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgUG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0UG9zaXRpb24oeCwgeSkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcDonICsgeCArICc6JyArIHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhpZGUgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNob3cgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1heGltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xyXG59XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBNYXhpbWlzZSBvZiB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dUb2dnbGVNYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5tYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1heGltaXNlZCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01heGltaXNlZCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWF4aW1pc2VkXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogTWluaW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWluaW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dtJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1pbmltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VubWluaW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1d1Jyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBtaW5pbWlzZWQgb3Igbm90LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNNaW5pbWlzZWQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc01pbmltaXNlZFwiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG5vcm1hbCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc05vcm1hbCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTm9ybWFsXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvdXIgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBSIFJlZFxyXG4gKiBAcGFyYW0ge251bWJlcn0gRyBHcmVlblxyXG4gKiBAcGFyYW0ge251bWJlcn0gQiBCbHVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBBIEFscGhhXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QmFja2dyb3VuZENvbG91cihSLCBHLCBCLCBBKSB7XHJcbiAgICBsZXQgcmdiYSA9IEpTT04uc3RyaW5naWZ5KHtyOiBSIHx8IDAsIGc6IEcgfHwgMCwgYjogQiB8fCAwLCBhOiBBIHx8IDI1NX0pO1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcjonICsgcmdiYSk7XHJcbn1cclxuXHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBhbGwgc2NyZWVucy4gQ2FsbCB0aGlzIGFuZXcgZWFjaCB0aW1lIHlvdSB3YW50IHRvIHJlZnJlc2ggZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nIHdpbmRvd2luZyBzeXN0ZW0uXHJcbiAqIEBleHBvcnRcclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vd3JhcHBlci9ydW50aW1lJykuU2NyZWVufSBTY3JlZW5cclxuICogQHJldHVybiB7UHJvbWlzZTx7U2NyZWVuW119Pn0gVGhlIHNjcmVlbnNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBTY3JlZW5HZXRBbGwoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpTY3JlZW5HZXRBbGxcIik7XHJcbn1cclxuIiwgIi8qKlxyXG4gKiBAZGVzY3JpcHRpb246IFVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnJvd3NlciB0byBvcGVuIHRoZSB1cmxcclxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBCcm93c2VyT3BlblVSTCh1cmwpIHtcclxuICB3aW5kb3cuV2FpbHNJbnZva2UoJ0JPOicgKyB1cmwpO1xyXG59IiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcbmltcG9ydCB7Q2FsbH0gZnJvbSBcIi4vY2FsbHNcIjtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkU2V0VGV4dCh0ZXh0KSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRTZXRUZXh0XCIsIFt0ZXh0XSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7c3RyaW5nfT59IFRleHQgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkXHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENsaXBib2FyZEdldFRleHQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRHZXRUZXh0XCIpO1xyXG59IiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcbmltcG9ydCB7RXZlbnRzT24sIEV2ZW50c09mZn0gZnJvbSBcIi4vZXZlbnRzXCI7XHJcblxyXG5jb25zdCBmbGFncyA9IHtcclxuICAgIHJlZ2lzdGVyZWQ6IGZhbHNlLFxyXG4gICAgZGVmYXVsdFVzZURyb3BUYXJnZXQ6IHRydWUsXHJcbiAgICB1c2VEcm9wVGFyZ2V0OiB0cnVlLFxyXG4gICAgbmV4dERlYWN0aXZhdGU6IG51bGwsXHJcbiAgICBuZXh0RGVhY3RpdmF0ZVRpbWVvdXQ6IG51bGwsXHJcbn07XHJcblxyXG5jb25zdCBEUk9QX1RBUkdFVF9BQ1RJVkUgPSBcIndhaWxzLWRyb3AtdGFyZ2V0LWFjdGl2ZVwiO1xyXG5cclxuLyoqXHJcbiAqIGNoZWNrU3R5bGVEcm9wVGFyZ2V0IGNoZWNrcyBpZiB0aGUgc3R5bGUgaGFzIHRoZSBkcm9wIHRhcmdldCBhdHRyaWJ1dGVcclxuICogXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGUgXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tTdHlsZURyb3BUYXJnZXQoc3R5bGUpIHtcclxuICAgIGNvbnN0IGNzc0Ryb3BWYWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUod2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BQcm9wZXJ0eSkudHJpbSgpO1xyXG4gICAgaWYgKGNzc0Ryb3BWYWx1ZSkge1xyXG4gICAgICAgIGlmIChjc3NEcm9wVmFsdWUgPT09IHdpbmRvdy53YWlscy5mbGFncy5jc3NEcm9wVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgZHJvcCB0YXJnZXQgYXR0cmlidXRlLCBidXQgXHJcbiAgICAgICAgLy8gdGhlIHZhbHVlIGlzIG5vdCBjb3JyZWN0LCB0ZXJtaW5hdGUgZmluZGluZyBwcm9jZXNzLlxyXG4gICAgICAgIC8vIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBibG9jayBzb21lIGNoaWxkIGVsZW1lbnRzIGZyb20gYmVpbmcgZHJvcCB0YXJnZXRzLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIG9uRHJhZ092ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIGRyYWdvdmVyIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBlIFxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbmZ1bmN0aW9uIG9uRHJhZ092ZXIoZSkge1xyXG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldDtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXHJcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBudWxsIG9yIGVsZW1lbnQgaXMgbm90IGNoaWxkIG9mIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgIGlmICghZWxlbWVudCB8fCAhY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnRFbGVtZW50IGlzIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICBpZiAoY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCkpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoRFJPUF9UQVJHRVRfQUNUSVZFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogb25EcmFnTGVhdmUgaXMgY2FsbGVkIHdoZW4gdGhlIGRyYWdsZWF2ZSBldmVudCBpcyBlbWl0dGVkLlxyXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZSBcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG5mdW5jdGlvbiBvbkRyYWdMZWF2ZShlKSB7XHJcbiAgICBpZiAoIXdpbmRvdy53YWlscy5mbGFncy5lbmFibGVXYWlsc0RyYWdBbmREcm9wKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaW5kIHRoZSBjbG9zZSBkcm9wIHRhcmdldCBlbGVtZW50XHJcbiAgICBpZiAoIWUudGFyZ2V0IHx8ICFjaGVja1N0eWxlRHJvcFRhcmdldChnZXRDb21wdXRlZFN0eWxlKGUudGFyZ2V0KSkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXHJcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcclxuICAgIFxyXG4gICAgLy8gVXNlIGRlYm91bmNlIHRlY2huaXF1ZSB0byB0YWNsZSBkcmFnbGVhdmUgZXZlbnRzIG9uIG92ZXJsYXBwaW5nIGVsZW1lbnRzIGFuZCBkcm9wIHRhcmdldCBlbGVtZW50c1xyXG4gICAgZmxhZ3MubmV4dERlYWN0aXZhdGUgPSAoKSA9PiB7XHJcbiAgICAgICAgLy8gRGVhY3RpdmF0ZSBhbGwgZHJvcCB0YXJnZXRzLCBuZXcgZHJvcCB0YXJnZXQgd2lsbCBiZSBhY3RpdmF0ZWQgb24gbmV4dCBkcmFnb3ZlciBldmVudFxyXG4gICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShEUk9QX1RBUkdFVF9BQ1RJVkUpKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoRFJPUF9UQVJHRVRfQUNUSVZFKSk7XHJcbiAgICAgICAgLy8gUmVzZXQgbmV4dERlYWN0aXZhdGVcclxuICAgICAgICBmbGFncy5uZXh0RGVhY3RpdmF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gQ2xlYXIgdGltZW91dFxyXG4gICAgICAgIGlmIChmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCk7XHJcbiAgICAgICAgICAgIGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB0aW1lb3V0IHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzIGlmIG5vdCB0cmlnZ2VyZWQgYnkgbmV4dCBkcmFnIGV2ZW50XHJcbiAgICBmbGFncy5uZXh0RGVhY3RpdmF0ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcclxuICAgIH0sIDUwKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIG9uRHJvcCBpcyBjYWxsZWQgd2hlbiB0aGUgZHJvcCBldmVudCBpcyBlbWl0dGVkLlxyXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZSBcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG5mdW5jdGlvbiBvbkRyb3AoZSkge1xyXG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlV2FpbHNEcmFnQW5kRHJvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICBpZiAoQ2FuUmVzb2x2ZUZpbGVQYXRocygpKSB7XHJcbiAgICAgICAgLy8gcHJvY2VzcyBmaWxlc1xyXG4gICAgICAgIGxldCBmaWxlcyA9IFtdO1xyXG4gICAgICAgIGlmIChlLmRhdGFUcmFuc2Zlci5pdGVtcykge1xyXG4gICAgICAgICAgICBmaWxlcyA9IFsuLi5lLmRhdGFUcmFuc2Zlci5pdGVtc10ubWFwKChpdGVtLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5raW5kID09PSAnZmlsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5nZXRBc0ZpbGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuZmlsZXNdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cucnVudGltZS5SZXNvbHZlRmlsZVBhdGhzKGUueCwgZS55LCBmaWxlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcclxuICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xyXG5cclxuICAgIC8vIERlYWN0aXZhdGUgYWxsIGRyb3AgdGFyZ2V0c1xyXG4gICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERST1BfVEFSR0VUX0FDVElWRSkpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShEUk9QX1RBUkdFVF9BQ1RJVkUpKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIHBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzIGNoZWNrcyB0aGUgYnJvd3NlcidzIGNhcGFiaWxpdHkgb2Ygc2VuZGluZyBwb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0c1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2FuUmVzb2x2ZUZpbGVQYXRocygpIHtcclxuICAgIHJldHVybiB3aW5kb3cuY2hyb21lPy53ZWJ2aWV3Py5wb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0cyAhPSBudWxsO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZUZpbGVQYXRocyBzZW5kcyBkcm9wIGV2ZW50cyB0byB0aGUgR08gc2lkZSB0byByZXNvbHZlIGZpbGUgcGF0aHMgb24gd2luZG93cy5cclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IHhcclxuICogQHBhcmFtIHtudW1iZXJ9IHlcclxuICogQHBhcmFtIHthbnlbXX0gZmlsZXNcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gUmVzb2x2ZUZpbGVQYXRocyh4LCB5LCBmaWxlcykge1xyXG4gICAgLy8gT25seSBmb3Igd2luZG93cyB3ZWJ2aWV3MiA+PSAxLjAuMTc3NC4zMFxyXG4gICAgLy8gaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3dlYnZpZXcyL3JlZmVyZW5jZS93aW4zMi9pY29yZXdlYnZpZXcyd2VibWVzc2FnZXJlY2VpdmVkZXZlbnRhcmdzMj92aWV3PXdlYnZpZXcyLTEuMC4xODIzLjMyI2FwcGxpZXMtdG9cclxuICAgIGlmICh3aW5kb3cuY2hyb21lPy53ZWJ2aWV3Py5wb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0cykge1xyXG4gICAgICAgIGNocm9tZS53ZWJ2aWV3LnBvc3RNZXNzYWdlV2l0aEFkZGl0aW9uYWxPYmplY3RzKGBmaWxlOmRyb3A6JHt4fToke3l9YCwgZmlsZXMpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FsbGJhY2sgZm9yIE9uRmlsZURyb3AgcmV0dXJucyBhIHNsaWNlIG9mIGZpbGUgcGF0aCBzdHJpbmdzIHdoZW4gYSBkcm9wIGlzIGZpbmlzaGVkLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBjYWxsYmFjayBPbkZpbGVEcm9wQ2FsbGJhY2tcclxuICogQHBhcmFtIHtudW1iZXJ9IHggLSB4IGNvb3JkaW5hdGUgb2YgdGhlIGRyb3BcclxuICogQHBhcmFtIHtudW1iZXJ9IHkgLSB5IGNvb3JkaW5hdGUgb2YgdGhlIGRyb3BcclxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGF0aHMgLSBBIGxpc3Qgb2YgZmlsZSBwYXRocy5cclxuICovXHJcblxyXG4vKipcclxuICogT25GaWxlRHJvcCBsaXN0ZW5zIHRvIGRyYWcgYW5kIGRyb3AgZXZlbnRzIGFuZCBjYWxscyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGRyb3AgYW5kIGFuIGFycmF5IG9mIHBhdGggc3RyaW5ncy5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge09uRmlsZURyb3BDYWxsYmFja30gY2FsbGJhY2sgLSBDYWxsYmFjayBmb3IgT25GaWxlRHJvcCByZXR1cm5zIGEgc2xpY2Ugb2YgZmlsZSBwYXRoIHN0cmluZ3Mgd2hlbiBhIGRyb3AgaXMgZmluaXNoZWQuXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VzZURyb3BUYXJnZXQ9dHJ1ZV0gLSBPbmx5IGNhbGwgdGhlIGNhbGxiYWNrIHdoZW4gdGhlIGRyb3AgZmluaXNoZWQgb24gYW4gZWxlbWVudCB0aGF0IGhhcyB0aGUgZHJvcCB0YXJnZXQgc3R5bGUuICgtLXdhaWxzLWRyb3AtdGFyZ2V0KVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIE9uRmlsZURyb3AoY2FsbGJhY2ssIHVzZURyb3BUYXJnZXQpIHtcclxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJEcmFnQW5kRHJvcENhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmxhZ3MucmVnaXN0ZXJlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGZsYWdzLnJlZ2lzdGVyZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHVEVFBUID0gdHlwZW9mIHVzZURyb3BUYXJnZXQ7XHJcbiAgICBmbGFncy51c2VEcm9wVGFyZ2V0ID0gdURUUFQgPT09IFwidW5kZWZpbmVkXCIgfHwgdURUUFQgIT09IFwiYm9vbGVhblwiID8gZmxhZ3MuZGVmYXVsdFVzZURyb3BUYXJnZXQgOiB1c2VEcm9wVGFyZ2V0O1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgb25EcmFnT3Zlcik7XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2xlYXZlJywgb25EcmFnTGVhdmUpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCBvbkRyb3ApO1xyXG5cclxuICAgIGxldCBjYiA9IGNhbGxiYWNrO1xyXG4gICAgaWYgKGZsYWdzLnVzZURyb3BUYXJnZXQpIHtcclxuICAgICAgICBjYiA9IGZ1bmN0aW9uICh4LCB5LCBwYXRocykge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludCh4LCB5KVxyXG4gICAgICAgICAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBudWxsIG9yIGVsZW1lbnQgaXMgbm90IGNoaWxkIG9mIGRyb3AgdGFyZ2V0IGVsZW1lbnQsIHJldHVybiBudWxsXHJcbiAgICAgICAgICAgIGlmICghZWxlbWVudCB8fCAhY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKHgsIHksIHBhdGhzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgRXZlbnRzT24oXCJ3YWlsczpmaWxlLWRyb3BcIiwgY2IpO1xyXG59XHJcblxyXG4vKipcclxuICogT25GaWxlRHJvcE9mZiByZW1vdmVzIHRoZSBkcmFnIGFuZCBkcm9wIGxpc3RlbmVycyBhbmQgaGFuZGxlcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gT25GaWxlRHJvcE9mZigpIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRHJhZ092ZXIpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIG9uRHJhZ0xlYXZlKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcm9wJywgb25Ecm9wKTtcclxuICAgIEV2ZW50c09mZihcIndhaWxzOmZpbGUtZHJvcFwiKTtcclxuICAgIGZsYWdzLnJlZ2lzdGVyZWQgPSBmYWxzZTtcclxufVxyXG4iLCAiLypcclxuLS1kZWZhdWx0LWNvbnRleHRtZW51OiBhdXRvOyAoZGVmYXVsdCkgd2lsbCBzaG93IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudSBpZiBjb250ZW50RWRpdGFibGUgaXMgdHJ1ZSBPUiB0ZXh0IGhhcyBiZWVuIHNlbGVjdGVkIE9SIGVsZW1lbnQgaXMgaW5wdXQgb3IgdGV4dGFyZWFcclxuLS1kZWZhdWx0LWNvbnRleHRtZW51OiBzaG93OyB3aWxsIGFsd2F5cyBzaG93IHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudVxyXG4tLWRlZmF1bHQtY29udGV4dG1lbnU6IGhpZGU7IHdpbGwgYWx3YXlzIGhpZGUgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51XHJcblxyXG5UaGlzIHJ1bGUgaXMgaW5oZXJpdGVkIGxpa2Ugbm9ybWFsIENTUyBydWxlcywgc28gbmVzdGluZyB3b3JrcyBhcyBleHBlY3RlZFxyXG4qL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RlZmF1bHRDb250ZXh0TWVudShldmVudCkge1xyXG4gICAgLy8gUHJvY2VzcyBkZWZhdWx0IGNvbnRleHQgbWVudVxyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZXh0TWVudUFjdGlvbiA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tZGVmYXVsdC1jb250ZXh0bWVudVwiKS50cmltKCk7XHJcbiAgICBzd2l0Y2ggKGRlZmF1bHRDb250ZXh0TWVudUFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgXCJzaG93XCI6XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjYXNlIFwiaGlkZVwiOlxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWVcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBhbmQgYWN0aW9uIGlzIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50c1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1NlbGVjdGlvbiA9IChzZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICBpZiAoaGFzU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5yYW5nZUNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3RzID0gcmFuZ2UuZ2V0Q2xpZW50UmVjdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlY3RzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSByZWN0c1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkgPT09IGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0YWduYW1lIGlzIGlucHV0IG9yIHRleHRhcmVhXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IFwiSU5QVVRcIiB8fCBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhc1NlbGVjdGlvbiB8fCAoIWVsZW1lbnQucmVhZE9ubHkgJiYgIWVsZW1lbnQuZGlzYWJsZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoaWRlIGRlZmF1bHQgY29udGV4dCBtZW51XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbn1cclxuIiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogOSAqL1xyXG5pbXBvcnQgKiBhcyBMb2cgZnJvbSAnLi9sb2cnO1xyXG5pbXBvcnQge1xyXG4gIGV2ZW50TGlzdGVuZXJzLFxyXG4gIEV2ZW50c0VtaXQsXHJcbiAgRXZlbnRzTm90aWZ5LFxyXG4gIEV2ZW50c09mZixcclxuICBFdmVudHNPZmZBbGwsXHJcbiAgRXZlbnRzT24sXHJcbiAgRXZlbnRzT25jZSxcclxuICBFdmVudHNPbk11bHRpcGxlLFxyXG59IGZyb20gXCIuL2V2ZW50c1wiO1xyXG5pbXBvcnQgeyBDYWxsLCBDYWxsYmFjaywgY2FsbGJhY2tzIH0gZnJvbSAnLi9jYWxscyc7XHJcbmltcG9ydCB7IFNldEJpbmRpbmdzIH0gZnJvbSBcIi4vYmluZGluZ3NcIjtcclxuaW1wb3J0ICogYXMgV2luZG93IGZyb20gXCIuL3dpbmRvd1wiO1xyXG5pbXBvcnQgKiBhcyBTY3JlZW4gZnJvbSBcIi4vc2NyZWVuXCI7XHJcbmltcG9ydCAqIGFzIEJyb3dzZXIgZnJvbSBcIi4vYnJvd3NlclwiO1xyXG5pbXBvcnQgKiBhcyBDbGlwYm9hcmQgZnJvbSBcIi4vY2xpcGJvYXJkXCI7XHJcbmltcG9ydCAqIGFzIERyYWdBbmREcm9wIGZyb20gXCIuL2RyYWdhbmRkcm9wXCI7XHJcbmltcG9ydCAqIGFzIENvbnRleHRNZW51IGZyb20gXCIuL2NvbnRleHRtZW51XCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUXVpdCgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnUScpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnUycpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnSCcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gRW52aXJvbm1lbnQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpFbnZpcm9ubWVudFwiKTtcclxufVxyXG5cclxuLy8gVGhlIEpTIHJ1bnRpbWVcclxud2luZG93LnJ1bnRpbWUgPSB7XHJcbiAgICAuLi5Mb2csXHJcbiAgICAuLi5XaW5kb3csXHJcbiAgICAuLi5Ccm93c2VyLFxyXG4gICAgLi4uU2NyZWVuLFxyXG4gICAgLi4uQ2xpcGJvYXJkLFxyXG4gICAgLi4uRHJhZ0FuZERyb3AsXHJcbiAgICBFdmVudHNPbixcclxuICAgIEV2ZW50c09uY2UsXHJcbiAgICBFdmVudHNPbk11bHRpcGxlLFxyXG4gICAgRXZlbnRzRW1pdCxcclxuICAgIEV2ZW50c09mZixcclxuICAgIEV2ZW50c09mZkFsbCxcclxuICAgIEVudmlyb25tZW50LFxyXG4gICAgU2hvdyxcclxuICAgIEhpZGUsXHJcbiAgICBRdWl0XHJcbn07XHJcblxyXG4vLyBJbnRlcm5hbCB3YWlscyBlbmRwb2ludHNcclxud2luZG93LndhaWxzID0ge1xyXG4gICAgQ2FsbGJhY2ssXHJcbiAgICBFdmVudHNOb3RpZnksXHJcbiAgICBTZXRCaW5kaW5ncyxcclxuICAgIGV2ZW50TGlzdGVuZXJzLFxyXG4gICAgY2FsbGJhY2tzLFxyXG4gICAgZmxhZ3M6IHtcclxuICAgICAgICBkaXNhYmxlU2Nyb2xsYmFyRHJhZzogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZURlZmF1bHRDb250ZXh0TWVudTogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlUmVzaXplOiBmYWxzZSxcclxuICAgICAgICBkZWZhdWx0Q3Vyc29yOiBudWxsLFxyXG4gICAgICAgIGJvcmRlclRoaWNrbmVzczogNixcclxuICAgICAgICBzaG91bGREcmFnOiBmYWxzZSxcclxuICAgICAgICBkZWZlckRyYWdUb01vdXNlTW92ZTogdHJ1ZSxcclxuICAgICAgICBjc3NEcmFnUHJvcGVydHk6IFwiLS13YWlscy1kcmFnZ2FibGVcIixcclxuICAgICAgICBjc3NEcmFnVmFsdWU6IFwiZHJhZ1wiLFxyXG4gICAgICAgIGNzc0Ryb3BQcm9wZXJ0eTogXCItLXdhaWxzLWRyb3AtdGFyZ2V0XCIsXHJcbiAgICAgICAgY3NzRHJvcFZhbHVlOiBcImRyb3BcIixcclxuICAgICAgICBlbmFibGVXYWlsc0RyYWdBbmREcm9wOiBmYWxzZSxcclxuICAgIH1cclxufTtcclxuXHJcbi8vIFNldCB0aGUgYmluZGluZ3NcclxuaWYgKHdpbmRvdy53YWlsc2JpbmRpbmdzKSB7XHJcbiAgICB3aW5kb3cud2FpbHMuU2V0QmluZGluZ3Mod2luZG93LndhaWxzYmluZGluZ3MpO1xyXG4gICAgZGVsZXRlIHdpbmRvdy53YWlscy5TZXRCaW5kaW5ncztcclxufVxyXG5cclxuLy8gKGJvb2wpIFRoaXMgaXMgZXZhbHVhdGVkIGF0IGJ1aWxkIHRpbWUgaW4gcGFja2FnZS5qc29uXHJcbmlmICghREVCVUcpIHtcclxuICAgIGRlbGV0ZSB3aW5kb3cud2FpbHNiaW5kaW5ncztcclxufVxyXG5cclxubGV0IGRyYWdUZXN0ID0gZnVuY3Rpb24oZSkge1xyXG4gICAgdmFyIHZhbCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUudGFyZ2V0KS5nZXRQcm9wZXJ0eVZhbHVlKHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkpO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICAgIHZhbCA9IHZhbC50cmltKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCAhPT0gd2luZG93LndhaWxzLmZsYWdzLmNzc0RyYWdWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5idXR0b25zICE9PSAxKSB7XHJcbiAgICAgICAgLy8gRG8gbm90IHN0YXJ0IGRyYWdnaW5nIGlmIG5vdCB0aGUgcHJpbWFyeSBidXR0b24gaGFzIGJlZW4gY2xpY2tlZC5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUuZGV0YWlsICE9PSAxKSB7XHJcbiAgICAgICAgLy8gRG8gbm90IHN0YXJ0IGRyYWdnaW5nIGlmIG1vcmUgdGhhbiBvbmNlIGhhcyBiZWVuIGNsaWNrZWQsIGUuZy4gd2hlbiBkb3VibGUgY2xpY2tpbmdcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn07XHJcblxyXG53aW5kb3cud2FpbHMuc2V0Q1NTRHJhZ1Byb3BlcnRpZXMgPSBmdW5jdGlvbihwcm9wZXJ0eSwgdmFsdWUpIHtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnUHJvcGVydHkgPSBwcm9wZXJ0eTtcclxuICAgIHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUgPSB2YWx1ZTtcclxufVxyXG5cclxud2luZG93LndhaWxzLnNldENTU0Ryb3BQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKSB7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFByb3BlcnR5ID0gcHJvcGVydHk7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJvcFZhbHVlID0gdmFsdWU7XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZSkgPT4ge1xyXG4gICAgLy8gQ2hlY2sgZm9yIHJlc2l6aW5nXHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpIHtcclxuICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJyZXNpemU6XCIgKyB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSk7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHJhZ1Rlc3QoZSkpIHtcclxuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVTY3JvbGxiYXJEcmFnKSB7XHJcbiAgICAgICAgICAgIC8vIFRoaXMgY2hlY2tzIGZvciBjbGlja3Mgb24gdGhlIHNjcm9sbCBiYXJcclxuICAgICAgICAgICAgaWYgKGUub2Zmc2V0WCA+IGUudGFyZ2V0LmNsaWVudFdpZHRoIHx8IGUub2Zmc2V0WSA+IGUudGFyZ2V0LmNsaWVudEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmZXJEcmFnVG9Nb3VzZU1vdmUpIHtcclxuICAgICAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJkcmFnXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gZmFsc2U7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAoKSA9PiB7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xyXG59KTtcclxuXHJcbmZ1bmN0aW9uIHNldFJlc2l6ZShjdXJzb3IpIHtcclxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3IgPSBjdXJzb3IgfHwgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3I7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSA9IGN1cnNvcjtcclxufVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGUpIHtcclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZykge1xyXG4gICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG1vdXNlUHJlc3NlZCA9IGUuYnV0dG9ucyAhPT0gdW5kZWZpbmVkID8gZS5idXR0b25zIDogZS53aGljaDtcclxuICAgICAgICBpZiAobW91c2VQcmVzc2VkID4gMCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoXCJkcmFnXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCF3aW5kb3cud2FpbHMuZmxhZ3MuZW5hYmxlUmVzaXplKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yID09IG51bGwpIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I7XHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93Lm91dGVyV2lkdGggLSBlLmNsaWVudFggPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzICYmIHdpbmRvdy5vdXRlckhlaWdodCAtIGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3MpIHtcclxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gXCJzZS1yZXNpemVcIjtcclxuICAgIH1cclxuICAgIGxldCByaWdodEJvcmRlciA9IHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCBsZWZ0Qm9yZGVyID0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCB0b3BCb3JkZXIgPSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG4gICAgbGV0IGJvdHRvbUJvcmRlciA9IHdpbmRvdy5vdXRlckhlaWdodCAtIGUuY2xpZW50WSA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcblxyXG4gICAgLy8gSWYgd2UgYXJlbid0IG9uIGFuIGVkZ2UsIGJ1dCB3ZXJlLCByZXNldCB0aGUgY3Vyc29yIHRvIGRlZmF1bHRcclxuICAgIGlmICghbGVmdEJvcmRlciAmJiAhcmlnaHRCb3JkZXIgJiYgIXRvcEJvcmRlciAmJiAhYm90dG9tQm9yZGVyICYmIHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBzZXRSZXNpemUoKTtcclxuICAgIH0gZWxzZSBpZiAocmlnaHRCb3JkZXIgJiYgYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzZS1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChsZWZ0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic3ctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiB0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm53LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHRvcEJvcmRlciAmJiByaWdodEJvcmRlcikgc2V0UmVzaXplKFwibmUtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlcikgc2V0UmVzaXplKFwidy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIpIHNldFJlc2l6ZShcIm4tcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAoYm90dG9tQm9yZGVyKSBzZXRSZXNpemUoXCJzLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKHJpZ2h0Qm9yZGVyKSBzZXRSZXNpemUoXCJlLXJlc2l6ZVwiKTtcclxuXHJcbn0pO1xyXG5cclxuLy8gU2V0dXAgY29udGV4dCBtZW51IGhvb2tcclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgZnVuY3Rpb24oZSkge1xyXG4gICAgLy8gYWx3YXlzIHNob3cgdGhlIGNvbnRleHRtZW51IGluIGRlYnVnICYgZGV2XHJcbiAgICBpZiAoREVCVUcpIHJldHVybjtcclxuXHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIENvbnRleHRNZW51LnByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZSk7XHJcbiAgICB9XHJcbn0pO1xyXG5cclxud2luZG93LldhaWxzSW52b2tlKFwicnVudGltZTpyZWFkeVwiKTsiXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWtCQSxXQUFTLGVBQWUsT0FBTyxTQUFTO0FBSXZDLFdBQU8sWUFBWSxNQUFNLFFBQVEsT0FBTztBQUFBLEVBQ3pDO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFB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LGFBQU8sTUFBTSxNQUFNLGFBQWE7QUFDaEMsVUFBSSxlQUFlLEVBQUUsWUFBWSxTQUFZLEVBQUUsVUFBVSxFQUFFO0FBQzNELFVBQUksZUFBZSxHQUFHO0FBQ2xCLGVBQU8sWUFBWSxNQUFNO0FBQ3pCO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxRQUFJLENBQUMsT0FBTyxNQUFNLE1BQU0sY0FBYztBQUNsQztBQUFBLElBQ0o7QUFDQSxRQUFJLE9BQU8sTUFBTSxNQUFNLGlCQUFpQixNQUFNO0FBQzFDLGFBQU8sTUFBTSxNQUFNLGdCQUFnQixTQUFTLGdCQUFnQixNQUFNO0FBQUEsSUFDdEU7QUFDQSxRQUFJLE9BQU8sYUFBYSxFQUFFLFVBQVUsT0FBTyxNQUFNLE1BQU0sbUJBQW1CLE9BQU8sY0FBYyxFQUFFLFVBQVUsT0FBTyxNQUFNLE1BQU0saUJBQWlCO0FBQzNJLGVBQVMsZ0JBQWdCLE1BQU0sU0FBUztBQUFBLElBQzVDO0FBQ0EsUUFBSSxjQUFjLE9BQU8sYUFBYSxFQUFFLFVBQVUsT0FBTyxNQUFNLE1BQU07QUFDckUsUUFBSSxhQUFhLEVBQUUsVUFBVSxPQUFPLE1BQU0sTUFBTTtBQUNoRCxRQUFJLFlBQVksRUFBRSxVQUFVLE9BQU8sTUFBTSxNQUFNO0FBQy9DLFFBQUksZUFBZSxPQUFPLGNBQWMsRUFBRSxVQUFVLE9BQU8sTUFBTSxNQUFNO0FBR3ZFLFFBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsT0FBTyxNQUFNLE1BQU0sZUFBZSxRQUFXO0FBQzNHLGdCQUFVO0FBQUEsSUFDZCxXQUFXLGVBQWU7QUFBYyxnQkFBVSxXQUFXO0FBQUEsYUFDcEQsY0FBYztBQUFjLGdCQUFVLFdBQVc7QUFBQSxhQUNqRCxjQUFjO0FBQVcsZ0JBQVUsV0FBVztBQUFBLGFBQzlDLGFBQWE7QUFBYSxnQkFBVSxXQUFXO0FBQUEsYUFDL0M7QUFBWSxnQkFBVSxVQUFVO0FBQUEsYUFDaEM7QUFBVyxnQkFBVSxVQUFVO0FBQUEsYUFDL0I7QUFBYyxnQkFBVSxVQUFVO0FBQUEsYUFDbEM7QUFBYSxnQkFBVSxVQUFVO0FBQUEsRUFFOUMsQ0FBQztBQUdELFNBQU8saUJBQWlCLGVBQWUsU0FBUyxHQUFHO0FBRS9DLFFBQUk7QUFBTztBQUVYLFFBQUksT0FBTyxNQUFNLE1BQU0sMkJBQTJCO0FBQzlDLFFBQUUsZUFBZTtBQUFBLElBQ3JCLE9BQU87QUFDSCxNQUFZLDBCQUEwQixDQUFDO0FBQUEsSUFDM0M7QUFBQSxFQUNKLENBQUM7QUFFRCxTQUFPLFlBQVksZUFBZTsiLAogICJuYW1lcyI6IFsiZXZlbnROYW1lIl0KfQo= +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZGVza3RvcC9sb2cuanMiLCAiZGVza3RvcC9ldmVudHMuanMiLCAiZGVza3RvcC9jYWxscy5qcyIsICJkZXNrdG9wL2JpbmRpbmdzLmpzIiwgImRlc2t0b3Avd2luZG93LmpzIiwgImRlc2t0b3Avc2NyZWVuLmpzIiwgImRlc2t0b3AvYnJvd3Nlci5qcyIsICJkZXNrdG9wL2NsaXBib2FyZC5qcyIsICJkZXNrdG9wL2RyYWdhbmRkcm9wLmpzIiwgImRlc2t0b3AvY29udGV4dG1lbnUuanMiLCAiZGVza3RvcC9tYWluLmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKlxyXG4gXyAgICAgICBfXyAgICAgIF8gX19cclxufCB8ICAgICAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA2ICovXHJcblxyXG4vKipcclxuICogU2VuZHMgYSBsb2cgbWVzc2FnZSB0byB0aGUgYmFja2VuZCB3aXRoIHRoZSBnaXZlbiBsZXZlbCArIG1lc3NhZ2VcclxuICpcclxuICogQHBhcmFtIHtzdHJpbmd9IGxldmVsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5mdW5jdGlvbiBzZW5kTG9nTWVzc2FnZShsZXZlbCwgbWVzc2FnZSkge1xyXG5cclxuXHQvLyBMb2cgTWVzc2FnZSBmb3JtYXQ6XHJcblx0Ly8gbFt0eXBlXVttZXNzYWdlXVxyXG5cdHdpbmRvdy5XYWlsc0ludm9rZSgnTCcgKyBsZXZlbCArIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiB0cmFjZSBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1RyYWNlKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnVCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1ByaW50KG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnUCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBkZWJ1ZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ0RlYnVnKG1lc3NhZ2UpIHtcclxuXHRzZW5kTG9nTWVzc2FnZSgnRCcsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG4vKipcclxuICogTG9nIHRoZSBnaXZlbiBpbmZvIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nSW5mbyhtZXNzYWdlKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ0knLCBtZXNzYWdlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIExvZyB0aGUgZ2l2ZW4gd2FybmluZyBtZXNzYWdlIHdpdGggdGhlIGJhY2tlbmRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIExvZ1dhcm5pbmcobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdXJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGVycm9yIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRXJyb3IobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdFJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2cgdGhlIGdpdmVuIGZhdGFsIG1lc3NhZ2Ugd2l0aCB0aGUgYmFja2VuZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gTG9nRmF0YWwobWVzc2FnZSkge1xyXG5cdHNlbmRMb2dNZXNzYWdlKCdGJywgbWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXRzIHRoZSBMb2cgbGV2ZWwgdG8gdGhlIGdpdmVuIGxvZyBsZXZlbFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBsb2dsZXZlbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFNldExvZ0xldmVsKGxvZ2xldmVsKSB7XHJcblx0c2VuZExvZ01lc3NhZ2UoJ1MnLCBsb2dsZXZlbCk7XHJcbn1cclxuXHJcbi8vIExvZyBsZXZlbHNcclxuZXhwb3J0IGNvbnN0IExvZ0xldmVsID0ge1xyXG5cdFRSQUNFOiAxLFxyXG5cdERFQlVHOiAyLFxyXG5cdElORk86IDMsXHJcblx0V0FSTklORzogNCxcclxuXHRFUlJPUjogNSxcclxufTtcclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuLy8gRGVmaW5lcyBhIHNpbmdsZSBsaXN0ZW5lciB3aXRoIGEgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdG8gY2FsbGJhY2tcclxuXHJcbi8qKlxyXG4gKiBUaGUgTGlzdGVuZXIgY2xhc3MgZGVmaW5lcyBhIGxpc3RlbmVyISA6LSlcclxuICpcclxuICogQGNsYXNzIExpc3RlbmVyXHJcbiAqL1xyXG5jbGFzcyBMaXN0ZW5lciB7XHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXIuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG1heENhbGxiYWNrc1xyXG4gICAgICogQG1lbWJlcm9mIExpc3RlbmVyXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xyXG4gICAgICAgIC8vIERlZmF1bHQgb2YgLTEgbWVhbnMgaW5maW5pdGVcclxuICAgICAgICB0aGlzLm1heENhbGxiYWNrcyA9IG1heENhbGxiYWNrcyB8fCAtMTtcclxuICAgICAgICAvLyBDYWxsYmFjayBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBnaXZlbiBkYXRhXHJcbiAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGlzdGVuZXIgc2hvdWxkIGJlIGRlc3Ryb3llZFxyXG4gICAgICAgIHRoaXMuQ2FsbGJhY2sgPSAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBkYXRhKTtcclxuICAgICAgICAgICAgLy8gSWYgbWF4Q2FsbGJhY2tzIGlzIGluZmluaXRlLCByZXR1cm4gZmFsc2UgKGRvIG5vdCBkZXN0cm95KVxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhDYWxsYmFja3MgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRGVjcmVtZW50IG1heENhbGxiYWNrcy4gUmV0dXJuIHRydWUgaWYgbm93IDAsIG90aGVyd2lzZSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLm1heENhbGxiYWNrcyAtPSAxO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXhDYWxsYmFja3MgPT09IDA7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGV2ZW50TGlzdGVuZXJzID0ge307XHJcblxyXG4vKipcclxuICogUmVnaXN0ZXJzIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGBtYXhDYWxsYmFja3NgIHRpbWVzIGJlZm9yZSBiZWluZyBkZXN0cm95ZWRcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhDYWxsYmFja3NcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIG1heENhbGxiYWNrcykge1xyXG4gICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gfHwgW107XHJcbiAgICBjb25zdCB0aGlzTGlzdGVuZXIgPSBuZXcgTGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFjaywgbWF4Q2FsbGJhY2tzKTtcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaCh0aGlzTGlzdGVuZXIpO1xyXG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVyT2ZmKHRoaXNMaXN0ZW5lcik7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgZXZlcnkgdGltZSB0aGUgZXZlbnQgaXMgZW1pdHRlZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbihldmVudE5hbWUsIGNhbGxiYWNrKSB7XHJcbiAgICByZXR1cm4gRXZlbnRzT25NdWx0aXBsZShldmVudE5hbWUsIGNhbGxiYWNrLCAtMSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGludm9rZWQgb25jZSB0aGVuIGRlc3Ryb3llZFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcclxuICogQHJldHVybnMge2Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIGNhbmNlbCB0aGUgbGlzdGVuZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNPbmNlKGV2ZW50TmFtZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBFdmVudHNPbk11bHRpcGxlKGV2ZW50TmFtZSwgY2FsbGJhY2ssIDEpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMoZXZlbnREYXRhKSB7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBldmVudCBuYW1lXHJcbiAgICBsZXQgZXZlbnROYW1lID0gZXZlbnREYXRhLm5hbWU7XHJcblxyXG4gICAgLy8gS2VlcCBhIGxpc3Qgb2YgbGlzdGVuZXIgaW5kZXhlcyB0byBkZXN0cm95XHJcbiAgICBjb25zdCBuZXdFdmVudExpc3RlbmVyTGlzdCA9IGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0/LnNsaWNlKCkgfHwgW107XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgbGlzdGVuZXJzIGZvciB0aGlzIGV2ZW50XHJcbiAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgIC8vIEl0ZXJhdGUgbGlzdGVuZXJzXHJcbiAgICAgICAgZm9yIChsZXQgY291bnQgPSBuZXdFdmVudExpc3RlbmVyTGlzdC5sZW5ndGggLSAxOyBjb3VudCA+PSAwOyBjb3VudCAtPSAxKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBHZXQgbmV4dCBsaXN0ZW5lclxyXG4gICAgICAgICAgICBjb25zdCBsaXN0ZW5lciA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0W2NvdW50XTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gZXZlbnREYXRhLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyB0aGUgY2FsbGJhY2tcclxuICAgICAgICAgICAgY29uc3QgZGVzdHJveSA9IGxpc3RlbmVyLkNhbGxiYWNrKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoZGVzdHJveSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGxpc3RlbmVyIGluZGljYXRlZCB0byBkZXN0cm95IGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBkZXN0cm95IGxpc3RcclxuICAgICAgICAgICAgICAgIG5ld0V2ZW50TGlzdGVuZXJMaXN0LnNwbGljZShjb3VudCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSBjYWxsYmFja3Mgd2l0aCBuZXcgbGlzdCBvZiBsaXN0ZW5lcnNcclxuICAgICAgICBpZiAobmV3RXZlbnRMaXN0ZW5lckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lcnNbZXZlbnROYW1lXSA9IG5ld0V2ZW50TGlzdGVuZXJMaXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE5vdGlmeSBpbmZvcm1zIGZyb250ZW5kIGxpc3RlbmVycyB0aGF0IGFuIGV2ZW50IHdhcyBlbWl0dGVkIHdpdGggdGhlIGdpdmVuIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbm90aWZ5TWVzc2FnZSAtIGVuY29kZWQgbm90aWZpY2F0aW9uIG1lc3NhZ2VcclxuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzTm90aWZ5KG5vdGlmeU1lc3NhZ2UpIHtcclxuICAgIC8vIFBhcnNlIHRoZSBtZXNzYWdlXHJcbiAgICBsZXQgbWVzc2FnZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgbWVzc2FnZSA9IEpTT04ucGFyc2Uobm90aWZ5TWVzc2FnZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnSW52YWxpZCBKU09OIHBhc3NlZCB0byBOb3RpZnk6ICcgKyBub3RpZnlNZXNzYWdlO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgICBub3RpZnlMaXN0ZW5lcnMobWVzc2FnZSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGRhdGFcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRzRW1pdChldmVudE5hbWUpIHtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcclxuICAgICAgICBkYXRhOiBbXS5zbGljZS5hcHBseShhcmd1bWVudHMpLnNsaWNlKDEpLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBOb3RpZnkgSlMgbGlzdGVuZXJzXHJcbiAgICBub3RpZnlMaXN0ZW5lcnMocGF5bG9hZCk7XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFRScgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSkge1xyXG4gICAgLy8gUmVtb3ZlIGxvY2FsIGxpc3RlbmVyc1xyXG4gICAgZGVsZXRlIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV07XHJcblxyXG4gICAgLy8gTm90aWZ5IEdvIGxpc3RlbmVyc1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdFWCcgKyBldmVudE5hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGEgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT24sXHJcbiAqIG9wdGlvbmFsbHkgbXVsdGlwbGUgbGlzdGVuZXJlcyBjYW4gYmUgdW5yZWdpc3RlcmVkIHZpYSBgYWRkaXRpb25hbEV2ZW50TmFtZXNgXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcclxuICogQHBhcmFtICB7Li4uc3RyaW5nfSBhZGRpdGlvbmFsRXZlbnROYW1lc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c09mZihldmVudE5hbWUsIC4uLmFkZGl0aW9uYWxFdmVudE5hbWVzKSB7XHJcbiAgICByZW1vdmVMaXN0ZW5lcihldmVudE5hbWUpXHJcblxyXG4gICAgaWYgKGFkZGl0aW9uYWxFdmVudE5hbWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhZGRpdGlvbmFsRXZlbnROYW1lcy5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogT2ZmIHVucmVnaXN0ZXJzIGFsbCBldmVudCBsaXN0ZW5lcnMgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGggT25cclxuICovXHJcbiBleHBvcnQgZnVuY3Rpb24gRXZlbnRzT2ZmQWxsKCkge1xyXG4gICAgY29uc3QgZXZlbnROYW1lcyA9IE9iamVjdC5rZXlzKGV2ZW50TGlzdGVuZXJzKTtcclxuICAgIGV2ZW50TmFtZXMuZm9yRWFjaChldmVudE5hbWUgPT4ge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSlcclxuICAgIH0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBsaXN0ZW5lck9mZiB1bnJlZ2lzdGVycyBhIGxpc3RlbmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIEV2ZW50c09uXHJcbiAqXHJcbiAqIEBwYXJhbSB7TGlzdGVuZXJ9IGxpc3RlbmVyXHJcbiAqL1xyXG4gZnVuY3Rpb24gbGlzdGVuZXJPZmYobGlzdGVuZXIpIHtcclxuICAgIGNvbnN0IGV2ZW50TmFtZSA9IGxpc3RlbmVyLmV2ZW50TmFtZTtcclxuICAgIGlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBSZW1vdmUgbG9jYWwgbGlzdGVuZXJcclxuICAgIGV2ZW50TGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBldmVudExpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihsID0+IGwgIT09IGxpc3RlbmVyKTtcclxuXHJcbiAgICAvLyBDbGVhbiB1cCBpZiB0aGVyZSBhcmUgbm8gZXZlbnQgbGlzdGVuZXJzIGxlZnRcclxuICAgIGlmIChldmVudExpc3RlbmVyc1tldmVudE5hbWVdLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVyKGV2ZW50TmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwgIi8qXHJcbiBfICAgICAgIF9fICAgICAgXyBfX1xyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGNhbGxiYWNrcyA9IHt9O1xyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgYSBudW1iZXIgZnJvbSB0aGUgbmF0aXZlIGJyb3dzZXIgcmFuZG9tIGZ1bmN0aW9uXHJcbiAqXHJcbiAqIEByZXR1cm5zIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gY3J5cHRvUmFuZG9tKCkge1xyXG5cdHZhciBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKTtcclxuXHRyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpWzBdO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhIG51bWJlciB1c2luZyBkYSBvbGQtc2tvb2wgTWF0aC5SYW5kb21cclxuICogSSBsaWtlcyB0byBjYWxsIGl0IExPTFJhbmRvbVxyXG4gKlxyXG4gKiBAcmV0dXJucyBudW1iZXJcclxuICovXHJcbmZ1bmN0aW9uIGJhc2ljUmFuZG9tKCkge1xyXG5cdHJldHVybiBNYXRoLnJhbmRvbSgpICogOTAwNzE5OTI1NDc0MDk5MTtcclxufVxyXG5cclxuLy8gUGljayBhIHJhbmRvbSBudW1iZXIgZnVuY3Rpb24gYmFzZWQgb24gYnJvd3NlciBjYXBhYmlsaXR5XHJcbnZhciByYW5kb21GdW5jO1xyXG5pZiAod2luZG93LmNyeXB0bykge1xyXG5cdHJhbmRvbUZ1bmMgPSBjcnlwdG9SYW5kb207XHJcbn0gZWxzZSB7XHJcblx0cmFuZG9tRnVuYyA9IGJhc2ljUmFuZG9tO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGwgc2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBiYWNrZW5kIHRvIGNhbGwgdGhlIGJpbmRpbmcgd2l0aCB0aGVcclxuICogZ2l2ZW4gZGF0YS4gQSBwcm9taXNlIGlzIHJldHVybmVkIGFuZCB3aWxsIGJlIGNvbXBsZXRlZCB3aGVuIHRoZVxyXG4gKiBiYWNrZW5kIHJlc3BvbmRzLiBUaGlzIHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bFxyXG4gKiBvciByZWplY3RlZCBpZiBhbiBlcnJvciBpcyBwYXNzZWQgYmFjay5cclxuICogVGhlcmUgaXMgYSB0aW1lb3V0IG1lY2hhbmlzbS4gSWYgdGhlIGNhbGwgZG9lc24ndCByZXNwb25kIGluIHRoZSBnaXZlblxyXG4gKiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRoZW4gdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHthbnk9fSBhcmdzXHJcbiAqIEBwYXJhbSB7bnVtYmVyPX0gdGltZW91dFxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENhbGwobmFtZSwgYXJncywgdGltZW91dCkge1xyXG5cclxuXHQvLyBUaW1lb3V0IGluZmluaXRlIGJ5IGRlZmF1bHRcclxuXHRpZiAodGltZW91dCA9PSBudWxsKSB7XHJcblx0XHR0aW1lb3V0ID0gMDtcclxuXHR9XHJcblxyXG5cdC8vIENyZWF0ZSBhIHByb21pc2VcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG5cclxuXHRcdC8vIENyZWF0ZSBhIHVuaXF1ZSBjYWxsYmFja0lEXHJcblx0XHR2YXIgY2FsbGJhY2tJRDtcclxuXHRcdGRvIHtcclxuXHRcdFx0Y2FsbGJhY2tJRCA9IG5hbWUgKyAnLScgKyByYW5kb21GdW5jKCk7XHJcblx0XHR9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xyXG5cclxuXHRcdHZhciB0aW1lb3V0SGFuZGxlO1xyXG5cdFx0Ly8gU2V0IHRpbWVvdXRcclxuXHRcdGlmICh0aW1lb3V0ID4gMCkge1xyXG5cdFx0XHR0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmVqZWN0KEVycm9yKCdDYWxsIHRvICcgKyBuYW1lICsgJyB0aW1lZCBvdXQuIFJlcXVlc3QgSUQ6ICcgKyBjYWxsYmFja0lEKSk7XHJcblx0XHRcdH0sIHRpbWVvdXQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFN0b3JlIGNhbGxiYWNrXHJcblx0XHRjYWxsYmFja3NbY2FsbGJhY2tJRF0gPSB7XHJcblx0XHRcdHRpbWVvdXRIYW5kbGU6IHRpbWVvdXRIYW5kbGUsXHJcblx0XHRcdHJlamVjdDogcmVqZWN0LFxyXG5cdFx0XHRyZXNvbHZlOiByZXNvbHZlXHJcblx0XHR9O1xyXG5cclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IHBheWxvYWQgPSB7XHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHRhcmdzLFxyXG5cdFx0XHRcdGNhbGxiYWNrSUQsXHJcblx0XHRcdH07XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHRoZSBjYWxsXHJcbiAgICAgICAgICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnQycgKyBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxud2luZG93Lk9iZnVzY2F0ZWRDYWxsID0gKGlkLCBhcmdzLCB0aW1lb3V0KSA9PiB7XHJcblxyXG4gICAgLy8gVGltZW91dCBpbmZpbml0ZSBieSBkZWZhdWx0XHJcbiAgICBpZiAodGltZW91dCA9PSBudWxsKSB7XHJcbiAgICAgICAgdGltZW91dCA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgcHJvbWlzZVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgdW5pcXVlIGNhbGxiYWNrSURcclxuICAgICAgICB2YXIgY2FsbGJhY2tJRDtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrSUQgPSBpZCArICctJyArIHJhbmRvbUZ1bmMoKTtcclxuICAgICAgICB9IHdoaWxlIChjYWxsYmFja3NbY2FsbGJhY2tJRF0pO1xyXG5cclxuICAgICAgICB2YXIgdGltZW91dEhhbmRsZTtcclxuICAgICAgICAvLyBTZXQgdGltZW91dFxyXG4gICAgICAgIGlmICh0aW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoJ0NhbGwgdG8gbWV0aG9kICcgKyBpZCArICcgdGltZWQgb3V0LiBSZXF1ZXN0IElEOiAnICsgY2FsbGJhY2tJRCkpO1xyXG4gICAgICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFN0b3JlIGNhbGxiYWNrXHJcbiAgICAgICAgY2FsbGJhY2tzW2NhbGxiYWNrSURdID0ge1xyXG4gICAgICAgICAgICB0aW1lb3V0SGFuZGxlOiB0aW1lb3V0SGFuZGxlLFxyXG4gICAgICAgICAgICByZWplY3Q6IHJlamVjdCxcclxuICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcblx0XHRcdFx0aWQsXHJcblx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRjYWxsYmFja0lELFxyXG5cdFx0XHR9O1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSB0aGUgY2FsbFxyXG4gICAgICAgICAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ2MnICsgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIENhbGxlZCBieSB0aGUgYmFja2VuZCB0byByZXR1cm4gZGF0YSB0byBhIHByZXZpb3VzbHkgY2FsbGVkXHJcbiAqIGJpbmRpbmcgaW52b2NhdGlvblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbmNvbWluZ01lc3NhZ2VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBDYWxsYmFjayhpbmNvbWluZ01lc3NhZ2UpIHtcclxuXHQvLyBQYXJzZSB0aGUgbWVzc2FnZVxyXG5cdGxldCBtZXNzYWdlO1xyXG5cdHRyeSB7XHJcblx0XHRtZXNzYWdlID0gSlNPTi5wYXJzZShpbmNvbWluZ01lc3NhZ2UpO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnN0IGVycm9yID0gYEludmFsaWQgSlNPTiBwYXNzZWQgdG8gY2FsbGJhY2s6ICR7ZS5tZXNzYWdlfS4gTWVzc2FnZTogJHtpbmNvbWluZ01lc3NhZ2V9YDtcclxuXHRcdHJ1bnRpbWUuTG9nRGVidWcoZXJyb3IpO1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yKTtcclxuXHR9XHJcblx0bGV0IGNhbGxiYWNrSUQgPSBtZXNzYWdlLmNhbGxiYWNraWQ7XHJcblx0bGV0IGNhbGxiYWNrRGF0YSA9IGNhbGxiYWNrc1tjYWxsYmFja0lEXTtcclxuXHRpZiAoIWNhbGxiYWNrRGF0YSkge1xyXG5cdFx0Y29uc3QgZXJyb3IgPSBgQ2FsbGJhY2sgJyR7Y2FsbGJhY2tJRH0nIG5vdCByZWdpc3RlcmVkISEhYDtcclxuXHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXHJcblx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xyXG5cdH1cclxuXHRjbGVhclRpbWVvdXQoY2FsbGJhY2tEYXRhLnRpbWVvdXRIYW5kbGUpO1xyXG5cclxuXHRkZWxldGUgY2FsbGJhY2tzW2NhbGxiYWNrSURdO1xyXG5cclxuXHRpZiAobWVzc2FnZS5lcnJvcikge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlamVjdChtZXNzYWdlLmVycm9yKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y2FsbGJhY2tEYXRhLnJlc29sdmUobWVzc2FnZS5yZXN1bHQpO1xyXG5cdH1cclxufVxyXG4iLCAiLypcclxuIF8gICAgICAgX18gICAgICBfIF9fICAgIFxyXG58IHwgICAgIC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApIFxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy8gIFxyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuLyoganNoaW50IGVzdmVyc2lvbjogNiAqL1xyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tICcuL2NhbGxzJztcclxuXHJcbi8vIFRoaXMgaXMgd2hlcmUgd2UgYmluZCBnbyBtZXRob2Qgd3JhcHBlcnNcclxud2luZG93LmdvID0ge307XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gU2V0QmluZGluZ3MoYmluZGluZ3NNYXApIHtcclxuXHR0cnkge1xyXG5cdFx0YmluZGluZ3NNYXAgPSBKU09OLnBhcnNlKGJpbmRpbmdzTWFwKTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdH1cclxuXHJcblx0Ly8gSW5pdGlhbGlzZSB0aGUgYmluZGluZ3MgbWFwXHJcblx0d2luZG93LmdvID0gd2luZG93LmdvIHx8IHt9O1xyXG5cclxuXHQvLyBJdGVyYXRlIHBhY2thZ2UgbmFtZXNcclxuXHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcCkuZm9yRWFjaCgocGFja2FnZU5hbWUpID0+IHtcclxuXHJcblx0XHQvLyBDcmVhdGUgaW5uZXIgbWFwIGlmIGl0IGRvZXNuJ3QgZXhpc3RcclxuXHRcdHdpbmRvdy5nb1twYWNrYWdlTmFtZV0gPSB3aW5kb3cuZ29bcGFja2FnZU5hbWVdIHx8IHt9O1xyXG5cclxuXHRcdC8vIEl0ZXJhdGUgc3RydWN0IG5hbWVzXHJcblx0XHRPYmplY3Qua2V5cyhiaW5kaW5nc01hcFtwYWNrYWdlTmFtZV0pLmZvckVhY2goKHN0cnVjdE5hbWUpID0+IHtcclxuXHJcblx0XHRcdC8vIENyZWF0ZSBpbm5lciBtYXAgaWYgaXQgZG9lc24ndCBleGlzdFxyXG5cdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdID0gd2luZG93LmdvW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSB8fCB7fTtcclxuXHJcblx0XHRcdE9iamVjdC5rZXlzKGJpbmRpbmdzTWFwW3BhY2thZ2VOYW1lXVtzdHJ1Y3ROYW1lXSkuZm9yRWFjaCgobWV0aG9kTmFtZSkgPT4ge1xyXG5cclxuXHRcdFx0XHR3aW5kb3cuZ29bcGFja2FnZU5hbWVdW3N0cnVjdE5hbWVdW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKCkge1xyXG5cclxuXHRcdFx0XHRcdC8vIE5vIHRpbWVvdXQgYnkgZGVmYXVsdFxyXG5cdFx0XHRcdFx0bGV0IHRpbWVvdXQgPSAwO1xyXG5cclxuXHRcdFx0XHRcdC8vIEFjdHVhbCBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZnVuY3Rpb24gZHluYW1pYygpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIENhbGwoW3BhY2thZ2VOYW1lLCBzdHJ1Y3ROYW1lLCBtZXRob2ROYW1lXS5qb2luKCcuJyksIGFyZ3MsIHRpbWVvdXQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IHNldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24gKG5ld1RpbWVvdXQpIHtcclxuXHRcdFx0XHRcdFx0dGltZW91dCA9IG5ld1RpbWVvdXQ7XHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdC8vIEFsbG93IGdldHRpbmcgdGltZW91dCB0byBmdW5jdGlvblxyXG5cdFx0XHRcdFx0ZHluYW1pYy5nZXRUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGltZW91dDtcclxuXHRcdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdFx0cmV0dXJuIGR5bmFtaWM7XHJcblx0XHRcdFx0fSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZCgpIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1JlbG9hZEFwcCgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1InKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFN5c3RlbURlZmF1bHRUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FTRFQnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldExpZ2h0VGhlbWUoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dBTFQnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldERhcmtUaGVtZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FEVCcpO1xyXG59XHJcblxyXG4vKipcclxuICogUGxhY2UgdGhlIHdpbmRvdyBpbiB0aGUgY2VudGVyIG9mIHRoZSBzY3JlZW5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0NlbnRlcigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgdGhlIHdpbmRvdyB0aXRsZVxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGVcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFRpdGxlKHRpdGxlKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dUJyArIHRpdGxlKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1ha2VzIHRoZSB3aW5kb3cgZ28gZnVsbHNjcmVlblxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93RnVsbHNjcmVlbigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0YnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldmVydHMgdGhlIHdpbmRvdyBmcm9tIGZ1bGxzY3JlZW5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VuZnVsbHNjcmVlbigpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV2YnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIGluIGZ1bGwgc2NyZWVuIG1vZGUgb3Igbm90LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNGdWxsc2NyZWVuKCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6V2luZG93SXNGdWxsc2NyZWVuXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcclxuICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1NldFNpemUod2lkdGgsIGhlaWdodCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXczonICsgd2lkdGggKyAnOicgKyBoZWlnaHQpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBTaXplIG9mIHRoZSB3aW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAcmV0dXJuIHtQcm9taXNlPHt3OiBudW1iZXIsIGg6IG51bWJlcn0+fSBUaGUgc2l6ZSBvZiB0aGUgd2luZG93XHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd0dldFNpemUoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dHZXRTaXplXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aFxyXG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0TWF4U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1daOicgKyB3aWR0aCArICc6JyArIGhlaWdodCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dTZXRNaW5TaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3o6JyArIHdpZHRoICsgJzonICsgaGVpZ2h0KTtcclxufVxyXG5cclxuXHJcblxyXG4vKipcclxuICogU2V0IHRoZSB3aW5kb3cgQWx3YXlzT25Ub3Agb3Igbm90IG9uIHRvcFxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QWx3YXlzT25Ub3AoYikge1xyXG5cclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0FUUDonICsgKGIgPyAnMScgOiAnMCcpKTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuLyoqXHJcbiAqIFNldCB0aGUgUG9zaXRpb24gb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0UG9zaXRpb24oeCwgeSkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcDonICsgeCArICc6JyArIHkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBQb3NpdGlvbiBvZiB0aGUgd2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7eDogbnVtYmVyLCB5OiBudW1iZXJ9Pn0gVGhlIHBvc2l0aW9uIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dHZXRQb3NpdGlvbigpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0dldFBvc1wiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEhpZGUgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SGlkZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV0gnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNob3cgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2hvdygpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1MnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1heGltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd01heGltaXNlKCkge1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXTScpO1xyXG59XHJcblxyXG4vKipcclxuICogVG9nZ2xlIHRoZSBNYXhpbWlzZSBvZiB0aGUgV2luZG93XHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dUb2dnbGVNYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV3QnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFVubWF4aW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93VW5tYXhpbWlzZSgpIHtcclxuICAgIHdpbmRvdy5XYWlsc0ludm9rZSgnV1UnKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG1heGltaXNlZCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc01heGltaXNlZCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTWF4aW1pc2VkXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogTWluaW1pc2UgdGhlIFdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93TWluaW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1dtJyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVbm1pbmltaXNlIHRoZSBXaW5kb3dcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFdpbmRvd1VubWluaW1pc2UoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1d1Jyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBzdGF0ZSBvZiB0aGUgd2luZG93LCBpLmUuIHdoZXRoZXIgdGhlIHdpbmRvdyBpcyBtaW5pbWlzZWQgb3Igbm90LlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59IFRoZSBzdGF0ZSBvZiB0aGUgd2luZG93XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93SXNNaW5pbWlzZWQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpXaW5kb3dJc01pbmltaXNlZFwiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybnMgdGhlIHN0YXRlIG9mIHRoZSB3aW5kb3csIGkuZS4gd2hldGhlciB0aGUgd2luZG93IGlzIG5vcm1hbCBvciBub3QuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTxib29sZWFuPn0gVGhlIHN0YXRlIG9mIHRoZSB3aW5kb3dcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXaW5kb3dJc05vcm1hbCgpIHtcclxuICAgIHJldHVybiBDYWxsKFwiOndhaWxzOldpbmRvd0lzTm9ybWFsXCIpO1xyXG59XHJcblxyXG4vKipcclxuICogU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvdXIgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBSIFJlZFxyXG4gKiBAcGFyYW0ge251bWJlcn0gRyBHcmVlblxyXG4gKiBAcGFyYW0ge251bWJlcn0gQiBCbHVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBBIEFscGhhXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gV2luZG93U2V0QmFja2dyb3VuZENvbG91cihSLCBHLCBCLCBBKSB7XHJcbiAgICBsZXQgcmdiYSA9IEpTT04uc3RyaW5naWZ5KHtyOiBSIHx8IDAsIGc6IEcgfHwgMCwgYjogQiB8fCAwLCBhOiBBIHx8IDI1NX0pO1xyXG4gICAgd2luZG93LldhaWxzSW52b2tlKCdXcjonICsgcmdiYSk7XHJcbn1cclxuXHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcblxyXG4vKiBqc2hpbnQgZXN2ZXJzaW9uOiA5ICovXHJcblxyXG5cclxuaW1wb3J0IHtDYWxsfSBmcm9tIFwiLi9jYWxsc1wiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBhbGwgc2NyZWVucy4gQ2FsbCB0aGlzIGFuZXcgZWFjaCB0aW1lIHlvdSB3YW50IHRvIHJlZnJlc2ggZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nIHdpbmRvd2luZyBzeXN0ZW0uXHJcbiAqIEBleHBvcnRcclxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vd3JhcHBlci9ydW50aW1lJykuU2NyZWVufSBTY3JlZW5cclxuICogQHJldHVybiB7UHJvbWlzZTx7U2NyZWVuW119Pn0gVGhlIHNjcmVlbnNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBTY3JlZW5HZXRBbGwoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpTY3JlZW5HZXRBbGxcIik7XHJcbn1cclxuIiwgIi8qKlxyXG4gKiBAZGVzY3JpcHRpb246IFVzZSB0aGUgc3lzdGVtIGRlZmF1bHQgYnJvd3NlciB0byBvcGVuIHRoZSB1cmxcclxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBcclxuICogQHJldHVybiB7dm9pZH1cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBCcm93c2VyT3BlblVSTCh1cmwpIHtcclxuICB3aW5kb3cuV2FpbHNJbnZva2UoJ0JPOicgKyB1cmwpO1xyXG59IiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcbmltcG9ydCB7Q2FsbH0gZnJvbSBcIi4vY2FsbHNcIjtcclxuXHJcbi8qKlxyXG4gKiBTZXQgdGhlIFNpemUgb2YgdGhlIHdpbmRvd1xyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gQ2xpcGJvYXJkU2V0VGV4dCh0ZXh0KSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRTZXRUZXh0XCIsIFt0ZXh0XSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXQgdGhlIHRleHQgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHJldHVybiB7UHJvbWlzZTx7c3RyaW5nfT59IFRleHQgY29udGVudCBvZiB0aGUgY2xpcGJvYXJkXHJcblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENsaXBib2FyZEdldFRleHQoKSB7XHJcbiAgICByZXR1cm4gQ2FsbChcIjp3YWlsczpDbGlwYm9hcmRHZXRUZXh0XCIpO1xyXG59IiwgIi8qXHJcbiBfXHQgICBfX1x0ICBfIF9fXHJcbnwgfFx0IC8gL19fXyBfKF8pIC9fX19fXHJcbnwgfCAvfCAvIC8gX18gYC8gLyAvIF9fXy9cclxufCB8LyB8LyAvIC9fLyAvIC8gKF9fICApXHJcbnxfXy98X18vXFxfXyxfL18vXy9fX19fL1xyXG5UaGUgZWxlY3Ryb24gYWx0ZXJuYXRpdmUgZm9yIEdvXHJcbihjKSBMZWEgQW50aG9ueSAyMDE5LXByZXNlbnRcclxuKi9cclxuXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuXHJcbmltcG9ydCB7RXZlbnRzT24sIEV2ZW50c09mZn0gZnJvbSBcIi4vZXZlbnRzXCI7XHJcblxyXG5jb25zdCBmbGFncyA9IHtcclxuICAgIHJlZ2lzdGVyZWQ6IGZhbHNlLFxyXG4gICAgZGVmYXVsdFVzZURyb3BUYXJnZXQ6IHRydWUsXHJcbiAgICB1c2VEcm9wVGFyZ2V0OiB0cnVlLFxyXG4gICAgbmV4dERlYWN0aXZhdGU6IG51bGwsXHJcbiAgICBuZXh0RGVhY3RpdmF0ZVRpbWVvdXQ6IG51bGwsXHJcbn07XHJcblxyXG5jb25zdCBEUk9QX1RBUkdFVF9BQ1RJVkUgPSBcIndhaWxzLWRyb3AtdGFyZ2V0LWFjdGl2ZVwiO1xyXG5cclxuLyoqXHJcbiAqIGNoZWNrU3R5bGVEcm9wVGFyZ2V0IGNoZWNrcyBpZiB0aGUgc3R5bGUgaGFzIHRoZSBkcm9wIHRhcmdldCBhdHRyaWJ1dGVcclxuICogXHJcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGUgXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuZnVuY3Rpb24gY2hlY2tTdHlsZURyb3BUYXJnZXQoc3R5bGUpIHtcclxuICAgIGNvbnN0IGNzc0Ryb3BWYWx1ZSA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUod2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BQcm9wZXJ0eSkudHJpbSgpO1xyXG4gICAgaWYgKGNzc0Ryb3BWYWx1ZSkge1xyXG4gICAgICAgIGlmIChjc3NEcm9wVmFsdWUgPT09IHdpbmRvdy53YWlscy5mbGFncy5jc3NEcm9wVmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHRoZSBlbGVtZW50IGhhcyB0aGUgZHJvcCB0YXJnZXQgYXR0cmlidXRlLCBidXQgXHJcbiAgICAgICAgLy8gdGhlIHZhbHVlIGlzIG5vdCBjb3JyZWN0LCB0ZXJtaW5hdGUgZmluZGluZyBwcm9jZXNzLlxyXG4gICAgICAgIC8vIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBibG9jayBzb21lIGNoaWxkIGVsZW1lbnRzIGZyb20gYmVpbmcgZHJvcCB0YXJnZXRzLlxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIG9uRHJhZ092ZXIgaXMgY2FsbGVkIHdoZW4gdGhlIGRyYWdvdmVyIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBlXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBvbkRyYWdPdmVyKGUpIHtcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYW4gZXh0ZXJuYWwgZmlsZSBkcm9wIG9yIGludGVybmFsIEhUTUwgZHJhZ1xyXG4gICAgLy8gRXh0ZXJuYWwgZmlsZSBkcm9wcyB3aWxsIGhhdmUgXCJGaWxlc1wiIGluIHRoZSB0eXBlcyBhcnJheVxyXG4gICAgLy8gSW50ZXJuYWwgSFRNTCBkcmFncyB0eXBpY2FsbHkgaGF2ZSBcInRleHQvcGxhaW5cIiwgXCJ0ZXh0L2h0bWxcIiBvciBjdXN0b20gdHlwZXNcclxuICAgIGNvbnN0IGlzRmlsZURyb3AgPSBlLmRhdGFUcmFuc2Zlci50eXBlcy5pbmNsdWRlcyhcIkZpbGVzXCIpO1xyXG5cclxuICAgIC8vIE9ubHkgaGFuZGxlIGV4dGVybmFsIGZpbGUgZHJvcHMsIGxldCBpbnRlcm5hbCBIVE1MNSBkcmFnLWFuZC1kcm9wIHdvcmsgbm9ybWFsbHlcclxuICAgIGlmICghaXNGaWxlRHJvcCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBTFdBWVMgcHJldmVudCBkZWZhdWx0IGZvciBmaWxlIGRyb3BzIHRvIHN0b3AgYnJvd3NlciBuYXZpZ2F0aW9uXHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xyXG5cclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldDtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXHJcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcclxuXHJcbiAgICAvLyBpZiB0aGUgZWxlbWVudCBpcyBudWxsIG9yIGVsZW1lbnQgaXMgbm90IGNoaWxkIG9mIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgIGlmICghZWxlbWVudCB8fCAhY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSkpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnRFbGVtZW50IGlzIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgICAgICBpZiAoY2hlY2tTdHlsZURyb3BUYXJnZXQoZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCkpKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoRFJPUF9UQVJHRVRfQUNUSVZFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogb25EcmFnTGVhdmUgaXMgY2FsbGVkIHdoZW4gdGhlIGRyYWdsZWF2ZSBldmVudCBpcyBlbWl0dGVkLlxyXG4gKiBAcGFyYW0ge0RyYWdFdmVudH0gZVxyXG4gKiBAcmV0dXJuc1xyXG4gKi9cclxuZnVuY3Rpb24gb25EcmFnTGVhdmUoZSkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBleHRlcm5hbCBmaWxlIGRyb3Agb3IgaW50ZXJuYWwgSFRNTCBkcmFnXHJcbiAgICBjb25zdCBpc0ZpbGVEcm9wID0gZS5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoXCJGaWxlc1wiKTtcclxuXHJcbiAgICAvLyBPbmx5IGhhbmRsZSBleHRlcm5hbCBmaWxlIGRyb3BzLCBsZXQgaW50ZXJuYWwgSFRNTDUgZHJhZy1hbmQtZHJvcCB3b3JrIG5vcm1hbGx5XHJcbiAgICBpZiAoIWlzRmlsZURyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQUxXQVlTIHByZXZlbnQgZGVmYXVsdCBmb3IgZmlsZSBkcm9wcyB0byBzdG9wIGJyb3dzZXIgbmF2aWdhdGlvblxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZpbmQgdGhlIGNsb3NlIGRyb3AgdGFyZ2V0IGVsZW1lbnRcclxuICAgIGlmICghZS50YXJnZXQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZS50YXJnZXQpKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRyaWdnZXIgZGVib3VuY2UgZnVuY3Rpb24gdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHNcclxuICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xyXG4gICAgXHJcbiAgICAvLyBVc2UgZGVib3VuY2UgdGVjaG5pcXVlIHRvIHRhY2xlIGRyYWdsZWF2ZSBldmVudHMgb24gb3ZlcmxhcHBpbmcgZWxlbWVudHMgYW5kIGRyb3AgdGFyZ2V0IGVsZW1lbnRzXHJcbiAgICBmbGFncy5uZXh0RGVhY3RpdmF0ZSA9ICgpID0+IHtcclxuICAgICAgICAvLyBEZWFjdGl2YXRlIGFsbCBkcm9wIHRhcmdldHMsIG5ldyBkcm9wIHRhcmdldCB3aWxsIGJlIGFjdGl2YXRlZCBvbiBuZXh0IGRyYWdvdmVyIGV2ZW50XHJcbiAgICAgICAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKERST1BfVEFSR0VUX0FDVElWRSkpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShEUk9QX1RBUkdFVF9BQ1RJVkUpKTtcclxuICAgICAgICAvLyBSZXNldCBuZXh0RGVhY3RpdmF0ZVxyXG4gICAgICAgIGZsYWdzLm5leHREZWFjdGl2YXRlID0gbnVsbDtcclxuICAgICAgICAvLyBDbGVhciB0aW1lb3V0XHJcbiAgICAgICAgaWYgKGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0KTtcclxuICAgICAgICAgICAgZmxhZ3MubmV4dERlYWN0aXZhdGVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2V0IHRpbWVvdXQgdG8gZGVhY3RpdmF0ZSBkcm9wIHRhcmdldHMgaWYgbm90IHRyaWdnZXJlZCBieSBuZXh0IGRyYWcgZXZlbnRcclxuICAgIGZsYWdzLm5leHREZWFjdGl2YXRlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmKGZsYWdzLm5leHREZWFjdGl2YXRlKSBmbGFncy5uZXh0RGVhY3RpdmF0ZSgpO1xyXG4gICAgfSwgNTApO1xyXG59XHJcblxyXG4vKipcclxuICogb25Ecm9wIGlzIGNhbGxlZCB3aGVuIHRoZSBkcm9wIGV2ZW50IGlzIGVtaXR0ZWQuXHJcbiAqIEBwYXJhbSB7RHJhZ0V2ZW50fSBlXHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG5mdW5jdGlvbiBvbkRyb3AoZSkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBleHRlcm5hbCBmaWxlIGRyb3Agb3IgaW50ZXJuYWwgSFRNTCBkcmFnXHJcbiAgICBjb25zdCBpc0ZpbGVEcm9wID0gZS5kYXRhVHJhbnNmZXIudHlwZXMuaW5jbHVkZXMoXCJGaWxlc1wiKTtcclxuXHJcbiAgICAvLyBPbmx5IGhhbmRsZSBleHRlcm5hbCBmaWxlIGRyb3BzLCBsZXQgaW50ZXJuYWwgSFRNTDUgZHJhZy1hbmQtZHJvcCB3b3JrIG5vcm1hbGx5XHJcbiAgICBpZiAoIWlzRmlsZURyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQUxXQVlTIHByZXZlbnQgZGVmYXVsdCBmb3IgZmlsZSBkcm9wcyB0byBzdG9wIGJyb3dzZXIgbmF2aWdhdGlvblxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVdhaWxzRHJhZ0FuZERyb3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKENhblJlc29sdmVGaWxlUGF0aHMoKSkge1xyXG4gICAgICAgIC8vIHByb2Nlc3MgZmlsZXNcclxuICAgICAgICBsZXQgZmlsZXMgPSBbXTtcclxuICAgICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcclxuICAgICAgICAgICAgZmlsZXMgPSBbLi4uZS5kYXRhVHJhbnNmZXIuaXRlbXNdLm1hcCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ua2luZCA9PT0gJ2ZpbGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0QXNGaWxlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbGVzID0gWy4uLmUuZGF0YVRyYW5zZmVyLmZpbGVzXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd2luZG93LnJ1bnRpbWUuUmVzb2x2ZUZpbGVQYXRocyhlLngsIGUueSwgZmlsZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZmxhZ3MudXNlRHJvcFRhcmdldCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUcmlnZ2VyIGRlYm91bmNlIGZ1bmN0aW9uIHRvIGRlYWN0aXZhdGUgZHJvcCB0YXJnZXRzXHJcbiAgICBpZihmbGFncy5uZXh0RGVhY3RpdmF0ZSkgZmxhZ3MubmV4dERlYWN0aXZhdGUoKTtcclxuXHJcbiAgICAvLyBEZWFjdGl2YXRlIGFsbCBkcm9wIHRhcmdldHNcclxuICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShEUk9QX1RBUkdFVF9BQ1RJVkUpKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC5yZW1vdmUoRFJPUF9UQVJHRVRfQUNUSVZFKSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBwb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0cyBjaGVja3MgdGhlIGJyb3dzZXIncyBjYXBhYmlsaXR5IG9mIHNlbmRpbmcgcG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHNcclxuICpcclxuICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENhblJlc29sdmVGaWxlUGF0aHMoKSB7XHJcbiAgICByZXR1cm4gd2luZG93LmNocm9tZT8ud2Vidmlldz8ucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMgIT0gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlc29sdmVGaWxlUGF0aHMgc2VuZHMgZHJvcCBldmVudHMgdG8gdGhlIEdPIHNpZGUgdG8gcmVzb2x2ZSBmaWxlIHBhdGhzIG9uIHdpbmRvd3MuXHJcbiAqXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5XHJcbiAqIEBwYXJhbSB7YW55W119IGZpbGVzXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFJlc29sdmVGaWxlUGF0aHMoeCwgeSwgZmlsZXMpIHtcclxuICAgIC8vIE9ubHkgZm9yIHdpbmRvd3Mgd2VidmlldzIgPj0gMS4wLjE3NzQuMzBcclxuICAgIC8vIGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy9taWNyb3NvZnQtZWRnZS93ZWJ2aWV3Mi9yZWZlcmVuY2Uvd2luMzIvaWNvcmV3ZWJ2aWV3MndlYm1lc3NhZ2VyZWNlaXZlZGV2ZW50YXJnczI/dmlldz13ZWJ2aWV3Mi0xLjAuMTgyMy4zMiNhcHBsaWVzLXRvXHJcbiAgICBpZiAod2luZG93LmNocm9tZT8ud2Vidmlldz8ucG9zdE1lc3NhZ2VXaXRoQWRkaXRpb25hbE9iamVjdHMpIHtcclxuICAgICAgICBjaHJvbWUud2Vidmlldy5wb3N0TWVzc2FnZVdpdGhBZGRpdGlvbmFsT2JqZWN0cyhgZmlsZTpkcm9wOiR7eH06JHt5fWAsIGZpbGVzKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGxiYWNrIGZvciBPbkZpbGVEcm9wIHJldHVybnMgYSBzbGljZSBvZiBmaWxlIHBhdGggc3RyaW5ncyB3aGVuIGEgZHJvcCBpcyBmaW5pc2hlZC5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKiBAY2FsbGJhY2sgT25GaWxlRHJvcENhbGxiYWNrXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4IC0geCBjb29yZGluYXRlIG9mIHRoZSBkcm9wXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSB5IC0geSBjb29yZGluYXRlIG9mIHRoZSBkcm9wXHJcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIC0gQSBsaXN0IG9mIGZpbGUgcGF0aHMuXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIE9uRmlsZURyb3AgbGlzdGVucyB0byBkcmFnIGFuZCBkcm9wIGV2ZW50cyBhbmQgY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGggdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBkcm9wIGFuZCBhbiBhcnJheSBvZiBwYXRoIHN0cmluZ3MuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICogQHBhcmFtIHtPbkZpbGVEcm9wQ2FsbGJhY2t9IGNhbGxiYWNrIC0gQ2FsbGJhY2sgZm9yIE9uRmlsZURyb3AgcmV0dXJucyBhIHNsaWNlIG9mIGZpbGUgcGF0aCBzdHJpbmdzIHdoZW4gYSBkcm9wIGlzIGZpbmlzaGVkLlxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VEcm9wVGFyZ2V0PXRydWVdIC0gT25seSBjYWxsIHRoZSBjYWxsYmFjayB3aGVuIHRoZSBkcm9wIGZpbmlzaGVkIG9uIGFuIGVsZW1lbnQgdGhhdCBoYXMgdGhlIGRyb3AgdGFyZ2V0IHN0eWxlLiAoLS13YWlscy1kcm9wLXRhcmdldClcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBPbkZpbGVEcm9wKGNhbGxiYWNrLCB1c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiRHJhZ0FuZERyb3BDYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvblwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZsYWdzLnJlZ2lzdGVyZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmbGFncy5yZWdpc3RlcmVkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB1RFRQVCA9IHR5cGVvZiB1c2VEcm9wVGFyZ2V0O1xyXG4gICAgZmxhZ3MudXNlRHJvcFRhcmdldCA9IHVEVFBUID09PSBcInVuZGVmaW5lZFwiIHx8IHVEVFBUICE9PSBcImJvb2xlYW5cIiA/IGZsYWdzLmRlZmF1bHRVc2VEcm9wVGFyZ2V0IDogdXNlRHJvcFRhcmdldDtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIG9uRHJhZ092ZXIpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIG9uRHJhZ0xlYXZlKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgb25Ecm9wKTtcclxuXHJcbiAgICBsZXQgY2IgPSBjYWxsYmFjaztcclxuICAgIGlmIChmbGFncy51c2VEcm9wVGFyZ2V0KSB7XHJcbiAgICAgICAgY2IgPSBmdW5jdGlvbiAoeCwgeSwgcGF0aHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoeCwgeSlcclxuICAgICAgICAgICAgLy8gaWYgdGhlIGVsZW1lbnQgaXMgbnVsbCBvciBlbGVtZW50IGlzIG5vdCBjaGlsZCBvZiBkcm9wIHRhcmdldCBlbGVtZW50LCByZXR1cm4gbnVsbFxyXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQgfHwgIWNoZWNrU3R5bGVEcm9wVGFyZ2V0KGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxsYmFjayh4LCB5LCBwYXRocyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEV2ZW50c09uKFwid2FpbHM6ZmlsZS1kcm9wXCIsIGNiKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE9uRmlsZURyb3BPZmYgcmVtb3ZlcyB0aGUgZHJhZyBhbmQgZHJvcCBsaXN0ZW5lcnMgYW5kIGhhbmRsZXJzLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIE9uRmlsZURyb3BPZmYoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJhZ292ZXInLCBvbkRyYWdPdmVyKTtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdkcmFnbGVhdmUnLCBvbkRyYWdMZWF2ZSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZHJvcCcsIG9uRHJvcCk7XHJcbiAgICBFdmVudHNPZmYoXCJ3YWlsczpmaWxlLWRyb3BcIik7XHJcbiAgICBmbGFncy5yZWdpc3RlcmVkID0gZmFsc2U7XHJcbn1cclxuIiwgIi8qXHJcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogYXV0bzsgKGRlZmF1bHQpIHdpbGwgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgaWYgY29udGVudEVkaXRhYmxlIGlzIHRydWUgT1IgdGV4dCBoYXMgYmVlbiBzZWxlY3RlZCBPUiBlbGVtZW50IGlzIGlucHV0IG9yIHRleHRhcmVhXHJcbi0tZGVmYXVsdC1jb250ZXh0bWVudTogc2hvdzsgd2lsbCBhbHdheXMgc2hvdyB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuLS1kZWZhdWx0LWNvbnRleHRtZW51OiBoaWRlOyB3aWxsIGFsd2F5cyBoaWRlIHRoZSBkZWZhdWx0IGNvbnRleHQgbWVudVxyXG5cclxuVGhpcyBydWxlIGlzIGluaGVyaXRlZCBsaWtlIG5vcm1hbCBDU1MgcnVsZXMsIHNvIG5lc3Rpbmcgd29ya3MgYXMgZXhwZWN0ZWRcclxuKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEZWZhdWx0Q29udGV4dE1lbnUoZXZlbnQpIHtcclxuICAgIC8vIFByb2Nlc3MgZGVmYXVsdCBjb250ZXh0IG1lbnVcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XHJcbiAgICBjb25zdCBkZWZhdWx0Q29udGV4dE1lbnVBY3Rpb24gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLWRlZmF1bHQtY29udGV4dG1lbnVcIikudHJpbSgpO1xyXG4gICAgc3dpdGNoIChkZWZhdWx0Q29udGV4dE1lbnVBY3Rpb24pIHtcclxuICAgICAgICBjYXNlIFwic2hvd1wiOlxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY2FzZSBcImhpZGVcIjpcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGNvbnRlbnRFZGl0YWJsZSBpcyB0cnVlXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRleHQgaGFzIGJlZW4gc2VsZWN0ZWQgYW5kIGFjdGlvbiBpcyBvbiB0aGUgc2VsZWN0ZWQgZWxlbWVudHNcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTZWxlY3Rpb24gPSAoc2VsZWN0aW9uLnRvU3RyaW5nKCkubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgaWYgKGhhc1NlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb24ucmFuZ2VDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdChpKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0cyA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmVjdHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHJlY3QubGVmdCwgcmVjdC50b3ApID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGFnbmFtZSBpcyBpbnB1dCBvciB0ZXh0YXJlYVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSBcIklOUFVUXCIgfHwgZWxlbWVudC50YWdOYW1lID09PSBcIlRFWFRBUkVBXCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChoYXNTZWxlY3Rpb24gfHwgKCFlbGVtZW50LnJlYWRPbmx5ICYmICFlbGVtZW50LmRpc2FibGVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGlkZSBkZWZhdWx0IGNvbnRleHQgbWVudVxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG59XHJcbiIsICIvKlxyXG4gX1x0ICAgX19cdCAgXyBfX1xyXG58IHxcdCAvIC9fX18gXyhfKSAvX19fX1xyXG58IHwgL3wgLyAvIF9fIGAvIC8gLyBfX18vXHJcbnwgfC8gfC8gLyAvXy8gLyAvIChfXyAgKVxyXG58X18vfF9fL1xcX18sXy9fL18vX19fXy9cclxuVGhlIGVsZWN0cm9uIGFsdGVybmF0aXZlIGZvciBHb1xyXG4oYykgTGVhIEFudGhvbnkgMjAxOS1wcmVzZW50XHJcbiovXHJcbi8qIGpzaGludCBlc3ZlcnNpb246IDkgKi9cclxuaW1wb3J0ICogYXMgTG9nIGZyb20gJy4vbG9nJztcclxuaW1wb3J0IHtcclxuICBldmVudExpc3RlbmVycyxcclxuICBFdmVudHNFbWl0LFxyXG4gIEV2ZW50c05vdGlmeSxcclxuICBFdmVudHNPZmYsXHJcbiAgRXZlbnRzT2ZmQWxsLFxyXG4gIEV2ZW50c09uLFxyXG4gIEV2ZW50c09uY2UsXHJcbiAgRXZlbnRzT25NdWx0aXBsZSxcclxufSBmcm9tIFwiLi9ldmVudHNcIjtcclxuaW1wb3J0IHsgQ2FsbCwgQ2FsbGJhY2ssIGNhbGxiYWNrcyB9IGZyb20gJy4vY2FsbHMnO1xyXG5pbXBvcnQgeyBTZXRCaW5kaW5ncyB9IGZyb20gXCIuL2JpbmRpbmdzXCI7XHJcbmltcG9ydCAqIGFzIFdpbmRvdyBmcm9tIFwiLi93aW5kb3dcIjtcclxuaW1wb3J0ICogYXMgU2NyZWVuIGZyb20gXCIuL3NjcmVlblwiO1xyXG5pbXBvcnQgKiBhcyBCcm93c2VyIGZyb20gXCIuL2Jyb3dzZXJcIjtcclxuaW1wb3J0ICogYXMgQ2xpcGJvYXJkIGZyb20gXCIuL2NsaXBib2FyZFwiO1xyXG5pbXBvcnQgKiBhcyBEcmFnQW5kRHJvcCBmcm9tIFwiLi9kcmFnYW5kZHJvcFwiO1xyXG5pbXBvcnQgKiBhcyBDb250ZXh0TWVudSBmcm9tIFwiLi9jb250ZXh0bWVudVwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFF1aXQoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1EnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNob3coKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ1MnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEhpZGUoKSB7XHJcbiAgICB3aW5kb3cuV2FpbHNJbnZva2UoJ0gnKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIEVudmlyb25tZW50KCkge1xyXG4gICAgcmV0dXJuIENhbGwoXCI6d2FpbHM6RW52aXJvbm1lbnRcIik7XHJcbn1cclxuXHJcbi8vIFRoZSBKUyBydW50aW1lXHJcbndpbmRvdy5ydW50aW1lID0ge1xyXG4gICAgLi4uTG9nLFxyXG4gICAgLi4uV2luZG93LFxyXG4gICAgLi4uQnJvd3NlcixcclxuICAgIC4uLlNjcmVlbixcclxuICAgIC4uLkNsaXBib2FyZCxcclxuICAgIC4uLkRyYWdBbmREcm9wLFxyXG4gICAgRXZlbnRzT24sXHJcbiAgICBFdmVudHNPbmNlLFxyXG4gICAgRXZlbnRzT25NdWx0aXBsZSxcclxuICAgIEV2ZW50c0VtaXQsXHJcbiAgICBFdmVudHNPZmYsXHJcbiAgICBFdmVudHNPZmZBbGwsXHJcbiAgICBFbnZpcm9ubWVudCxcclxuICAgIFNob3csXHJcbiAgICBIaWRlLFxyXG4gICAgUXVpdFxyXG59O1xyXG5cclxuLy8gSW50ZXJuYWwgd2FpbHMgZW5kcG9pbnRzXHJcbndpbmRvdy53YWlscyA9IHtcclxuICAgIENhbGxiYWNrLFxyXG4gICAgRXZlbnRzTm90aWZ5LFxyXG4gICAgU2V0QmluZGluZ3MsXHJcbiAgICBldmVudExpc3RlbmVycyxcclxuICAgIGNhbGxiYWNrcyxcclxuICAgIGZsYWdzOiB7XHJcbiAgICAgICAgZGlzYWJsZVNjcm9sbGJhckRyYWc6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVEZWZhdWx0Q29udGV4dE1lbnU6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZVJlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgZGVmYXVsdEN1cnNvcjogbnVsbCxcclxuICAgICAgICBib3JkZXJUaGlja25lc3M6IDYsXHJcbiAgICAgICAgc2hvdWxkRHJhZzogZmFsc2UsXHJcbiAgICAgICAgZGVmZXJEcmFnVG9Nb3VzZU1vdmU6IHRydWUsXHJcbiAgICAgICAgY3NzRHJhZ1Byb3BlcnR5OiBcIi0td2FpbHMtZHJhZ2dhYmxlXCIsXHJcbiAgICAgICAgY3NzRHJhZ1ZhbHVlOiBcImRyYWdcIixcclxuICAgICAgICBjc3NEcm9wUHJvcGVydHk6IFwiLS13YWlscy1kcm9wLXRhcmdldFwiLFxyXG4gICAgICAgIGNzc0Ryb3BWYWx1ZTogXCJkcm9wXCIsXHJcbiAgICAgICAgZW5hYmxlV2FpbHNEcmFnQW5kRHJvcDogZmFsc2UsXHJcbiAgICB9XHJcbn07XHJcblxyXG4vLyBTZXQgdGhlIGJpbmRpbmdzXHJcbmlmICh3aW5kb3cud2FpbHNiaW5kaW5ncykge1xyXG4gICAgd2luZG93LndhaWxzLlNldEJpbmRpbmdzKHdpbmRvdy53YWlsc2JpbmRpbmdzKTtcclxuICAgIGRlbGV0ZSB3aW5kb3cud2FpbHMuU2V0QmluZGluZ3M7XHJcbn1cclxuXHJcbi8vIChib29sKSBUaGlzIGlzIGV2YWx1YXRlZCBhdCBidWlsZCB0aW1lIGluIHBhY2thZ2UuanNvblxyXG5pZiAoIURFQlVHKSB7XHJcbiAgICBkZWxldGUgd2luZG93LndhaWxzYmluZGluZ3M7XHJcbn1cclxuXHJcbmxldCBkcmFnVGVzdCA9IGZ1bmN0aW9uKGUpIHtcclxuICAgIHZhciB2YWwgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLnRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZSh3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1Byb3BlcnR5KTtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgICB2YWwgPSB2YWwudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWwgIT09IHdpbmRvdy53YWlscy5mbGFncy5jc3NEcmFnVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUuYnV0dG9ucyAhPT0gMSkge1xyXG4gICAgICAgIC8vIERvIG5vdCBzdGFydCBkcmFnZ2luZyBpZiBub3QgdGhlIHByaW1hcnkgYnV0dG9uIGhhcyBiZWVuIGNsaWNrZWQuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlLmRldGFpbCAhPT0gMSkge1xyXG4gICAgICAgIC8vIERvIG5vdCBzdGFydCBkcmFnZ2luZyBpZiBtb3JlIHRoYW4gb25jZSBoYXMgYmVlbiBjbGlja2VkLCBlLmcuIHdoZW4gZG91YmxlIGNsaWNraW5nXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG59O1xyXG5cclxud2luZG93LndhaWxzLnNldENTU0RyYWdQcm9wZXJ0aWVzID0gZnVuY3Rpb24ocHJvcGVydHksIHZhbHVlKSB7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1Byb3BlcnR5ID0gcHJvcGVydHk7XHJcbiAgICB3aW5kb3cud2FpbHMuZmxhZ3MuY3NzRHJhZ1ZhbHVlID0gdmFsdWU7XHJcbn1cclxuXHJcbndpbmRvdy53YWlscy5zZXRDU1NEcm9wUHJvcGVydGllcyA9IGZ1bmN0aW9uKHByb3BlcnR5LCB2YWx1ZSkge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BQcm9wZXJ0eSA9IHByb3BlcnR5O1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLmNzc0Ryb3BWYWx1ZSA9IHZhbHVlO1xyXG59XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcclxuICAgIC8vIENoZWNrIGZvciByZXNpemluZ1xyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5yZXNpemVFZGdlKSB7XHJcbiAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwicmVzaXplOlwiICsgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UpO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRyYWdUZXN0KGUpKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlU2Nyb2xsYmFyRHJhZykge1xyXG4gICAgICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgY2xpY2tzIG9uIHRoZSBzY3JvbGwgYmFyXHJcbiAgICAgICAgICAgIGlmIChlLm9mZnNldFggPiBlLnRhcmdldC5jbGllbnRXaWR0aCB8fCBlLm9mZnNldFkgPiBlLnRhcmdldC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLmRlZmVyRHJhZ1RvTW91c2VNb3ZlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy53YWlscy5mbGFncy5zaG91bGREcmFnID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgKCkgPT4ge1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcgPSBmYWxzZTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBzZXRSZXNpemUoY3Vyc29yKSB7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yID0gY3Vyc29yIHx8IHdpbmRvdy53YWlscy5mbGFncy5kZWZhdWx0Q3Vyc29yO1xyXG4gICAgd2luZG93LndhaWxzLmZsYWdzLnJlc2l6ZUVkZ2UgPSBjdXJzb3I7XHJcbn1cclxuXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBmdW5jdGlvbihlKSB7XHJcbiAgICBpZiAod2luZG93LndhaWxzLmZsYWdzLnNob3VsZERyYWcpIHtcclxuICAgICAgICB3aW5kb3cud2FpbHMuZmxhZ3Muc2hvdWxkRHJhZyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBtb3VzZVByZXNzZWQgPSBlLmJ1dHRvbnMgIT09IHVuZGVmaW5lZCA/IGUuYnV0dG9ucyA6IGUud2hpY2g7XHJcbiAgICAgICAgaWYgKG1vdXNlUHJlc3NlZCA+IDApIHtcclxuICAgICAgICAgICAgd2luZG93LldhaWxzSW52b2tlKFwiZHJhZ1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghd2luZG93LndhaWxzLmZsYWdzLmVuYWJsZVJlc2l6ZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh3aW5kb3cud2FpbHMuZmxhZ3MuZGVmYXVsdEN1cnNvciA9PSBudWxsKSB7XHJcbiAgICAgICAgd2luZG93LndhaWxzLmZsYWdzLmRlZmF1bHRDdXJzb3IgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuY3Vyc29yO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5vdXRlcldpZHRoIC0gZS5jbGllbnRYIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcyAmJiB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmN1cnNvciA9IFwic2UtcmVzaXplXCI7XHJcbiAgICB9XHJcbiAgICBsZXQgcmlnaHRCb3JkZXIgPSB3aW5kb3cub3V0ZXJXaWR0aCAtIGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcbiAgICBsZXQgbGVmdEJvcmRlciA9IGUuY2xpZW50WCA8IHdpbmRvdy53YWlscy5mbGFncy5ib3JkZXJUaGlja25lc3M7XHJcbiAgICBsZXQgdG9wQm9yZGVyID0gZS5jbGllbnRZIDwgd2luZG93LndhaWxzLmZsYWdzLmJvcmRlclRoaWNrbmVzcztcclxuICAgIGxldCBib3R0b21Cb3JkZXIgPSB3aW5kb3cub3V0ZXJIZWlnaHQgLSBlLmNsaWVudFkgPCB3aW5kb3cud2FpbHMuZmxhZ3MuYm9yZGVyVGhpY2tuZXNzO1xyXG5cclxuICAgIC8vIElmIHdlIGFyZW4ndCBvbiBhbiBlZGdlLCBidXQgd2VyZSwgcmVzZXQgdGhlIGN1cnNvciB0byBkZWZhdWx0XHJcbiAgICBpZiAoIWxlZnRCb3JkZXIgJiYgIXJpZ2h0Qm9yZGVyICYmICF0b3BCb3JkZXIgJiYgIWJvdHRvbUJvcmRlciAmJiB3aW5kb3cud2FpbHMuZmxhZ3MucmVzaXplRWRnZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgc2V0UmVzaXplKCk7XHJcbiAgICB9IGVsc2UgaWYgKHJpZ2h0Qm9yZGVyICYmIGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwic2UtcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAobGVmdEJvcmRlciAmJiBib3R0b21Cb3JkZXIpIHNldFJlc2l6ZShcInN3LXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIgJiYgdG9wQm9yZGVyKSBzZXRSZXNpemUoXCJudy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmICh0b3BCb3JkZXIgJiYgcmlnaHRCb3JkZXIpIHNldFJlc2l6ZShcIm5lLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGxlZnRCb3JkZXIpIHNldFJlc2l6ZShcInctcmVzaXplXCIpO1xyXG4gICAgZWxzZSBpZiAodG9wQm9yZGVyKSBzZXRSZXNpemUoXCJuLXJlc2l6ZVwiKTtcclxuICAgIGVsc2UgaWYgKGJvdHRvbUJvcmRlcikgc2V0UmVzaXplKFwicy1yZXNpemVcIik7XHJcbiAgICBlbHNlIGlmIChyaWdodEJvcmRlcikgc2V0UmVzaXplKFwiZS1yZXNpemVcIik7XHJcblxyXG59KTtcclxuXHJcbi8vIFNldHVwIGNvbnRleHQgbWVudSBob29rXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIGZ1bmN0aW9uKGUpIHtcclxuICAgIC8vIGFsd2F5cyBzaG93IHRoZSBjb250ZXh0bWVudSBpbiBkZWJ1ZyAmIGRldlxyXG4gICAgaWYgKERFQlVHKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHdpbmRvdy53YWlscy5mbGFncy5kaXNhYmxlRGVmYXVsdENvbnRleHRNZW51KSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBDb250ZXh0TWVudS5wcm9jZXNzRGVmYXVsdENvbnRleHRNZW51KGUpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbndpbmRvdy5XYWlsc0ludm9rZShcInJ1bnRpbWU6cmVhZHlcIik7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsV0FBUyxlQUFlLE9BQU8sU0FBUztBQUl2QyxXQUFPLFlBQVksTUFBTSxRQUFRLE9BQU87QUFBQSxFQUN6QztBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxTQUFTLFNBQVM7QUFDakMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsUUFBUSxTQUFTO0FBQ2hDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxXQUFXLFNBQVM7QUFDbkMsbUJBQWUsS0FBSyxPQUFPO0FBQUEsRUFDNUI7QUFRTyxXQUFTLFNBQVMsU0FBUztBQUNqQyxtQkFBZSxLQUFLLE9BQU87QUFBQSxFQUM1QjtBQVFPLFdBQVMsU0FBUyxTQUFTO0FBQ2pDLG1CQUFlLEtBQUssT0FBTztBQUFBLEVBQzVCO0FBUU8sV0FBUyxZQUFZLFVBQVU7QUFDckMsbUJBQWUsS0FBSyxRQUFRO0FBQUEsRUFDN0I7QUFHTyxNQUFNLFdBQVc7QUFBQSxJQUN2QixPQUFPO0FBQUEsSUFDUCxPQUFPO0FBQUEsSUFDUCxNQUFNO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxPQUFPO0FBQUEsRUFDUjs7O0FDOUZBLE1BQU0sV0FBTixNQUFlO0FBQUEsSUFRWCxZQUFZLFdBQVcsVUFBVSxjQUFjO0FBQzNDLFdBQUssWUFBWTtBQUVqQixXQUFLLGVBQWUsZ0JBQWdCO0FBR3BDLFdBQUssV0FBVyxDQUFDLFNBQVM7QUFDdEIsaUJBQVMsTUFBTSxNQUFNLElBQUk7QUFFekIsWUFBSSxLQUFLLGlCQUFpQixJQUFJO0FBQzFCLGlCQUFPO0FBQUEsUUFDWDtBQUVBLGFBQUssZ0JBQWdCO0FBQ3JCLGVBQU8sS0FBSyxpQkFBaUI7QUFBQSxNQUNqQztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBRU8sTUFBTSxpQkFBaUIsQ0FBQztBQVd4QixXQUFTLGlCQUFpQixXQUFXLFVBQVUsY0FBYztBQUNoRSxtQkFBZSxhQUFhLGVBQWUsY0FBYyxDQUFDO0FBQzFELFVBQU0sZUFBZSxJQUFJLFNBQVMsV0FBVyxVQUFVLFlBQVk7QUFDbkUsbUJBQWUsV0FBVyxLQUFLLFlBQVk7QUFDM0MsV0FBTyxNQUFNLFlBQVksWUFBWTtBQUFBLEVBQ3pDO0FBVU8sV0FBUyxTQUFTLFdBQVcsVUFBVTtBQUMxQyxXQUFPLGlCQUFpQixXQUFXLFVBQVUsRUFBRTtBQUFBLEVBQ25EO0FBVU8sV0FBUyxXQUFXLFdBQVcsVUFBVTtBQUM1QyxXQUFPLGlCQUFpQixXQUFXLFVBQVUsQ0FBQztBQUFBLEVBQ2xEO0FBRUEsV0FBUyxnQkFBZ0IsV0FBVztBQUdoQyxRQUFJLFlBQVksVUFBVTtBQUcxQixVQUFNLHVCQUF1QixlQUFlLFlBQVksTUFBTSxLQUFLLENBQUM7QUFHcEUsUUFBSSxxQkFBcUIsUUFBUTtBQUc3QixlQUFTLFFBQVEscUJBQXFCLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHO0FBR3RFLGNBQU0sV0FBVyxxQkFBcUI7QUFFdEMsWUFBSSxPQUFPLFVBQVU7QUFHckIsY0FBTSxVQUFVLFNBQVMsU0FBUyxJQUFJO0FBQ3RDLFlBQUksU0FBUztBQUVULCtCQUFxQixPQUFPLE9BQU8sQ0FBQztBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUdBLFVBQUkscUJBQXFCLFdBQVcsR0FBRztBQUNuQyx1QkFBZSxTQUFTO0FBQUEsTUFDNUIsT0FBTztBQUNILHVCQUFlLGFBQWE7QUFBQSxNQUNoQztBQUFBLElBQ0o7QUFBQSxFQUNKO0FBU08sV0FBUyxhQUFhLGVBQWU7QUFFeEMsUUFBSTtBQUNKLFFBQUk7QUFDQSxnQkFBVSxLQUFLLE1BQU0sYUFBYTtBQUFBLElBQ3RDLFNBQVMsR0FBUDtBQUNFLFlBQU0sUUFBUSxvQ0FBb0M7QUFDbEQsWUFBTSxJQUFJLE1BQU0sS0FBSztBQUFBLElBQ3pCO0FBQ0Esb0JBQWdCLE9BQU87QUFBQSxFQUMzQjtBQVFPLFdBQVMsV0FBVyxXQUFXO0FBRWxDLFVBQU0sVUFBVTtBQUFBLE1BQ1osTUFBTTtBQUFBLE1BQ04sTUFBTSxDQUFDLEVBQUUsTUFBTSxNQUFNLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFBQSxJQUMzQztBQUdBLG9CQUFnQixPQUFPO0FBR3ZCLFdBQU8sWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLENBQUM7QUFBQSxFQUNyRDtBQUVBLFdBQVMsZUFBZSxXQUFXO0FBRS9CLFdBQU8sZUFBZTtBQUd0QixXQUFPLFlBQVksT0FBTyxTQUFTO0FBQUEsRUFDdkM7QUFTTyxXQUFTLFVBQVUsY0FBYyxzQkFBc0I7QUFDMUQsbUJBQWUsU0FBUztBQUV4QixRQUFJLHFCQUFxQixTQUFTLEdBQUc7QUFDakMsMkJBQXFCLFFBQVEsQ0FBQUEsZUFBYTtBQUN0Qyx1QkFBZUEsVUFBUztBQUFBLE1BQzVCLENBQUM7QUFBQSxJQUNMO0FBQUEsRUFDSjtBQUtRLFdBQVMsZUFBZTtBQUM1QixVQUFNLGFBQWEsT0FBTyxLQUFLLGNBQWM7QUFDN0MsZUFBVyxRQUFRLGVBQWE7QUFDNUIscUJBQWUsU0FBUztBQUFBLElBQzVCLENBQUM7QUFBQSxFQUNMO0FBT0MsV0FBUyxZQUFZLFVBQVU7QUFDNUIsVUFBTSxZQUFZLFNBQVM7QUFDM0IsUUFBSSxlQUFlLGVBQWU7QUFBVztBQUc3QyxtQkFBZSxhQUFhLGVBQWUsV0FBVyxPQUFPLE9BQUssTUFBTSxRQUFRO0FBR2hGLFFBQUksZUFBZSxXQUFXLFdBQVcsR0FBRztBQUN4QyxxQkFBZSxTQUFTO0FBQUEsSUFDNUI7QUFBQSxFQUNKOzs7QUMxTU8sTUFBTSxZQUFZLENBQUM7QUFPMUIsV0FBUyxlQUFlO0FBQ3ZCLFFBQUksUUFBUSxJQUFJLFlBQVksQ0FBQztBQUM3QixXQUFPLE9BQU8sT0FBTyxnQkFBZ0IsS0FBSyxFQUFFO0FBQUEsRUFDN0M7QUFRQSxXQUFTLGNBQWM7QUFDdEIsV0FBTyxLQUFLLE9BQU8sSUFBSTtBQUFBLEVBQ3hCO0FBR0EsTUFBSTtBQUNKLE1BQUksT0FBTyxRQUFRO0FBQ2xCLGlCQUFhO0FBQUEsRUFDZCxPQUFPO0FBQ04saUJBQWE7QUFBQSxFQUNkO0FBaUJPLFdBQVMsS0FBSyxNQUFNLE1BQU0sU0FBUztBQUd6QyxRQUFJLFdBQVcsTUFBTTtBQUNwQixnQkFBVTtBQUFBLElBQ1g7QUFHQSxXQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUc3QyxVQUFJO0FBQ0osU0FBRztBQUNGLHFCQUFhLE9BQU8sTUFBTSxXQUFXO0FBQUEsTUFDdEMsU0FBUyxVQUFVO0FBRW5CLFVBQUk7QUFFSixVQUFJLFVBQVUsR0FBRztBQUNoQix3QkFBZ0IsV0FBVyxXQUFZO0FBQ3RDLGlCQUFPLE1BQU0sYUFBYSxPQUFPLDZCQUE2QixVQUFVLENBQUM7QUFBQSxRQUMxRSxHQUFHLE9BQU87QUFBQSxNQUNYO0FBR0EsZ0JBQVUsY0FBYztBQUFBLFFBQ3ZCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNEO0FBRUEsVUFBSTtBQUNILGNBQU0sVUFBVTtBQUFBLFVBQ2Y7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFFBQ0Q7QUFHUyxlQUFPLFlBQVksTUFBTSxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQUEsTUFDcEQsU0FBUyxHQUFQO0FBRUUsZ0JBQVEsTUFBTSxDQUFDO0FBQUEsTUFDbkI7QUFBQSxJQUNKLENBQUM7QUFBQSxFQUNMO0FBRUEsU0FBTyxpQkFBaUIsQ0FBQyxJQUFJLE1BQU0sWUFBWTtBQUczQyxRQUFJLFdBQVcsTUFBTTtBQUNqQixnQkFBVTtBQUFBLElBQ2Q7QUFHQSxXQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUcxQyxVQUFJO0FBQ0osU0FBRztBQUNDLHFCQUFhLEtBQUssTUFBTSxXQUFXO0FBQUEsTUFDdkMsU0FBUyxVQUFVO0FBRW5CLFVBQUk7QUFFSixVQUFJLFVBQVUsR0FBRztBQUNiLHdCQUFnQixXQUFXLFdBQVk7QUFDbkMsaUJBQU8sTUFBTSxvQkFBb0IsS0FBSyw2QkFBNkIsVUFBVSxDQUFDO0FBQUEsUUFDbEYsR0FBRyxPQUFPO0FBQUEsTUFDZDtBQUdBLGdCQUFVLGNBQWM7QUFBQSxRQUNwQjtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUVBLFVBQUk7QUFDQSxjQUFNLFVBQVU7QUFBQSxVQUN4QjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRDtBQUdTLGVBQU8sWUFBWSxNQUFNLEtBQUssVUFBVSxPQUFPLENBQUM7QUFBQSxNQUNwRCxTQUFTLEdBQVA7QUFFRSxnQkFBUSxNQUFNLENBQUM7QUFBQSxNQUNuQjtBQUFBLElBQ0osQ0FBQztBQUFBLEVBQ0w7QUFVTyxXQUFTLFNBQVMsaUJBQWlCO0FBRXpDLFFBQUk7QUFDSixRQUFJO0FBQ0gsZ0JBQVUsS0FBSyxNQUFNLGVBQWU7QUFBQSxJQUNyQyxTQUFTLEdBQVA7QUFDRCxZQUFNLFFBQVEsb0NBQW9DLEVBQUUscUJBQXFCO0FBQ3pFLGNBQVEsU0FBUyxLQUFLO0FBQ3RCLFlBQU0sSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUN0QjtBQUNBLFFBQUksYUFBYSxRQUFRO0FBQ3pCLFFBQUksZUFBZSxVQUFVO0FBQzdCLFFBQUksQ0FBQyxjQUFjO0FBQ2xCLFlBQU0sUUFBUSxhQUFhO0FBQzNCLGNBQVEsTUFBTSxLQUFLO0FBQ25CLFlBQU0sSUFBSSxNQUFNLEtBQUs7QUFBQSxJQUN0QjtBQUNBLGlCQUFhLGFBQWEsYUFBYTtBQUV2QyxXQUFPLFVBQVU7QUFFakIsUUFBSSxRQUFRLE9BQU87QUFDbEIsbUJBQWEsT0FBTyxRQUFRLEtBQUs7QUFBQSxJQUNsQyxPQUFPO0FBQ04sbUJBQWEsUUFBUSxRQUFRLE1BQU07QUFBQSxJQUNwQztBQUFBLEVBQ0Q7OztBQzFLQSxTQUFPLEtBQUssQ0FBQztBQUVOLFdBQVMsWUFBWSxhQUFhO0FBQ3hDLFFBQUk7QUFDSCxvQkFBYyxLQUFLLE1BQU0sV0FBVztBQUFBLElBQ3JDLFNBQVMsR0FBUDtBQUNELGNBQVEsTUFBTSxDQUFDO0FBQUEsSUFDaEI7QUFHQSxXQUFPLEtBQUssT0FBTyxNQUFNLENBQUM7QUFHMUIsV0FBTyxLQUFLLFdBQVcsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO0FBR2pELGFBQU8sR0FBRyxlQUFlLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQztBQUdwRCxhQUFPLEtBQUssWUFBWSxZQUFZLEVBQUUsUUFBUSxDQUFDLGVBQWU7QUFHN0QsZUFBTyxHQUFHLGFBQWEsY0FBYyxPQUFPLEdBQUcsYUFBYSxlQUFlLENBQUM7QUFFNUUsZUFBTyxLQUFLLFlBQVksYUFBYSxXQUFXLEVBQUUsUUFBUSxDQUFDLGVBQWU7QUFFekUsaUJBQU8sR0FBRyxhQUFhLFlBQVksY0FBYyxXQUFZO0FBRzVELGdCQUFJLFVBQVU7QUFHZCxxQkFBUyxVQUFVO0FBQ2xCLG9CQUFNLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxTQUFTO0FBQ3BDLHFCQUFPLEtBQUssQ0FBQyxhQUFhLFlBQVksVUFBVSxFQUFFLEtBQUssR0FBRyxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQzNFO0FBR0Esb0JBQVEsYUFBYSxTQUFVLFlBQVk7QUFDMUMsd0JBQVU7QUFBQSxZQUNYO0FBR0Esb0JBQVEsYUFBYSxXQUFZO0FBQ2hDLHFCQUFPO0FBQUEsWUFDUjtBQUVBLG1CQUFPO0FBQUEsVUFDUixFQUFFO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDRjs7O0FDbEVBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZU8sV0FBUyxlQUFlO0FBQzNCLFdBQU8sU0FBUyxPQUFPO0FBQUEsRUFDM0I7QUFFTyxXQUFTLGtCQUFrQjtBQUM5QixXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCO0FBRU8sV0FBUyw4QkFBOEI7QUFDMUMsV0FBTyxZQUFZLE9BQU87QUFBQSxFQUM5QjtBQUVPLFdBQVMsc0JBQXNCO0FBQ2xDLFdBQU8sWUFBWSxNQUFNO0FBQUEsRUFDN0I7QUFFTyxXQUFTLHFCQUFxQjtBQUNqQyxXQUFPLFlBQVksTUFBTTtBQUFBLEVBQzdCO0FBT08sV0FBUyxlQUFlO0FBQzNCLFdBQU8sWUFBWSxJQUFJO0FBQUEsRUFDM0I7QUFRTyxXQUFTLGVBQWUsT0FBTztBQUNsQyxXQUFPLFlBQVksT0FBTyxLQUFLO0FBQUEsRUFDbkM7QUFPTyxXQUFTLG1CQUFtQjtBQUMvQixXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCO0FBT08sV0FBUyxxQkFBcUI7QUFDakMsV0FBTyxZQUFZLElBQUk7QUFBQSxFQUMzQjtBQVFPLFdBQVMscUJBQXFCO0FBQ2pDLFdBQU8sS0FBSywyQkFBMkI7QUFBQSxFQUMzQztBQVNPLFdBQVMsY0FBYyxPQUFPLFFBQVE7QUFDekMsV0FBTyxZQUFZLFFBQVEsUUFBUSxNQUFNLE1BQU07QUFBQSxFQUNuRDtBQVNPLFdBQVMsZ0JBQWdCO0FBQzVCLFdBQU8sS0FBSyxzQkFBc0I7QUFBQSxFQUN0QztBQVNPLFdBQVMsaUJBQWlCLE9BQU8sUUFBUTtBQUM1QyxXQUFPLFlBQVksUUFBUSxRQUFRLE1BQU0sTUFBTTtBQUFBLEVBQ25EO0FBU08sV0FBUyxpQkFBaUIsT0FBTyxRQUFRO0FBQzVDLFdBQU8sWUFBWSxRQUFRLFFBQVEsTUFBTSxNQUFNO0FBQUEsRUFDbkQ7QUFTTyxXQUFTLHFCQUFxQixHQUFHO0FBRXBDLFdBQU8sWUFBWSxXQUFXLElBQUksTUFBTSxJQUFJO0FBQUEsRUFDaEQ7QUFZTyxXQUFTLGtCQUFrQixHQUFHLEdBQUc7QUFDcEMsV0FBTyxZQUFZLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFBQSxFQUMxQztBQVFPLFdBQVMsb0JBQW9CO0FBQ2hDLFdBQU8sS0FBSyxxQkFBcUI7QUFBQSxFQUNyQztBQU9PLFdBQVMsYUFBYTtBQUN6QixXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCO0FBT08sV0FBUyxhQUFhO0FBQ3pCLFdBQU8sWUFBWSxJQUFJO0FBQUEsRUFDM0I7QUFPTyxXQUFTLGlCQUFpQjtBQUM3QixXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCO0FBT08sV0FBUyx1QkFBdUI7QUFDbkMsV0FBTyxZQUFZLElBQUk7QUFBQSxFQUMzQjtBQU9PLFdBQVMsbUJBQW1CO0FBQy9CLFdBQU8sWUFBWSxJQUFJO0FBQUEsRUFDM0I7QUFRTyxXQUFTLG9CQUFvQjtBQUNoQyxXQUFPLEtBQUssMEJBQTBCO0FBQUEsRUFDMUM7QUFPTyxXQUFTLGlCQUFpQjtBQUM3QixXQUFPLFlBQVksSUFBSTtBQUFBLEVBQzNCO0FBT08sV0FBUyxtQkFBbUI7QUFDL0IsV0FBTyxZQUFZLElBQUk7QUFBQSxFQUMzQjtBQVFPLFdBQVMsb0JBQW9CO0FBQ2hDLFdBQU8sS0FBSywwQkFBMEI7QUFBQSxFQUMxQztBQVFPLFdBQVMsaUJBQWlCO0FBQzdCLFdBQU8sS0FBSyx1QkFBdUI7QUFBQSxFQUN2QztBQVdPLFdBQVMsMEJBQTBCLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDbEQsUUFBSSxPQUFPLEtBQUssVUFBVSxFQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFHLENBQUM7QUFDeEUsV0FBTyxZQUFZLFFBQVEsSUFBSTtBQUFBLEVBQ25DOzs7QUMzUUE7QUFBQTtBQUFBO0FBQUE7QUFzQk8sV0FBUyxlQUFlO0FBQzNCLFdBQU8sS0FBSyxxQkFBcUI7QUFBQSxFQUNyQzs7O0FDeEJBO0FBQUE7QUFBQTtBQUFBO0FBS08sV0FBUyxlQUFlLEtBQUs7QUFDbEMsV0FBTyxZQUFZLFFBQVEsR0FBRztBQUFBLEVBQ2hDOzs7QUNQQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBb0JPLFdBQVMsaUJBQWlCLE1BQU07QUFDbkMsV0FBTyxLQUFLLDJCQUEyQixDQUFDLElBQUksQ0FBQztBQUFBLEVBQ2pEO0FBU08sV0FBUyxtQkFBbUI7QUFDL0IsV0FBTyxLQUFLLHlCQUF5QjtBQUFBLEVBQ3pDOzs7QUNqQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxNQUFNLFFBQVE7QUFBQSxJQUNWLFlBQVk7QUFBQSxJQUNaLHNCQUFzQjtBQUFBLElBQ3RCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLHVCQUF1QjtBQUFBLEVBQzNCO0FBRUEsTUFBTSxxQkFBcUI7QUFRM0IsV0FBUyxxQkFBcUIsT0FBTztBQUNqQyxVQUFNLGVBQWUsTUFBTSxpQkFBaUIsT0FBTyxNQUFNLE1BQU0sZUFBZSxFQUFFLEtBQUs7QUFDckYsUUFBSSxjQUFjO0FBQ2QsVUFBSSxpQkFBaUIsT0FBTyxNQUFNLE1BQU0sY0FBYztBQUNsRCxlQUFPO0FBQUEsTUFDWDtBQUlBLGFBQU87QUFBQSxJQUNYO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFPQSxXQUFTLFdBQVcsR0FBRztBQUluQixVQUFNLGFBQWEsRUFBRSxhQUFhLE1BQU0sU0FBUyxPQUFPO0FBR3hELFFBQUksQ0FBQyxZQUFZO0FBQ2I7QUFBQSxJQUNKO0FBR0EsTUFBRSxlQUFlO0FBQ2pCLE1BQUUsYUFBYSxhQUFhO0FBRTVCLFFBQUksQ0FBQyxPQUFPLE1BQU0sTUFBTSx3QkFBd0I7QUFDNUM7QUFBQSxJQUNKO0FBRUEsUUFBSSxDQUFDLE1BQU0sZUFBZTtBQUN0QjtBQUFBLElBQ0o7QUFFQSxVQUFNLFVBQVUsRUFBRTtBQUdsQixRQUFHLE1BQU07QUFBZ0IsWUFBTSxlQUFlO0FBRzlDLFFBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLGlCQUFpQixPQUFPLENBQUMsR0FBRztBQUM5RDtBQUFBLElBQ0o7QUFFQSxRQUFJLGlCQUFpQjtBQUNyQixXQUFPLGdCQUFnQjtBQUVuQixVQUFJLHFCQUFxQixpQkFBaUIsY0FBYyxDQUFDLEdBQUc7QUFDeEQsdUJBQWUsVUFBVSxJQUFJLGtCQUFrQjtBQUFBLE1BQ25EO0FBQ0EsdUJBQWlCLGVBQWU7QUFBQSxJQUNwQztBQUFBLEVBQ0o7QUFPQSxXQUFTLFlBQVksR0FBRztBQUVwQixVQUFNLGFBQWEsRUFBRSxhQUFhLE1BQU0sU0FBUyxPQUFPO0FBR3hELFFBQUksQ0FBQyxZQUFZO0FBQ2I7QUFBQSxJQUNKO0FBR0EsTUFBRSxlQUFlO0FBRWpCLFFBQUksQ0FBQyxPQUFPLE1BQU0sTUFBTSx3QkFBd0I7QUFDNUM7QUFBQSxJQUNKO0FBRUEsUUFBSSxDQUFDLE1BQU0sZUFBZTtBQUN0QjtBQUFBLElBQ0o7QUFHQSxRQUFJLENBQUMsRUFBRSxVQUFVLENBQUMscUJBQXFCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxHQUFHO0FBQ2hFLGFBQU87QUFBQSxJQUNYO0FBR0EsUUFBRyxNQUFNO0FBQWdCLFlBQU0sZUFBZTtBQUc5QyxVQUFNLGlCQUFpQixNQUFNO0FBRXpCLFlBQU0sS0FBSyxTQUFTLHVCQUF1QixrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsUUFBTSxHQUFHLFVBQVUsT0FBTyxrQkFBa0IsQ0FBQztBQUVySCxZQUFNLGlCQUFpQjtBQUV2QixVQUFJLE1BQU0sdUJBQXVCO0FBQzdCLHFCQUFhLE1BQU0scUJBQXFCO0FBQ3hDLGNBQU0sd0JBQXdCO0FBQUEsTUFDbEM7QUFBQSxJQUNKO0FBR0EsVUFBTSx3QkFBd0IsV0FBVyxNQUFNO0FBQzNDLFVBQUcsTUFBTTtBQUFnQixjQUFNLGVBQWU7QUFBQSxJQUNsRCxHQUFHLEVBQUU7QUFBQSxFQUNUO0FBT0EsV0FBUyxPQUFPLEdBQUc7QUFFZixVQUFNLGFBQWEsRUFBRSxhQUFhLE1BQU0sU0FBUyxPQUFPO0FBR3hELFFBQUksQ0FBQyxZQUFZO0FBQ2I7QUFBQSxJQUNKO0FBR0EsTUFBRSxlQUFlO0FBRWpCLFFBQUksQ0FBQyxPQUFPLE1BQU0sTUFBTSx3QkFBd0I7QUFDNUM7QUFBQSxJQUNKO0FBRUEsUUFBSSxvQkFBb0IsR0FBRztBQUV2QixVQUFJLFFBQVEsQ0FBQztBQUNiLFVBQUksRUFBRSxhQUFhLE9BQU87QUFDdEIsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sTUFBTTtBQUMvQyxjQUFJLEtBQUssU0FBUyxRQUFRO0FBQ3RCLG1CQUFPLEtBQUssVUFBVTtBQUFBLFVBQzFCO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTCxPQUFPO0FBQ0gsZ0JBQVEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxLQUFLO0FBQUEsTUFDcEM7QUFDQSxhQUFPLFFBQVEsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSztBQUFBLElBQ25EO0FBRUEsUUFBSSxDQUFDLE1BQU0sZUFBZTtBQUN0QjtBQUFBLElBQ0o7QUFHQSxRQUFHLE1BQU07QUFBZ0IsWUFBTSxlQUFlO0FBRzlDLFVBQU0sS0FBSyxTQUFTLHVCQUF1QixrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsUUFBTSxHQUFHLFVBQVUsT0FBTyxrQkFBa0IsQ0FBQztBQUFBLEVBQ3pIO0FBUU8sV0FBUyxzQkFBc0I7QUFDbEMsV0FBTyxPQUFPLFFBQVEsU0FBUyxvQ0FBb0M7QUFBQSxFQUN2RTtBQVVPLFdBQVMsaUJBQWlCLEdBQUcsR0FBRyxPQUFPO0FBRzFDLFFBQUksT0FBTyxRQUFRLFNBQVMsa0NBQWtDO0FBQzFELGFBQU8sUUFBUSxpQ0FBaUMsYUFBYSxLQUFLLEtBQUssS0FBSztBQUFBLElBQ2hGO0FBQUEsRUFDSjtBQW1CTyxXQUFTLFdBQVcsVUFBVSxlQUFlO0FBQ2hELFFBQUksT0FBTyxhQUFhLFlBQVk7QUFDaEMsY0FBUSxNQUFNLHVDQUF1QztBQUNyRDtBQUFBLElBQ0o7QUFFQSxRQUFJLE1BQU0sWUFBWTtBQUNsQjtBQUFBLElBQ0o7QUFDQSxVQUFNLGFBQWE7QUFFbkIsVUFBTSxRQUFRLE9BQU87QUFDckIsVUFBTSxnQkFBZ0IsVUFBVSxlQUFlLFVBQVUsWUFBWSxNQUFNLHVCQUF1QjtBQUNsRyxXQUFPLGlCQUFpQixZQUFZLFVBQVU7QUFDOUMsV0FBTyxpQkFBaUIsYUFBYSxXQUFXO0FBQ2hELFdBQU8saUJBQWlCLFFBQVEsTUFBTTtBQUV0QyxRQUFJLEtBQUs7QUFDVCxRQUFJLE1BQU0sZUFBZTtBQUNyQixXQUFLLFNBQVUsR0FBRyxHQUFHLE9BQU87QUFDeEIsY0FBTSxVQUFVLFNBQVMsaUJBQWlCLEdBQUcsQ0FBQztBQUU5QyxZQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixpQkFBaUIsT0FBTyxDQUFDLEdBQUc7QUFDOUQsaUJBQU87QUFBQSxRQUNYO0FBQ0EsaUJBQVMsR0FBRyxHQUFHLEtBQUs7QUFBQSxNQUN4QjtBQUFBLElBQ0o7QUFFQSxhQUFTLG1CQUFtQixFQUFFO0FBQUEsRUFDbEM7QUFLTyxXQUFTLGdCQUFnQjtBQUM1QixXQUFPLG9CQUFvQixZQUFZLFVBQVU7QUFDakQsV0FBTyxvQkFBb0IsYUFBYSxXQUFXO0FBQ25ELFdBQU8sb0JBQW9CLFFBQVEsTUFBTTtBQUN6QyxjQUFVLGlCQUFpQjtBQUMzQixVQUFNLGFBQWE7QUFBQSxFQUN2Qjs7O0FDNVFPLFdBQVMsMEJBQTBCLE9BQU87QUFFN0MsVUFBTSxVQUFVLE1BQU07QUFDdEIsVUFBTSxnQkFBZ0IsT0FBTyxpQkFBaUIsT0FBTztBQUNyRCxVQUFNLDJCQUEyQixjQUFjLGlCQUFpQix1QkFBdUIsRUFBRSxLQUFLO0FBQzlGLFlBQVEsMEJBQTBCO0FBQUEsTUFDOUIsS0FBSztBQUNEO0FBQUEsTUFDSixLQUFLO0FBQ0QsY0FBTSxlQUFlO0FBQ3JCO0FBQUEsTUFDSjtBQUVJLFlBQUksUUFBUSxtQkFBbUI7QUFDM0I7QUFBQSxRQUNKO0FBR0EsY0FBTSxZQUFZLE9BQU8sYUFBYTtBQUN0QyxjQUFNLGVBQWdCLFVBQVUsU0FBUyxFQUFFLFNBQVM7QUFDcEQsWUFBSSxjQUFjO0FBQ2QsbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxZQUFZLEtBQUs7QUFDM0Msa0JBQU0sUUFBUSxVQUFVLFdBQVcsQ0FBQztBQUNwQyxrQkFBTSxRQUFRLE1BQU0sZUFBZTtBQUNuQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNuQyxvQkFBTSxPQUFPLE1BQU07QUFDbkIsa0JBQUksU0FBUyxpQkFBaUIsS0FBSyxNQUFNLEtBQUssR0FBRyxNQUFNLFNBQVM7QUFDNUQ7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBRUEsWUFBSSxRQUFRLFlBQVksV0FBVyxRQUFRLFlBQVksWUFBWTtBQUMvRCxjQUFJLGdCQUFpQixDQUFDLFFBQVEsWUFBWSxDQUFDLFFBQVEsVUFBVztBQUMxRDtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBR0EsY0FBTSxlQUFlO0FBQUEsSUFDN0I7QUFBQSxFQUNKOzs7QUNuQk8sV0FBUyxPQUFPO0FBQ25CLFdBQU8sWUFBWSxHQUFHO0FBQUEsRUFDMUI7QUFFTyxXQUFTLE9BQU87QUFDbkIsV0FBTyxZQUFZLEdBQUc7QUFBQSxFQUMxQjtBQUVPLFdBQVMsT0FBTztBQUNuQixXQUFPLFlBQVksR0FBRztBQUFBLEVBQzFCO0FBRU8sV0FBUyxjQUFjO0FBQzFCLFdBQU8sS0FBSyxvQkFBb0I7QUFBQSxFQUNwQztBQUdBLFNBQU8sVUFBVTtBQUFBLElBQ2IsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0gsR0FBRztBQUFBLElBQ0g7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNKO0FBR0EsU0FBTyxRQUFRO0FBQUEsSUFDWDtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBLE9BQU87QUFBQSxNQUNILHNCQUFzQjtBQUFBLE1BQ3RCLDJCQUEyQjtBQUFBLE1BQzNCLGNBQWM7QUFBQSxNQUNkLGVBQWU7QUFBQSxNQUNmLGlCQUFpQjtBQUFBLE1BQ2pCLFlBQVk7QUFBQSxNQUNaLHNCQUFzQjtBQUFBLE1BQ3RCLGlCQUFpQjtBQUFBLE1BQ2pCLGNBQWM7QUFBQSxNQUNkLGlCQUFpQjtBQUFBLE1BQ2pCLGNBQWM7QUFBQSxNQUNkLHdCQUF3QjtBQUFBLElBQzVCO0FBQUEsRUFDSjtBQUdBLE1BQUksT0FBTyxlQUFlO0FBQ3RCLFdBQU8sTUFBTSxZQUFZLE9BQU8sYUFBYTtBQUM3QyxXQUFPLE9BQU8sTUFBTTtBQUFBLEVBQ3hCO0FBR0EsTUFBSSxPQUFRO0FBQ1IsV0FBTyxPQUFPO0FBQUEsRUFDbEI7QUFFQSxNQUFJLFdBQVcsU0FBUyxHQUFHO0FBQ3ZCLFFBQUksTUFBTSxPQUFPLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsT0FBTyxNQUFNLE1BQU0sZUFBZTtBQUMvRixRQUFJLEtBQUs7QUFDTCxZQUFNLElBQUksS0FBSztBQUFBLElBQ25CO0FBRUEsUUFBSSxRQUFRLE9BQU8sTUFBTSxNQUFNLGNBQWM7QUFDekMsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLEVBQUUsWUFBWSxHQUFHO0FBRWpCLGFBQU87QUFBQSxJQUNYO0FBRUEsUUFBSSxFQUFFLFdBQVcsR0FBRztBQUVoQixhQUFPO0FBQUEsSUFDWDtBQUVBLFdBQU87QUFBQSxFQUNYO0FBRUEsU0FBTyxNQUFNLHVCQUF1QixTQUFTLFVBQVUsT0FBTztBQUMxRCxXQUFPLE1BQU0sTUFBTSxrQkFBa0I7QUFDckMsV0FBTyxNQUFNLE1BQU0sZUFBZTtBQUFBLEVBQ3RDO0FBRUEsU0FBTyxNQUFNLHVCQUF1QixTQUFTLFVBQVUsT0FBTztBQUMxRCxXQUFPLE1BQU0sTUFBTSxrQkFBa0I7QUFDckMsV0FBTyxNQUFNLE1BQU0sZUFBZTtBQUFBLEVBQ3RDO0FBRUEsU0FBTyxpQkFBaUIsYUFBYSxDQUFDLE1BQU07QUFFeEMsUUFBSSxPQUFPLE1BQU0sTUFBTSxZQUFZO0FBQy9CLGFBQU8sWUFBWSxZQUFZLE9BQU8sTUFBTSxNQUFNLFVBQVU7QUFDNUQsUUFBRSxlQUFlO0FBQ2pCO0FBQUEsSUFDSjtBQUVBLFFBQUksU0FBUyxDQUFDLEdBQUc7QUFDYixVQUFJLE9BQU8sTUFBTSxNQUFNLHNCQUFzQjtBQUV6QyxZQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sZUFBZSxFQUFFLFVBQVUsRUFBRSxPQUFPLGNBQWM7QUFDdkU7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLFVBQUksT0FBTyxNQUFNLE1BQU0sc0JBQXNCO0FBQ3pDLGVBQU8sTUFBTSxNQUFNLGFBQWE7QUFBQSxNQUNwQyxPQUFPO0FBQ0gsVUFBRSxlQUFlO0FBQ2pCLGVBQU8sWUFBWSxNQUFNO0FBQUEsTUFDN0I7QUFDQTtBQUFBLElBQ0osT0FBTztBQUNILGFBQU8sTUFBTSxNQUFNLGFBQWE7QUFBQSxJQUNwQztBQUFBLEVBQ0osQ0FBQztBQUVELFNBQU8saUJBQWlCLFdBQVcsTUFBTTtBQUNyQyxXQUFPLE1BQU0sTUFBTSxhQUFhO0FBQUEsRUFDcEMsQ0FBQztBQUVELFdBQVMsVUFBVSxRQUFRO0FBQ3ZCLGFBQVMsZ0JBQWdCLE1BQU0sU0FBUyxVQUFVLE9BQU8sTUFBTSxNQUFNO0FBQ3JFLFdBQU8sTUFBTSxNQUFNLGFBQWE7QUFBQSxFQUNwQztBQUVBLFNBQU8saUJBQWlCLGFBQWEsU0FBUyxHQUFHO0FBQzdDLFFBQUksT0FBTyxNQUFNLE1BQU0sWUFBWTtBQUMvQixhQUFPLE1BQU0sTUFBTSxhQUFhO0FBQ2hDLFVBQUksZUFBZSxFQUFFLFlBQVksU0FBWSxFQUFFLFVBQVUsRUFBRTtBQUMzRCxVQUFJLGVBQWUsR0FBRztBQUNsQixlQUFPLFlBQVksTUFBTTtBQUN6QjtBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsUUFBSSxDQUFDLE9BQU8sTUFBTSxNQUFNLGNBQWM7QUFDbEM7QUFBQSxJQUNKO0FBQ0EsUUFBSSxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsTUFBTTtBQUMxQyxhQUFPLE1BQU0sTUFBTSxnQkFBZ0IsU0FBUyxnQkFBZ0IsTUFBTTtBQUFBLElBQ3RFO0FBQ0EsUUFBSSxPQUFPLGFBQWEsRUFBRSxVQUFVLE9BQU8sTUFBTSxNQUFNLG1CQUFtQixPQUFPLGNBQWMsRUFBRSxVQUFVLE9BQU8sTUFBTSxNQUFNLGlCQUFpQjtBQUMzSSxlQUFTLGdCQUFnQixNQUFNLFNBQVM7QUFBQSxJQUM1QztBQUNBLFFBQUksY0FBYyxPQUFPLGFBQWEsRUFBRSxVQUFVLE9BQU8sTUFBTSxNQUFNO0FBQ3JFLFFBQUksYUFBYSxFQUFFLFVBQVUsT0FBTyxNQUFNLE1BQU07QUFDaEQsUUFBSSxZQUFZLEVBQUUsVUFBVSxPQUFPLE1BQU0sTUFBTTtBQUMvQyxRQUFJLGVBQWUsT0FBTyxjQUFjLEVBQUUsVUFBVSxPQUFPLE1BQU0sTUFBTTtBQUd2RSxRQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLE9BQU8sTUFBTSxNQUFNLGVBQWUsUUFBVztBQUMzRyxnQkFBVTtBQUFBLElBQ2QsV0FBVyxlQUFlO0FBQWMsZ0JBQVUsV0FBVztBQUFBLGFBQ3BELGNBQWM7QUFBYyxnQkFBVSxXQUFXO0FBQUEsYUFDakQsY0FBYztBQUFXLGdCQUFVLFdBQVc7QUFBQSxhQUM5QyxhQUFhO0FBQWEsZ0JBQVUsV0FBVztBQUFBLGFBQy9DO0FBQVksZ0JBQVUsVUFBVTtBQUFBLGFBQ2hDO0FBQVcsZ0JBQVUsVUFBVTtBQUFBLGFBQy9CO0FBQWMsZ0JBQVUsVUFBVTtBQUFBLGFBQ2xDO0FBQWEsZ0JBQVUsVUFBVTtBQUFBLEVBRTlDLENBQUM7QUFHRCxTQUFPLGlCQUFpQixlQUFlLFNBQVMsR0FBRztBQUUvQyxRQUFJO0FBQU87QUFFWCxRQUFJLE9BQU8sTUFBTSxNQUFNLDJCQUEyQjtBQUM5QyxRQUFFLGVBQWU7QUFBQSxJQUNyQixPQUFPO0FBQ0gsTUFBWSwwQkFBMEIsQ0FBQztBQUFBLElBQzNDO0FBQUEsRUFDSixDQUFDO0FBRUQsU0FBTyxZQUFZLGVBQWU7IiwKICAibmFtZXMiOiBbImV2ZW50TmFtZSJdCn0K diff --git a/v2/internal/frontend/runtime/runtime_prod_desktop.js b/v2/internal/frontend/runtime/runtime_prod_desktop.js index 4bf7d147c..3d38924f7 100644 --- a/v2/internal/frontend/runtime/runtime_prod_desktop.js +++ b/v2/internal/frontend/runtime/runtime_prod_desktop.js @@ -1 +1 @@ -(()=>{var j=Object.defineProperty;var p=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};p(b,{LogDebug:()=>$,LogError:()=>Q,LogFatal:()=>_,LogInfo:()=>Y,LogLevel:()=>K,LogPrint:()=>X,LogTrace:()=>J,LogWarning:()=>q,SetLogLevel:()=>Z});function u(e,t){window.WailsInvoke("L"+e+t)}function J(e){u("T",e)}function X(e){u("P",e)}function $(e){u("D",e)}function Y(e){u("I",e)}function q(e){u("W",e)}function Q(e){u("E",e)}function _(e){u("F",e)}function Z(e){u("S",e)}var K={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},w={};function v(e,t,n){w[e]=w[e]||[];let o=new y(e,t,n);return w[e].push(o),()=>ee(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name,n=w[t]?.slice()||[];if(n.length){for(let o=n.length-1;o>=0;o-=1){let i=n[o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?g(t):w[t]=n}}function R(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function M(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function g(e){delete w[e],window.WailsInvoke("EX"+e)}function x(e,...t){g(e),t.length>0&&t.forEach(n=>{g(n)})}function z(){Object.keys(w).forEach(t=>{g(t)})}function ee(e){let t=e.eventName;w[t]!==void 0&&(w[t]=w[t].filter(n=>n!==e),w[t].length===0&&g(t))}var c={};function te(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function ne(){return Math.random()*9007199254740991}var D;window.crypto?D=te:D=ne;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(d))}catch(d){console.error(d)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(d))}catch(d){console.error(d)}}));function B(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function F(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};p(T,{WindowCenter:()=>ae,WindowFullscreen:()=>de,WindowGetPosition:()=>xe,WindowGetSize:()=>pe,WindowHide:()=>De,WindowIsFullscreen:()=>ue,WindowIsMaximised:()=>Te,WindowIsMinimised:()=>Ce,WindowIsNormal:()=>Ie,WindowMaximise:()=>Ee,WindowMinimise:()=>Se,WindowReload:()=>oe,WindowReloadApp:()=>ie,WindowSetAlwaysOnTop:()=>ve,WindowSetBackgroundColour:()=>Oe,WindowSetDarkTheme:()=>le,WindowSetLightTheme:()=>se,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>me,WindowSetPosition:()=>We,WindowSetSize:()=>ce,WindowSetSystemDefaultTheme:()=>re,WindowSetTitle:()=>we,WindowShow:()=>he,WindowToggleMaximise:()=>be,WindowUnfullscreen:()=>fe,WindowUnmaximise:()=>ye,WindowUnminimise:()=>ke});function oe(){window.location.reload()}function ie(){window.WailsInvoke("WR")}function re(){window.WailsInvoke("WASDT")}function se(){window.WailsInvoke("WALT")}function le(){window.WailsInvoke("WADT")}function ae(){window.WailsInvoke("Wc")}function we(e){window.WailsInvoke("WT"+e)}function de(){window.WailsInvoke("WF")}function fe(){window.WailsInvoke("Wf")}function ue(){return a(":wails:WindowIsFullscreen")}function ce(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function pe(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function me(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function ve(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function We(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function xe(){return a(":wails:WindowGetPos")}function De(){window.WailsInvoke("WH")}function he(){window.WailsInvoke("WS")}function Ee(){window.WailsInvoke("WM")}function be(){window.WailsInvoke("Wt")}function ye(){window.WailsInvoke("WU")}function Te(){return a(":wails:WindowIsMaximised")}function Se(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Ce(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Oe(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var S={};p(S,{ScreenGetAll:()=>Le});function Le(){return a(":wails:ScreenGetAll")}var k={};p(k,{BrowserOpenURL:()=>Ae});function Ae(e){window.WailsInvoke("BO:"+e)}var C={};p(C,{ClipboardGetText:()=>Re,ClipboardSetText:()=>Pe});function Pe(e){return a(":wails:ClipboardSetText",[e])}function Re(){return a(":wails:ClipboardGetText")}var I={};p(I,{CanResolveFilePaths:()=>V,OnFileDrop:()=>ze,OnFileDropOff:()=>Be,ResolveFilePaths:()=>Me});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},m="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function G(e){if(!window.wails.flags.enableWailsDragAndDrop||(e.dataTransfer.dropEffect="copy",e.preventDefault(),!s.useDropTarget))return;let t=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!t||!h(getComputedStyle(t)))return;let n=t;for(;n;)h(getComputedStyle(n))&&n.classList.add(m),n=n.parentElement}function H(e){if(!!window.wails.flags.enableWailsDragAndDrop&&(e.preventDefault(),!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(m)).forEach(t=>t.classList.remove(m)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function U(e){if(!!window.wails.flags.enableWailsDragAndDrop){if(e.preventDefault(),V()){let t=[];e.dataTransfer.items?t=[...e.dataTransfer.items].map((n,o)=>{if(n.kind==="file")return n.getAsFile()}):t=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,t)}!s.useDropTarget||(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(m)).forEach(t=>t.classList.remove(m)))}}function V(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Me(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function ze(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",G),window.addEventListener("dragleave",H),window.addEventListener("drop",U);let o=e;s.useDropTarget&&(o=function(i,r,l){let d=document.elementFromPoint(i,r);if(!d||!h(getComputedStyle(d)))return null;e(i,r,l)}),W("wails:file-drop",o)}function Be(){window.removeEventListener("dragover",G),window.removeEventListener("dragleave",H),window.removeEventListener("drop",U),x("wails:file-drop"),s.registered=!1}function N(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ne(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX{var j=Object.defineProperty;var p=(e,t)=>{for(var n in t)j(e,n,{get:t[n],enumerable:!0})};var b={};p(b,{LogDebug:()=>$,LogError:()=>Q,LogFatal:()=>_,LogInfo:()=>Y,LogLevel:()=>K,LogPrint:()=>X,LogTrace:()=>J,LogWarning:()=>q,SetLogLevel:()=>Z});function u(e,t){window.WailsInvoke("L"+e+t)}function J(e){u("T",e)}function X(e){u("P",e)}function $(e){u("D",e)}function Y(e){u("I",e)}function q(e){u("W",e)}function Q(e){u("E",e)}function _(e){u("F",e)}function Z(e){u("S",e)}var K={TRACE:1,DEBUG:2,INFO:3,WARNING:4,ERROR:5};var y=class{constructor(t,n,o){this.eventName=t,this.maxCallbacks=o||-1,this.Callback=i=>(n.apply(null,i),this.maxCallbacks===-1?!1:(this.maxCallbacks-=1,this.maxCallbacks===0))}},w={};function v(e,t,n){w[e]=w[e]||[];let o=new y(e,t,n);return w[e].push(o),()=>ee(o)}function W(e,t){return v(e,t,-1)}function A(e,t){return v(e,t,1)}function P(e){let t=e.name,n=w[t]?.slice()||[];if(n.length){for(let o=n.length-1;o>=0;o-=1){let i=n[o],r=e.data;i.Callback(r)&&n.splice(o,1)}n.length===0?g(t):w[t]=n}}function F(e){let t;try{t=JSON.parse(e)}catch{let o="Invalid JSON passed to Notify: "+e;throw new Error(o)}P(t)}function R(e){let t={name:e,data:[].slice.apply(arguments).slice(1)};P(t),window.WailsInvoke("EE"+JSON.stringify(t))}function g(e){delete w[e],window.WailsInvoke("EX"+e)}function x(e,...t){g(e),t.length>0&&t.forEach(n=>{g(n)})}function M(){Object.keys(w).forEach(t=>{g(t)})}function ee(e){let t=e.eventName;w[t]!==void 0&&(w[t]=w[t].filter(n=>n!==e),w[t].length===0&&g(t))}var c={};function te(){var e=new Uint32Array(1);return window.crypto.getRandomValues(e)[0]}function ne(){return Math.random()*9007199254740991}var D;window.crypto?D=te:D=ne;function a(e,t,n){return n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={name:e,args:t,callbackID:r};window.WailsInvoke("C"+JSON.stringify(d))}catch(d){console.error(d)}})}window.ObfuscatedCall=(e,t,n)=>(n==null&&(n=0),new Promise(function(o,i){var r;do r=e+"-"+D();while(c[r]);var l;n>0&&(l=setTimeout(function(){i(Error("Call to method "+e+" timed out. Request ID: "+r))},n)),c[r]={timeoutHandle:l,reject:i,resolve:o};try{let d={id:e,args:t,callbackID:r};window.WailsInvoke("c"+JSON.stringify(d))}catch(d){console.error(d)}}));function z(e){let t;try{t=JSON.parse(e)}catch(i){let r=`Invalid JSON passed to callback: ${i.message}. Message: ${e}`;throw runtime.LogDebug(r),new Error(r)}let n=t.callbackid,o=c[n];if(!o){let i=`Callback '${n}' not registered!!!`;throw console.error(i),new Error(i)}clearTimeout(o.timeoutHandle),delete c[n],t.error?o.reject(t.error):o.resolve(t.result)}window.go={};function B(e){try{e=JSON.parse(e)}catch(t){console.error(t)}window.go=window.go||{},Object.keys(e).forEach(t=>{window.go[t]=window.go[t]||{},Object.keys(e[t]).forEach(n=>{window.go[t][n]=window.go[t][n]||{},Object.keys(e[t][n]).forEach(o=>{window.go[t][n][o]=function(){let i=0;function r(){let l=[].slice.call(arguments);return a([t,n,o].join("."),l,i)}return r.setTimeout=function(l){i=l},r.getTimeout=function(){return i},r}()})})})}var T={};p(T,{WindowCenter:()=>ae,WindowFullscreen:()=>de,WindowGetPosition:()=>xe,WindowGetSize:()=>pe,WindowHide:()=>De,WindowIsFullscreen:()=>ue,WindowIsMaximised:()=>Te,WindowIsMinimised:()=>Ce,WindowIsNormal:()=>Ie,WindowMaximise:()=>Ee,WindowMinimise:()=>Se,WindowReload:()=>oe,WindowReloadApp:()=>ie,WindowSetAlwaysOnTop:()=>ve,WindowSetBackgroundColour:()=>Oe,WindowSetDarkTheme:()=>le,WindowSetLightTheme:()=>se,WindowSetMaxSize:()=>ge,WindowSetMinSize:()=>me,WindowSetPosition:()=>We,WindowSetSize:()=>ce,WindowSetSystemDefaultTheme:()=>re,WindowSetTitle:()=>we,WindowShow:()=>he,WindowToggleMaximise:()=>be,WindowUnfullscreen:()=>fe,WindowUnmaximise:()=>ye,WindowUnminimise:()=>ke});function oe(){window.location.reload()}function ie(){window.WailsInvoke("WR")}function re(){window.WailsInvoke("WASDT")}function se(){window.WailsInvoke("WALT")}function le(){window.WailsInvoke("WADT")}function ae(){window.WailsInvoke("Wc")}function we(e){window.WailsInvoke("WT"+e)}function de(){window.WailsInvoke("WF")}function fe(){window.WailsInvoke("Wf")}function ue(){return a(":wails:WindowIsFullscreen")}function ce(e,t){window.WailsInvoke("Ws:"+e+":"+t)}function pe(){return a(":wails:WindowGetSize")}function ge(e,t){window.WailsInvoke("WZ:"+e+":"+t)}function me(e,t){window.WailsInvoke("Wz:"+e+":"+t)}function ve(e){window.WailsInvoke("WATP:"+(e?"1":"0"))}function We(e,t){window.WailsInvoke("Wp:"+e+":"+t)}function xe(){return a(":wails:WindowGetPos")}function De(){window.WailsInvoke("WH")}function he(){window.WailsInvoke("WS")}function Ee(){window.WailsInvoke("WM")}function be(){window.WailsInvoke("Wt")}function ye(){window.WailsInvoke("WU")}function Te(){return a(":wails:WindowIsMaximised")}function Se(){window.WailsInvoke("Wm")}function ke(){window.WailsInvoke("Wu")}function Ce(){return a(":wails:WindowIsMinimised")}function Ie(){return a(":wails:WindowIsNormal")}function Oe(e,t,n,o){let i=JSON.stringify({r:e||0,g:t||0,b:n||0,a:o||255});window.WailsInvoke("Wr:"+i)}var S={};p(S,{ScreenGetAll:()=>Le});function Le(){return a(":wails:ScreenGetAll")}var k={};p(k,{BrowserOpenURL:()=>Ae});function Ae(e){window.WailsInvoke("BO:"+e)}var C={};p(C,{ClipboardGetText:()=>Fe,ClipboardSetText:()=>Pe});function Pe(e){return a(":wails:ClipboardSetText",[e])}function Fe(){return a(":wails:ClipboardGetText")}var I={};p(I,{CanResolveFilePaths:()=>V,OnFileDrop:()=>Me,OnFileDropOff:()=>ze,ResolveFilePaths:()=>Re});var s={registered:!1,defaultUseDropTarget:!0,useDropTarget:!0,nextDeactivate:null,nextDeactivateTimeout:null},m="wails-drop-target-active";function h(e){let t=e.getPropertyValue(window.wails.flags.cssDropProperty).trim();return t?t===window.wails.flags.cssDropValue:!1}function G(e){if(!e.dataTransfer.types.includes("Files")||(e.preventDefault(),e.dataTransfer.dropEffect="copy",!window.wails.flags.enableWailsDragAndDrop)||!s.useDropTarget)return;let n=e.target;if(s.nextDeactivate&&s.nextDeactivate(),!n||!h(getComputedStyle(n)))return;let o=n;for(;o;)h(getComputedStyle(o))&&o.classList.add(m),o=o.parentElement}function H(e){if(!!e.dataTransfer.types.includes("Files")&&(e.preventDefault(),!!window.wails.flags.enableWailsDragAndDrop&&!!s.useDropTarget)){if(!e.target||!h(getComputedStyle(e.target)))return null;s.nextDeactivate&&s.nextDeactivate(),s.nextDeactivate=()=>{Array.from(document.getElementsByClassName(m)).forEach(n=>n.classList.remove(m)),s.nextDeactivate=null,s.nextDeactivateTimeout&&(clearTimeout(s.nextDeactivateTimeout),s.nextDeactivateTimeout=null)},s.nextDeactivateTimeout=setTimeout(()=>{s.nextDeactivate&&s.nextDeactivate()},50)}}function U(e){if(!!e.dataTransfer.types.includes("Files")&&(e.preventDefault(),!!window.wails.flags.enableWailsDragAndDrop)){if(V()){let n=[];e.dataTransfer.items?n=[...e.dataTransfer.items].map((o,i)=>{if(o.kind==="file")return o.getAsFile()}):n=[...e.dataTransfer.files],window.runtime.ResolveFilePaths(e.x,e.y,n)}!s.useDropTarget||(s.nextDeactivate&&s.nextDeactivate(),Array.from(document.getElementsByClassName(m)).forEach(n=>n.classList.remove(m)))}}function V(){return window.chrome?.webview?.postMessageWithAdditionalObjects!=null}function Re(e,t,n){window.chrome?.webview?.postMessageWithAdditionalObjects&&chrome.webview.postMessageWithAdditionalObjects(`file:drop:${e}:${t}`,n)}function Me(e,t){if(typeof e!="function"){console.error("DragAndDropCallback is not a function");return}if(s.registered)return;s.registered=!0;let n=typeof t;s.useDropTarget=n==="undefined"||n!=="boolean"?s.defaultUseDropTarget:t,window.addEventListener("dragover",G),window.addEventListener("dragleave",H),window.addEventListener("drop",U);let o=e;s.useDropTarget&&(o=function(i,r,l){let d=document.elementFromPoint(i,r);if(!d||!h(getComputedStyle(d)))return null;e(i,r,l)}),W("wails:file-drop",o)}function ze(){window.removeEventListener("dragover",G),window.removeEventListener("dragleave",H),window.removeEventListener("drop",U),x("wails:file-drop"),s.registered=!1}function N(e){let t=e.target;switch(window.getComputedStyle(t).getPropertyValue("--default-contextmenu").trim()){case"show":return;case"hide":e.preventDefault();return;default:if(t.isContentEditable)return;let i=window.getSelection(),r=i.toString().length>0;if(r)for(let l=0;l{if(window.wails.flags.resizeEdge){window.WailsInvoke("resize:"+window.wails.flags.resizeEdge),e.preventDefault();return}if(Ne(e)){if(window.wails.flags.disableScrollbarDrag&&(e.offsetX>e.target.clientWidth||e.offsetY>e.target.clientHeight))return;window.wails.flags.deferDragToMouseMove?window.wails.flags.shouldDrag=!0:(e.preventDefault(),window.WailsInvoke("drag"));return}else window.wails.flags.shouldDrag=!1});window.addEventListener("mouseup",()=>{window.wails.flags.shouldDrag=!1});function f(e){document.documentElement.style.cursor=e||window.wails.flags.defaultCursor,window.wails.flags.resizeEdge=e}window.addEventListener("mousemove",function(e){if(window.wails.flags.shouldDrag&&(window.wails.flags.shouldDrag=!1,(e.buttons!==void 0?e.buttons:e.which)>0)){window.WailsInvoke("drag");return}if(!window.wails.flags.enableResize)return;window.wails.flags.defaultCursor==null&&(window.wails.flags.defaultCursor=document.documentElement.style.cursor),window.outerWidth-e.clientX Date: Sat, 8 Nov 2025 12:54:44 +1100 Subject: [PATCH 275/344] Doc fixes --- .../current/guides/sveltekit.mdx | 4 ++-- website/src/pages/changelog.mdx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx index bf533477a..196eb073d 100644 --- a/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx +++ b/website/i18n/fr/docusaurus-plugin-content-docs/current/guides/sveltekit.mdx @@ -108,8 +108,8 @@ wails dev ##### Le runtime Wails se décharge avec des pages de navigation complètes ! -- Tout ce qui provoque la navigation de page complète : \`window.location.href = '//' ou le menu contextuel se recharge lorsque vous utilisez wails dev. Cela signifie que vous pouvez finir par perdre la possibilité d'appeler n'importe quel runtime cassant l'application. Il y a deux façons de contourner ce problème. -- Utilisez `import { goto } de '$app/navigation'` puis appelez `goto('//')` dans votre +page.svelte. Cela empêchera la navigation de la page complète. +- Tout ce qui provoque la navigation de page complète : \`window.location.href = '/some/page'` ou le menu contextuel se recharge lorsque vous utilisez wails dev. Cela signifie que vous pouvez finir par perdre la possibilité d'appeler n'importe quel runtime cassant l'application. Il y a deux façons de contourner ce problème. +- Utilisez `import { goto } de '$app/navigation'` puis appelez `goto('/some/page')` dans votre +page.svelte. Cela empêchera la navigation de la page complète. - Si la navigation de la page complète ne peut pas être empêchée, le runtime Wails peut être ajouté à toutes les pages en ajoutant ce qui suit dans le `` de myapp/frontend/src/app.html ``` diff --git a/website/src/pages/changelog.mdx b/website/src/pages/changelog.mdx index 1980e51eb..5fb32320d 100644 --- a/website/src/pages/changelog.mdx +++ b/website/src/pages/changelog.mdx @@ -74,7 +74,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed dev mode logging bug by @attperac in [#3972](https://wailsapp/wails/pull/3972) -- Fixed `reloaddirs` wails.json config options by @atterpac in [#4005](https//github.com/wailsapp/wails/pull/4005) +- Fixed `reloaddirs` wails.json config options by @atterpac in [#4005](https://github.com/wailsapp/wails/pull/4005) - Fixed cross compilation failed with CGO [PR](https://github.com/wailsapp/wails/pull/3795) by [@fcying](https://github.com/fcying) - Using go-webview2 v0.1.17 to fix native webview2loader issue, by @leaanthony - Fixed example for macOS menu by @takuyahara in [PR](https://github.com/wailsapp/wails/pull/3847) @@ -125,7 +125,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed drag and drop missing cursor icon [PR](https://github.com/wailsapp/wails/pull/3703) by [@mrf345](https://github.com/mrf345) ### Changed -- Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](github.com/ignasbernotas) +- Modified docs to reflect the correct password syntax for the `gon-sign.json` file [PR](https://github.com/wailsapp/wails/pull/3620) by [@ignasbernotas](https://github.com/ignasbernotas) ## v2.9.1 - 2024-06-18 ### Fixed From 8513b77fd8edc2a1301ad397bed92b34dee202dc Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Nov 2025 13:06:08 +1100 Subject: [PATCH 276/344] Update package.json --- website/package.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/website/package.json b/website/package.json index bb36022ad..c36b3c02f 100644 --- a/website/package.json +++ b/website/package.json @@ -14,8 +14,7 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "engines": { - "node": ">=18.14.0", - "pnpm": ">=8.3.1" + "node": ">=18.14.0" }, "dependencies": { "@crowdin/crowdin-api-client": "^1.33.1", @@ -47,6 +46,5 @@ "devDependencies": { "@crowdin/cli": "^3.19.4", "prettier": "^2.8.7" - }, - "packageManager": "pnpm@8.3.1+sha512.d264f6640bf4f09de7cfcc547568515bcf0613cf485a03e8ff16616fa69c4172b6f9a0a2925ee44fb060df565c9c9a8eaf061749e77af318cb77f6684a7051f3" + } } From cb1c2d86c040c0dbba886d82eb46289a16a29261 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Nov 2025 13:10:53 +1100 Subject: [PATCH 277/344] Update docs build configs --- website/bun.lockb | Bin 0 -> 452592 bytes website/pnpm-lock.yaml | 9029 ---------------------------------------- 2 files changed, 9029 deletions(-) create mode 100644 website/bun.lockb delete mode 100644 website/pnpm-lock.yaml diff --git a/website/bun.lockb b/website/bun.lockb new file mode 100644 index 0000000000000000000000000000000000000000..63ed1b15935b5456ff70d51eb7424d470b7e11ca GIT binary patch literal 452592 zcmb@P2RxPU|NoClv=%QL4>-~OT^ojNf9`3Ksc-V%UGM6?s#;s?lX-O~ z{}|Pfz;(Y)jeS*_T8Tuam5M~9&dEQGmX#L{kTobO*AR)K@6bL1K4b(eVl* zQ7tO(C#^y{h_o7MPtuyC>q#|9LnOgcNw7$Cn1FSu+)S0@Xpyq^yQ!Ypi`@f*1E`NR zRIbn3k!q2?Acq@~UL|cn>Mc_nx~@UxE))XeM9XwJ^;@0F8U$r39v4;=!)_|G_UlON zk&Y#0{(Fk0Ax5FWK2@m9I15xbKYI|Lm5B2(PvGN#FHg47EKaAI(%4|FqQK1X;eWQzI6a6%A5L(%n?g z`k6!jVdED}%Er%Grn;m$R5m9yAdRN>jPFm%{Mb)UvGP0`J(iD#)R_5MNHC@^NZI_j zM#}u#L(2M(lhscpC3N&SQr7QKS=oY=T#q&(W$`tl{#ahpsUOA*(&O^%Ny@GVOT_LW zMn2NI`kX(NNm=_`Qs$S7tleI+XXT>y^m8%=#mWivGwW{|DVr}s^E0#=7Z>I!O-ZA1 zQjsVqG$7JF&_l9~lFs^lWyo>de7ua=^>Na`fX>8r_mf7Dh$hqjS>8sI>X91JV6bu0 zY{ltsDzp4aTXT6{NcD{CE|rEv21!J#sm$hkMY_(~y`wVA-vd%M?_%3>?I)A6awusP zQZG_wcboV$)uMkJaefRi=JJ?G%KY;63Ggrq^b{?oGMm>v(m=Oy68DgBA3qOwaj*xi zu@G`yG`j`Y9{a<%Kp$2ude@%gKO|-A;j&B*lCtqSCDYGj&*oPeDf2T#>gVG|_U_(d zKVMR;YrRffK6j8Z{|ZPMXCv9MI4+rR<9C>p^|zgr#hF0L+RrlO+WC<(yDU;R&XHn& zKjv>-7cM`GNZIvKW?cLJGW|))=D#F3I55~q5^>0!vp-0AtWNdzT{*QTW&J%OW%-^= zJmy~)89$8rW&Zu{#`W`%ycA`gjMs2BO~PjifY@_Taa?~~G25PgZ1jo%TO?j&XY9kJrB52iBnXPlIFB(hJW zGRxak(k7%AdU5`Zr7|t0=%c+wqQ;~tq|C1kq%6)zv7euhG(?ndAriHw@<~!7(s)u@ zGSQJT9Y9J`Dq2^j-zZKR!swf%terH>E0D!;w!h3zQZ^p;wwx{}W&ZUgW&OGZ2Ku>) zr4o-o|IiR0Kk4ED+;!xW){9ZNw>Sjzla)h)B@%y+03#1^2;EhRZU-W&FY5OtjSu4v zBW*}(W5@9b|kGyO83LS@Boo$h6k6=CuCQP>dlFxOR6JNHBvTTB+{ZZiq4GX`fo^+s}0p3 zA!YM?ls7kC=A_Jz`99ozMoh}u8B;x*r@<1haZ;M3b*RkxQ6pu3B@mak#^~{+#-z5S zZ2S#n^#x-@qE=MCN6O~IVN#aAg`_O6-lQyUOVXC4x};4>zl`SWPLZ;4SwqUWk)&+h z4whXvAZ7g)x^n#6q%6-Kqd31(sLcA0Af+uP+KH6e8<3ii{&nH{yGzRY-zO_iBW3;C zk+OEiqtrle+r>X&JYFY?qZ? zs9c@uUy;@#W#{Gb)PJxfRO;gyDe~|ME&};@1q23@XHvf+H$*RJ($uH+cUN%t&-0{= zzjh_JPc0&4<20R=@ejzZ-(SV8gX^TsZ}O842qIAmU1#kYuIBue_y>mgxCaI#Qa#J( za+&6?;pW{XQnrs^U)@G!Ju2&yGR|UBEmDhhoIg8B*?x$9bP8RsOXaKtE{^l08dTm# z%Jx?Wy3YLHLS@GD_XrL4qr3!CJ&SWJDa%)r4P5)avi71RZaO*DL&Wx1x z*P4|1zivCXAIv0Wd6ts0e%we|o?ma};<``D@-&R0G{DExN8%w`vWN3KBsehCi}FE> zx@aKW#6Es3E)NOaz)9!Pykhp_LnWaszpy_;^PBl;LUl|H4{-Z#kdePQi0b}OnZ@OL zkju+ZQs%EDOkBj*KE(B3f!Z~t`p5e@Jx;1e)|_G*T8{t5e+dx}=PsN2*P#O3LO(+-c6=pVYoOm7Aa8`0hSN zwABTQf&!%>bY>FeQ9WxPAPxxhp$Mps{U|zqmYe^{7r6Upr;A*iGpWq-=0)0=bO0&y zvps1e()y&#kAm}@K9lK1QZ_$#$#kVmr;xIIuDQa+p?;N{pX5i;f!0fQ-Cm|$WNLkm z^V>bpFEE(=ZX&C%LRz1Ar>=8(s&<3peWv!T{*g>oZ*t>wURK^M)3v1R9M$I*$Db`L z2g`H}DO;EJq-;K#lCu1^mg#=V8ynAYG=3}(@9%Ib$>jRKM`bo%u6Mbz4Jqr-gp|#r z=A>+WTBmW`2KTvn^Y%lagd~`rLukRfOG2rh&EK)4%&%s$erl4|r*h+L&i)tq z$NarUWyU#6%IrJ>LyX+%JRcBPB%<`kT)j72)bznQ{?9(n?ug7T`w17{E8?>Jj*`Xy z=qVTHHBy$BlQQ*@ii3m2k)kvzv;2EgtbxIiqA58X=eCT~;W>AGDJkZ2dGOW%=#$j`P>-HFw=#;_u0Z_yg6m_7$m}Ch4L)Zhd2aok?XD zS5!VXF9S(gJZ>`mKs=V$M>19W!1;bS|PYvwKI%*1=+#|1(ILUm4#yKf-0@aWWl4 z%KW?jgHywwT%7bA84^lc4$gxf5^g^)x?j_gL+tJ@38EK?Gk}_Ti31|(J+-@ckWsKCgj{(1m+Ox!vHNcjJ#tD#nkp(q^Pv(c zv;QJe;qI@pd|;iuqI#CkEK=t8B2wlTt#A((-wrCXd`jpQxlgb(1bOXLiEEF%BA>AL zkVxrB5GnE`Z@h`a?Na1lh}es9ugUrg4G8j~*JYy9vhqP$e;Z_~t)^0xFMm?zU$8jb z$Su$#lD%Z3*NLK*>YRV$S+eP~j>@c^Ruz?^{i_No+sEHhJ)8eONLfBs5np~BVykj- z`%6N+13jc7_dpsC@=Hoz5U}@yhpTZMz3LpdE-B-MhO)b=NVJ`7vxbi zKW^3F>cibash0NXn%uawCuQrdel6~LpzOLg`&NM7NaDIdZLUAG!~6OARL|nXK50li zHcl6)Kc+`W*|?^XvUcqL!1_vQo1yBA#+J(HF1k}^AgGW4gt9QGDe&;0WW3@I|W z-;nFCvli#)IV#tq>oZAN|NBVmk|vR|alEF@E-CuJ^8UG$B%TJK3T;G7Z?l1PG?>&5i*?l)CI4}s$aqN4PNO5og&gWDg5aiGH zT_blkGB^ji1x6GNd`vUW@5iKUKfO)L`kN$EDJfeI<49RNVwsMRX;5eoyFG|H;*|Bk5P0Ge`9x0n|w96IkUz4cJ#&JL! z&JOn#yuX*yb>?r;I|H8y63UG~+rLk?u6o^KaKZ!Ot^_wlDU1f){R5Az>+7)Ni9saoVo z^=!PcKVu(0(1D8==L7!tUbvswkv*G#Cp&TN>zQ!l6-55hH2EKY;U~tW3)!=AHzH;E zt7OW>D-H25qAx~i-wU7@mSRy;*>x?M#&=OEI=}QJWp**7nxr__dsA7D%Kb^%^Gz+8 z-B)wY&&pJ0^D12I6Jit?AQDIT1hOqVID+l2G+*hh2m7MNkKO*L%%8VEx^W!LTmCr@ z^BD6N-$(H0G2MSycl2E9SEREoxcFO{kU;EOJx>U zFsT;l4XUqCx`mY4{gIV7)Ahzwo=3{gu_I;eU&*dpQJFojv?gW!*OTcAy3Y3LuB0r^ zW#k9TLx3IU2kgN`|BLK79{Pp<;O!d1#kY=>@h6e$lOi4om6<>Ab0C#jd|hSj8xfzy zF^v4sCN*(XDSFSlk;=@^zNBm%dQ(=}^)ACzir&|1kh1p+-<-I7JS1h;r9L4N_ND^g zV^28%*CS-g_ES2;i^S5R*DxYqs%P_PEGgqva^v{6GL0o=;}H^ULUfwD)Q-hTu@^mO zVZFa~=koiMlwF_c!P(`Iviyh1bh3nNCuZNG`TB&=sWybZe+wobisDH0liZCwaP5C za;cWHsK`(*hU$tahVYjMjfO_0~C^$`y@IHjg=-^7c}nH(%|S)wFzQ zYjr=Sd7*`KOcm!w=l4f+E_|zXVR4m5Gk2v}8eE?|W4-;`TZa9;o~+Cnf8mYE_Rw9~ z?-siH`&8x}E&2Z3vQt3^*;L{K83rtFG0W95Zm`;P>k{kGc@$BAsJXxG%X`RDs{=KZBej#vEvP_TlyG zh0k-liNzN?+EwYa#C^ia_{2%G+rMhvaN)Y}<)?o-{M_bURl09UwUG@QR1lq*v_@O2 zOYNp@M+~|n89qOxdfTYj)I(lhS|2&&S>>R9{q|bpfA#U5n>1?q@5JPs#0=?zB>y2* z3csy8)@Oe2T+f3e%9X-v%gs9r zw~p>%8u3xbF?Ese+A+<4oxZi^K()JzI(*8u7+oR#_IvfmtIbWT7H)e`_%mYq#~j0T zS~FcPjGa2L>f3#5j^BOwGHJEHooV%H(m^r0+6iw`j_5UR@h0QS^m>ElTHSnndad)O zNXP1LW=cj*=(lc1w%@O@j>-4m#;k0*WXqM0{q0=0Rqr`{tNHSvp<163vO5onbk&aU z-gn#Itvb7{YaJ*os8#WI^F{Mo?=muW)~RN+b6O4kZl{_o(sUIcI=s5+&^ehq8;`K9 zTH)^a=#^F-+q~W~w^n9m<)BseyQ)rGmS#G!VYgpCvxj-czPgvK6?(B1B!}M+Dr`HcZy0LEkgcswd_I;5&qYo|7g zn4U7M!_wWE4=%*jFEr?LJoVPXdlN?19#ywS_>!rEwthdVId7z=gVU&fp|=eeWDi`r zH-1g?hz8Y~XlI|$8+l2p;pf~fCAWQVpL!bG2KAImyBb#e^4>AWZ*{jg$%KAZInJX# zcEJ81F?0F8>9*5`lg~S;u1|K4Y%>l zdRSJgWp-o4w(I@BB)sTna_?70=WxA+>-RYRnRLyuYp|}PWl~oD-H$GZD{ei$^=0T) z%gl4zS0%d4Y49b&WbMl5FTx%?oHzgYlvM>!twxP8`BnYs@a4Nl?|gXVoxZfKws+?- zo7%O_TRtJHN$tz-Mv=B@f1hN#JaK$EctXWNj&TPby?Gh)(0KW(ZviW&X;j_RG<$za zE%%|xiSK^6JsML_-6TbS#D-rp|2E65uBTOPnqkKW`+avbh@8A>w(63WS>3X-OqLj$ z4jX=TdgE8krHA({wm&sOSG(H<_jT30fB2YeyS|}*y_W-9#@L)RJiE!EMWb<*d@f$8 z9CUN+u6;inKZuQ9cTltc3#S@On&phuw(qjmsoIr=(?upvwJ)99xbMuJw7ZLJa$m1r z?a=P@KugWKTc4RP+ob)&KX2;*gSpoBj`o8VEIn4MSKq8!J@U-Dg>GszvC@XGx#K3z zs?yaoA$O>)Meg&Vx&5B`^=W7HXi+|nZ0xL{SU@=iQ02aq86d(1UPCuOgk3%c+=^`7t2OYk7(TU_YNbKU8)BL zZ9E%QvC5;EsK2*TYTa$FGbMNBvA>z^94fqyv*-F@cN|)M8Z=7)`bo|*~eEa@n z*F)>=UOcbA*dXoE?297`nl|nJ8TmYzHDq|^&;6E|pO0p!u3sIxC$O>icHLHYjJ{`V z+A?|Ul)k$2t6r&ESb0P1-kGQ4o*!?Rs_9ibdvI&p1FtS*uLyS3H}w6!-^AjR_3TOM z4$<9C&VH1fum5Jv+~oH)t2}XNoPWgCrpm6osV9<~W!jBCu5~3~lS`-RbJAA*y`FBa za{i{|{?8%z#V5L4?!5W?z(wynJa6iq7Iwe=^{}bC16y6L{536p=E{`lRvJgle?%=a z8?WXc_cVCeyC1Xvm^x0pY_@Oa*ZjNVca6DoLPgJcQI&p!R(|`^;rORhubMsRTBT)& znDw(PMira^=`WQ=ee5$V~+L+ zdgv3^w`Sfu<0^FqSLiLcq z=d-MP-JNb7cf9)b>YGlTdp9b4!@IBozYc$Q1TOElX2DSV-;ZWL>C$Gd?E&|>x{mt~ z92syi{Mh1Kkz
EsW?MgW0Alfr$tJ%4JLv6NYh;N;nB8oVs`6_eEtD^_5#7@}xdF0ZE7Mn*s{VQ2F z>)3=1_CL+@lkOWtOqkbwq-VIgS%JuC+s}9XKJLgqR7o^O^rG+K)bD1WPhMG&QS;zl z)khaR`e-|!eW2rYGN*Ck&H)qec<4;_+p=ePuhhbj`c8Fxs!#1=WI4LyF4I|AT`sk( zbEoU~!LIRdhfP2CeTZwr$yw^pnnpacs&jm$d;cp#hPZsLGj#bD?ZiWR25sEbYQ#xa zhO}FuGD+j*{Ii>1{VcH7_Uth#Q&MG4zv}%(-uY{$TTM6WGWMGGs=^&-7jJgDxGQ(_ z#1B(qsy&@vDf~^JX8|4OKdPQma6O{+nYwHD9dWi=axymQ_lfC2^UgkgvdTe7n_Nm+s%C#j`^b4}W#r zr19}$ntN~KGZ!q(W5y16WA-S2*Ww`qE7dtWs_M$|wOeN;tZMGuT61Ce0k;|#UDA8? zIe2bYY;4x7e0BFLP3F#Xj5g1*(zM()VQcKd`}1o3Oxj+dLaqEePN%ZZEp^(gVw0?r zetPMl9b&6Wk6k0TNq^11XO`=KX3dCKLoyu4zWe(tR{ZUR#=XjiPrqu?+~*IKAbL*^{trr;Nc4c^(bl z8T@h6pR#|zhtYsU7MZP^5TN1nhh%4i5NcQ_8`|!7oXNy{kB2F$G5#SliQxkeRlo!nYH(?wulP* zePNe%+^Pt1RepRYo`v;@H@CaJ@ZQ)dx&eQ0UwwWwXw|~6k300-Xc#rUj`o*Lb=Ou{ z;u*Vc){$OY{?yzQKEv~+v3+Rgs_{=B%uvhebiD1F2i+VS+Fq$X==P|z_pRo6EZd#_ z;Ns)iYOU4{O4_rzTN9hn6PDNx2zzFGtG(R<*ILc`4C}ePt&8-`*{qD^@4ep+J$Lb* zWYf63_$nH$Bnz(2Zk94`f~Wrb%lcZDy660Dnl;g`_h)Zat-Z|~XwF~bzTK;vdTLbQ zO!MYX3u^so{Ve*-lf>YJF`smTQ}Ud9@QK&z(}$_r}YMJs(^?7PDqwy?~7Cua_EbzApKaxa95Uf?ghPXAS+Z zY8Lj@MWd!YJA0||6sJK|16z*XEx8+&;HS6F%cjo?@y3t!T((WO|6Tj%kalOVk9xV) zcDwv)!jX_8b&fk`JSr^E_}#X}tlzo$Jv(2FP)!r>ee~gOlFEv>eJdQ6pV@!8o$+n` zeW?$E*XQ0m+Ge-&m)}(q!vg-Uo%TUhZG7yJ9^1t0Cz=%awq0wL*<-Mdt=kYY`$OyY zY2O**MbpH`&_erH!V;yzeH{V)eUSJK21O<09{` zYOPMiJsbFJx#{K3YHO}^Oq%Tx*M_;7=2$iF`=na#7>9{Hsy{V6m6EKd zAL?g!YVWYjbhkAhJ`HzTwPEp#IWr5+tn?Y&>d=Joue_b!CB=`{7;(38*1nmI0^6wf z8LA1I1pWbE-?>nv54HYjq8TkEZy%5hEEeBq^(EdWbCUI4J zt3PoY^dNn{?lZ#&2}VtBEpE`tZswn58~a|1%B;Qn&j!=RIKSY0g6B(|XY?{v4z2op zclODR(e;D;UE00rt^RHF*_sm@Hnw&)nA$3>U9RKrXMGK9duR+DXgYI8;)6HULtY-d z9k{~q)!pDL`a0dl{hSr|FnVR(uV3ypw>eh``x`UNbEN56x726Feys39^h|6uF65J4 ztzlatsD9HrY_twqj7<2 z)y#hCZyNoYIaEDr$?Bm77c;ld8Ms}`N+%@Nbl`+G#tH9@n`#`3Pq=&Io!Z*Pmzz$1 zxxu*mY02xk4o-%H^b^nYd|1!sOpp3@!FIzp)LeBabionJh6xkn7Hk>T@s7@khYtJB zZ2Z%6$i;)+D`}o?)p>Yx%*=PGJ=SZaIkwcV@o~e?%DSso7+#Qs)^#`?6jZZ*cK1$& zdr~Vez1^Yjyq=>!h5hQ4u>He=c7G@iM z4X^lVeB*+sJ=$AWZEBtO{iSE_q`KWZ?mysn>rZ@_DQz9vwTX|I=s99ilwFhf3QtVx z?t8Ve^Pnde%xbLN_9j|t_PE_?tBTbM#=YBF(?xvs(z}7`Q`_803clgH$7PItlV%2| zGUpAR;IL3SEIp;wtE<1>EZAlA*l)z>i_cDtPM(w4w6)y^i^7W+Y;WCdBzd&n#ld(N|0b${q|fB9?fKo=iN>vm@OYCF6>7D^(!w4S;xE@bzaK?X~` zj&+#7efOtG%l6}Tv^w2ttofeHc6W>iTL*tTvoqYfu1fET8#-m$B_#js;$UDqB zx>d6DiRPDe5jsBCpT>;-^tO}raILL* zUAO9u^VaL9>T|fxiK92pAFy8)bi3b~^DZ`DO(s2*rb?Tpsc*`zUR^XkJ?-Ot`}g^q z&rQ0OI@R~;^>0SIq6fcx6h5h=ag$T^DjM`VF?!`h%{IX`nt5D*y(Ff~(LT*5x_mWG zRjbs0(!qt@GhRoCY&%vTkrlQ07Gt!u8VeDnjc>)!Q^PC zh%IH6z<-xGbmaNZ_8!hh_xm^ca?S8|a>B9*B&QKT=%bPnjBOAs)_X8mj}!8w>906UiDgJZJgti{Fr-_{XDXr)b5@yHIy+s(p|A3L2jursjXhy6JJI zTh}PJ3!BqB>l!?5dZLQKp;0Ppv-*Bd2$CLHIMt$pzJ=iy*SP$t@jG5?jeR(;S(j<2 zw(kyDWIe&5@2-o!>KPhUqAI(t=`lY!0QYs=|8XDQ9QkL-^)7b#YmS*}&-`XPuuZ>( z%X9{qe)N6t`QE%gUW>l<@4ChMO1Jr|-$$Qb7kp%|R_d%KHymPIoqB9vTj_O+#IzyL z_5CE@_EdhYe|b>V>btA_U7RpBrtWZNfo*LbLNQ)BC>A#>`yNExs1 zoY!NylWVt0BS-3v{jyXi$nn~USHpv+B(GTaPE~KLRoL*3x(lN0F5Q$KFT69fdzE8D zeNI;>ycIimvS0ec-FvrNYCc}o^|<<^s&9tt_Dr1r>$3mC?@9Kb`fh1E{DDK=w|859 z%ziIz@ZmtFUEj^Qi=LVc@0v1ZK^>Kqsjj`7R$ICDZO!a&#=cwc+_qVH>{g8_Hf{2+ z3}53b9jPyF_S5~`!?ZIys~3#;*id)vjbS&I-09UIcy=T8pOg&KH*Uv@*^T0xYyNmLDDGI7oT~G8hFiRsobZb^e%k2Nml?h)A8{Tu zS-8tO-OMj2xc2b_pMJW;-aet$`_<2b%Ys#XU%s}C{lR~3Kd+&!o4$P8uxmHkoH%M_ zdaCx5ERWk4=f@oB@a$=AYxSP6>-nMfqE>TFHg37l`OKihFa1^8sM{<~sCn&S(>(j@ z<_X7lFPn3{edCF(UZuQn2-p*+k(9A2GGW|JAFmU0T^sdmclcoJv<5TtW3qeK+O;`k z!S%Tw^Y=UXJY1J=&}5~SuEEfGKSF=baLiqj*4eg4yxG|y2Sz%qk17z)^;Ws={bWyr z)agdH=lYB{4s86Wm({~ZLw;?wdl2?3Am~`@HR){*SVZpbihN+5&9GMw=srDe)S9Ta zsxMA|f4XnWvkA4j?EGSS<#pH1J751X>m%9VR4Bd?F{{&lf%dm=`JYLe+%x;$5RAjbFPY|3Qi4W2zfmW4r|FoyrMEUd z@8FQ9S`hK^!KWV?wd{Wk()2wwn+EQw!d=V$(gve>+UrkHe>9tR{pr2(XDT{l@pWg(GKtD_s?E`uuovj zChU_}Ykxlcte3dc_mKv@v~O7rp5x_P(d=)XpN(4#UpQQx_rB}jS@ly?A61xeT;qvG z9nGH+ualNFDg4~Y;6rj&?`8L&;Xc!C|4gHt4?%UbGgnOby2>o|f%)PkHJ*0)p)v2l zGsnwklb=;-d%)kX&F71gmjvxqe;VfUV)(l-r-_X;)}+38vi_LuE^nQ`>BDc{e}CfP z^i8_CvGzM|gy-GW>TK&NZ7|ANoFDgS+5RE3UbcsQrln=`20@E<&vyy?aJ%7g_gY$c z#+_FUH)~&ULC9i1@yZ(G7xvQ5ng8QRK}wyTCL6u3zyH(M(e<0pI*l5^HD}M-|JP)^ zolVNy+Gn+c?tZn<>aF8+cU|(`Hk!DbvKp>a^8q;ub0!`%Xx+ z_*D4X;LG{6zB^~y+8hhf zT>2;Ut;zM=@FS*Uay4gooxyY5$VsYhJx6)D;CwzfU$bD>lhLz$b`%ai(tJ)!oC9@p zp1!GiIe6h8Kb2iU2E89_5A3kdFW-ILJC9M0kGh}et@_}1AOBrfb{#Q4-djBWNNdMi z@0v{rtUdB%-ELpU3|x}Yp?h3mg)7TMA8ZR#CN|pAVqU_8PMvn&3G9?2>Z{dw@9U-= zV{#qdUAmWG7~QtbOoq5@ur)m8m9eou|; z^%Xny9;?6lQj?+mKdKKs8TH&JGFE^6;;wUUI%|%1HpYDg@9!P&KW$UD$$$w4(#1`C zxb)b2s9uNXqsHux+>kq=O^D0q*~5EGo9}vPz$J|bRcp2D=<8hbrB6-mv?0=dQT5il zjefe>X-I~hxc0vDcbj%sn;AKK)>qfT^Z!UMwQjfB;>63DZj)l{3M%b8sZ$+xXb*e7 z-PGZ28f;2)_1rwdT9p5Msp^J?BezV7-G2#rn6ox>cqOOmC$^jS6x&|gp@#h#`|y`9 zw^aLd?EV?&1OE43xSxz~n)G7!aNU~iwJp=e+*|7CI7?h}-2T1Oul%{Y`GEm_I=9+0 zrq|pE(Ibz=d)+2iYPa-OZpC9K|L!pRcr;=|n@L~Ozr5(Zeott1vt55;&tHuDzPxQc z)w%7v$Dd6+s@LYzt!_gbH;<@O(Pb-t-i|zHI`pmW&v%%&{Bs`WG3GD6kKoVa6WUK- zJhM!%qrZLK_;-gyl^V@ADbzhUs8Rj_yUKI!N4-)Vern3Q%i}fr#J%-4)%)GEYi5?` z!Z!^cZg^`jZ0YkYEt*U=yzAVv!=e=@6~aBopRZ;r+Pr(J(y`BMCY)HA<6$=5WJ7@EvFDTW zw|$E1eoeIF%%(PL4_(aZdDfz4e%7k6!vp_b4(_WmcCoRRTh%tda$hW~+$%lh_07-` z%N_PV?vdB@iA&YZv6>s7Tz~a=t54#cktQ>3vNJc`G5>hNvgP6aVfvcqY|b3i+0*^^ z_=Bcx3jB2+f0~fC)9{+3DB(+;N7@TQqx|0m&&dz-Y2?|X!k`Xgu4`@Gd-0OisruEH zsN9({2=?Hj|F|KUTQ)wO(-r-~fAE@&va}ex_hqxtK{=iMFErWx)!Fd2==S3Ah{ria zH)&pcxE1`=UVgo4X#4_e|KSe`u1wyalNY;d+nXxc!5u4Hwn-gmT>HH7?0&;N>s|es z6gU|n9rbqBmQlH@m(Q~ApE=;^&*-G+poD&Xx<_ta zY%;u3q?g$1LO=J~i~mGvcKI{KYmHv*8|@1{hYodrP`~?w!qopCpx_+ zv0KLi!&z6lt=ha};?OYd>`R3`OcR@~%+Wn<78$4?xTnX(ag!4sd?=jSP3_)c(*(QN zZ^?;=bt_J*qjh#=!|P_58(U}33+>;^wyWpUdvR$qdL8ZTeD?0|rkx+fdH%X;YOoUP zec|C6uU01|)>#zS&-+uOZS87Wu6WyMqQeLW_nMh)){Z`4AKp5l^NrL(jflyOnk7D2 zdv%ATW0KLaxerITAG)W_p#|o@ckK?S>3_!QoO7P!(kWfPb&uAB);}cKa{KFoU&ezH z(=XnZJoRedb4%AaPgm<3OLOy9F7y5FS3z1ic9Q$5t`YbiY;C^T5f#U`Em42`x98!o zV+koe&)ywxSk4r{5a^67`i)QHr8{XL8JpII6PtMZW}0KP&1l zI9KV1zQn00`UO#??@{2fj=TOk!UD!kY5V3=mRYc2F_68*b)cvfQRdfa@G=OKnZcN-=kCH zgZ^F-XE1Rv|6q&jC<`gtS<`^Cd5ALN60+mh!)~68gS?_%Q6Ab~B#tHdgMA12hVuL8 zm%-7aUuI++_@k&F;DHlJoOZ;)x}e{UFZw9T1LrJp*mx;w2S1?TXwolx+Ytw4{&kdv z6n5^!=}R2s6@H;CWRH4qwi1WkPhkfR+Lfl@JS9#^^H5P9I8A7yVR6y&DE3iwKLbZX z9Ckl#B%>%hkHEP|oZiI2{6Rd>VosJ&0H+51vM|dt)S5B9u;(k^j$a1nGjZhar>N(*7b>HD8ycWqd2nVBM}A)|Yko3`GrAn& zGNC^_$=)OJ_bu$NSVuyN^%Y1Qw$I~Sfb#}a$R73JoR;}RkIh9NoWuG4!H%!s6cUH+ zW3Z#+kWwFTEOd&m_p)+UloKbPI8NmdS8v_o>#MABEhCQnJS;2c6LHETE}O>1_rtRK zvz9pW>$I$#{BrWgnqGj)pP$R>&qCsu(fq+;!1_@39CeO3Y~SE>u>Mgmq*z}ndLofC zabSmfx{WCGLHlUpu;&!M5#9C``has$k9&Scez6ZCPo=@YX`;_P57OgG(FgZsWjP~> zV@+}4JO+EHqW-KQjwNwm2VQCRxQ@8K5T~o0Ke(=_f@5sJo$FA>^CkQ%jR(7N#9{Lg z?`L6$>nIB;+U+C``yS-Ka-PckL4R~CFZ!S#)C(!v=`=0AKVy9$PeS&n2gi>%78Dom zqo_x_(iH8_5yz4^@B>cqz--OdLx&4nIDWg%tgN zA`Y8}@I$D*P(3*9n{)Y5l{G{?RLCCnXcs`7j&gCKUQz$hK9M->iG#eN9%b|^q-cMg zIP&N4$}$6byi@1{PU9BE=QHMyvT==WDH4s6%THN3CaubcquZK0A7b2*6#AM)p%3yi zi#RqE7dRLv?9-*ez`05sb|0kIKt&(aLlxzyx8a^sFh1}HWkop_#9`|TO5#^L*cI2H9r-I#m-jCoVFG(+BX^zTTV?i3e4 z4n@ZeoE^lmCJsLiWjXJO!`>%gUxwR!F6#LTe+=o+(w8_Wqa8m^)bkZ~zQkeocYgoM z#+4-FfQ$Z=lV_6QIbmGXLGt2ruAz#KpJjf6HMIM9{ z?b^^oZf}YU_Y2eu+41YqK9D%_=M6>k3m!O!iDNC7XIw{oC<`e#l}(C&PXv49OUNGe z;8+uf#f38L6^##e*~A%49N42DMHL+5&fIxb(f;{-aKebg#vOUVI^(w&DuZ*FIPAWR z`ye>r3fZF`oRzd`Fn|6l=RI-c@5^QN$C7^8M*bY7XgvJ5HV}ulvVVET`3G^My^x~a zE#j2Nd$t;MNMPfIynrv%KffOBeTic$7Z>Uko!@AmMjSTo*nb+yI#e{@;50I)zdKWo zgL5z9>P#uvCfo@>kM(&{6Rn9gNu40Mf(ag=$6ERA5djE&N7aoaq#_u zKWm6%Etem(Q`VoC#G(KFi%U^^^ap?R=p{)n;_&0bb+i{!v~wp8^9TD6@+@S>uLmcd zIM#9;%s)lr14oq>DO;x~qd$I}sOKx}tOzoy9Q@f#9JVgdKjPx|D^!L*kBP(bjPx%l5MV!$kaFq4Oybrg&5Et^S?6^-M4!d8# z4t_utjq4C`*mD8K2lh}!Iq!)RMjY(Ve7_XsNa&^$RSuk|#2Hr(oB{pHhm%H}$>rcr zC;C!`aqxbmw7l}KW8Uv3PEa{;^y!yL$|KM7h{N6=!arr>gWXNyu=57uMm@@U{I4GBO+!Khy@`E@qZYT@+fqL|x!}ACAXjht|eIq&~uz8665cN<+IS#~;e=bne z9(=T4AoB8L_Pn7bp?`CWIKb4v4+<*$iQ;kK zm$K)mPsAA`=MVCO_3@al*Q4tbH})LZb*TqEIu`%HA3sm-JpjsRg>{Rvkiu>Qapd=( zvhHKOyy)KyB)>6#%ew!ZCypg?kPqZpC=Px-;+pEs#f35y`R3d4%V__dIBXw7ncuFo zGVD@)xN`!^(9-O29qo0=8TLK_Wn5P_u4LlStNv)%mvvn{CyxB{yQ1q8{UQz>Uv8aN zm0dtR6zzo+?WPb%eqY7>!F3^f)T7-I;`mX1FrUl1E?N+Tjn{wWBoim795|YEGcAv} zrV=Nl9Q^r89GXJ^IX`3Q5MI*xS=n`QlsNLw1!W!gE`jCqT#!th@;J{opvgm9*}ptv zf5!U2{1;NJiz&n@k8%G@oLO@Ilr_(h|&o=eewL zWe~@$9LCEivV7L*O5(_`udJd#FNTr9%c|n{&}#h^RO4)1jowd2ji~neJ6=H zCEdT2eO}g@QhYxwYh3e)Bfm}&m$LW4@5G_d{_{KxrNt$mpR&ePXKMM(!_~wYAr}|& zqwIKnBF>BwIR6%ODL-JnhfOP=bLLAPr>?C3%BA>$%kal(dimt}OgVAvD9P*P@~jDm zW!jOh(-=lKUUNU}Nv+pitwE5|A8xX+teKKp7bI&7rN`BT<)@q#$Z%7GI( zTO?W{$3cFS-8ZVSL$4gCtZ~gFjs8tjH(t1|C=Z;u#4#fd?&qinuQWybQ^YYP4%%b>@$-)Bd<92kA(v;w zf%U;}FH{Dn8*$|QQ8qqs#uKN#+_I%V;Mh z4qF!}qn)Dj5q2pu4nGdeM{tD{oE+k?eU;C_bs>Ayqg{i=+#v!NieY zr&zC0^ed$3|1NRl=Z~`E22Qo5TwK`K5f`ot`GI=0>rWi{`Gf1q#x;jHY~KJE{y@PM zQrMj(4*Px?cBsdFOvoPfXy1Syn);OB5AucfLJE#IahN|SqrI}6&BU=RAujMrQ}q9h zIDJdtC_7%=mveu=AM#vJ<^aly`V&YTHh*9TEzKU+5mz#C*#5(hLs1?$kBDPJ9E=Zm zxQ>2>6z%G)DE{ZIgxU+$gVT#R?7V?8);s(XvPV7aa)~ooj)UupDmdL%7WW7C%KEd9 zI3wi73*!U@S4iPc^;O(+F7l$NJ-Fc55l8;H3D)y4mOuA<`v z9ynu&VM&X@H|b3}F>oVsg8qCn!{IT!ao zW&N2-9N%*A=N)mJBOWN~g%q4<;#iYE z{Q06RM>C0AU;mYpNE~*q!+Dj@6N(4*i0cD!*tqleA6!R!Aw@fbjm6*FATNAwX&g@( z2jdOCkR87s?Y9x9n_Pa-4qTLl6r2~tVb7<^<`-OWB+1-9k1`bFhxS5>_D6}s_Cw?s zsw}6@rs5p*i}M1?LJEH*#9`+sl#yTlzF!(Ao;dRJ5In>uWRH5ZuduoJzpsbu@C#)j z1;>Lp)^c&7y|VLp6LGqhz)^O*o)CxKcmC@Sj-xjc9O6*2C;h*Q$IE6bTl97~Fezn+wxhm*Gz|9i;cu(JLy3RIPJ+F!~+EnWg*3QEhLVmTwG|cY+P4~!^R!`V;-Rlu8_i? z+S|GNAj(4Rh3a8alt>d7gBKSh$H_#9QL>_WRH5Zn?{@-a^sHiR`$KtYvP2IkY`25AO5)P;qHUT zFY4iUX^Qsih+|3qpsc7L;KMGPI4sY6dyE^}3n@5t_i`NmeGk`#>`{+)eTmb)9Q+9* z4m;0-i+-@)P!>|y9U=~U{z86GkFte2qI%pc4@{&kdv6r2|ON}fNsE@Y2-v~wkn z{63F*v@1=~{v>f&eo#h!`SU=C2fLvMM50LIz#i?f?ok#}a59L)#+}a*vg6l-Q~e-! zUq&2?jyHJVj3bV9Iry`kIP87_E)@NhrfC0`IBb2PJ>ud&C*V3?!D)U-B(f}lgX?@d zei`jNi4#B^_)kP`(|%47=mRu_k{o z4-pUibP49+>?$e&l?2UN%&_26ix7yo`x(fsl` z_Qa7t&x5b5KWB+EqJ((}9{Lqhv}<>?_&EygmGx&LaR$rz1AELTaD^29WDrOGeu{b_ zJAOUd|0WLG=ivw1DeI5(vEt9UWgYi4;*|7U0Ds}1kfL3+<0a2$Av=COI75iT-m~%Z z!!PsgQ3huvaV*P$b63D0?2G7ENa0Vj6UE=RpdKn@k9xEVCeB!j3;UmrtbwxU%$qU} z<{kJ@8CFoxuH#AW_oH-WE#a4-A@2e>6Ntm!^Z!@Q3F4T`ad1vlbbY{|KBq*Yk;Fk6 zZi9!ikiu>qaqNl1?;m*=vPV5QYNtga#}YVvF6{UUjtg;mltX^D5yy%+=%A^{MRq`9&OS z@<&D1Blsu_I>KvjdzSlsTEqpdRvLiEnL-@)`z?qEe$-NubB8!=K7)g}YAVS&e}Vh+ zu;9QS1u-J@+wUTGPN>9-S6R+V;&{u&RaSrg633$ij-ouo<$j5~U-0vzEax z`Wf8!Abfw6&GV#k;@mGMPUp+q`}zMG*CGLqvg7qefTL`ldtKqq^ZdA!^=A)p*f|sX zAM7ztOY;lu>R&DS{XDKK%JCqM3HgJ4urxdVb@aE2IP7_cpC5jEp)xohcpTItPeS&n zM|+!VCHtc+Cy_YTa`{ozp6|~y;;=l!Kip3h%{%PsUoSZ>Tt~k`igp3S8CJr0;kuAL z>e22BaoBq#MdN@y6dbJ^+seb0tnmaVhE_IJ*Tnik|DisdbZk&gHKQ z#3vLF>cJU6obre(LB_%U!_PPR6;k-~nK(mBm_I^x{CaSP-s095{82P7;DNJ@I3@Xm z_|RTR!FegbQPeMR%x-hfx%_cg)}L9#v60I&=CQK=TqTaB97j=mQ4-D22)&oKaeN*FQl-mlF6ON5C>FIzrdMD9JWqTR@5H;!R{JyhRcl? z;;D*;r6@SkyCv@%rI`P_49Y&%O6UbNGYns25VS^CJ$spTZA}yR!G4ZNy>Uzk|!?3HgC~ z*j0JJ%|qBDPq>cuLW*|Fh+{+la{Aq7W2tN8c${PqEo zh!EqB=Aw|B5oagP)4=Pvf6c%dO&l}w2jheW7=M(76r2^rF)1M~WjR?g4(yO;^dsa4 z>d~&&LvEi(nSUK+A%&eiao9eO`@2wkp?YxU5QpU%?GPWXqh3hS?xc*vw?|pX9`)e- zBu;no2lqjYzq0eN^CRxh=Yo&%!a6~{kiwq{#9_~sDC7A;S%0n*$BsDYUq{xlvYgi0 z+k4^-^6mI#a5fN!t#^!%vhjiQhB)m0j{eKaY4Nn==L_)oaq!FVCzLpr&_oP|6N_CtPqp)xo(iNn?xzn!vqR?p$` z%(qiEE*s*o?;S8cI6v{Ze1B0!Tyu%T<{{sXUxpoD!MQ*jcE7;~ITMJ(#tZ%^>IeEmo(~eonmGJ= zluJ`^ei5gm97ox41E=jv?)l=s#x~VhmDuAPA#5aXfLGjXYw2F_v_ z4;cLq^oPHD+{6W34oIAvke@?;o`Iz6l?*FHVejDZ%|N9d# zACag3G2~T%V^19RT#5c`^4gVF1ZO&N#u5kR((L%xVV6T3_I?a;ATEp_-;Q4fr`NmU z_fynk{P=eKGTKikPPY=`(%>5il)*Vh9Jam?5ArQw_CM9&{3H&$e<2R&{}>2VfYT|D zdtZk#nk#w^f?XnU`pEf%`3wbDNWpnQ980XxUxq)&h|^y#F65^w z-$0-Yj@F0bfBzVoWBsEnq~MH}aWKx9$NYSi#z`VhPl^k6n8#W|hP-TyMS0*f{apOL4eX)d3Mn|w#F2jwfcDC+_c$4c zZ^xep;PVy!yd(~rKPdCtl~#tG`4?`y6rFc`E;!4H!{#B%XvZ(3p08+kUVy`IFH{ES zCvnQ-d9d?W?*0xg`c-!R1QLh6m*B5cJ{NqxqFpj^*m)IYMg0H|c8`d|<`3+Z9e;4z zf8*v4<}>OMC;Amqw2vZ=iJU+1OURC256&*)uyIHKSXYYjz^VA1d%i#!{eg?JkiyQE zIP&`j>}v=a^6J5fAxR$a263q zejb)}+%t$He;)(~^O4^_zYKr=5T`B0g)+ZgX=T{8`px-+_V5S!LcNfJ<4hd+^@aQ@ z%Sk0pdCZ^3#9`xw{-Hu~@aqv*qk@vhoqz7++oKH5aN<~%FkW@huoML+nK*3zU>+kb zTrUOlZy&oWiwky$2RubN#(#?MWALkHX#m-E^dC%|?sDS=jtSYOKe<0j)E9^?mF8V`1>iPKvyKZ?c!J~;1*!``=`tf(J+ zj``p6$w96$9n}=vu*7KO5NJZ31j)QX{;saku z;m-)-bdifoQ)YncLiVUfyOt^{#okBZyn%e7y^w+vMjZL~b!e~bc%2}Q4aLRJ2gVIt zA%#Ec6;z7-{Ya=6vg6mI{XpXMksB}grReyBvzR#6a&dtJ<@e7ogL8{GR&t!$vWB?M zx8s-5PNSkqv3>Rbv3KV2RDIw7Cn8e{B^i=RA}T3`kf}r>k`hvqG*BvKCNegf%9JJ* zDh-HA8Wasm0}&M^Dj{PeetU7&=W)8#=HDstqjyK_`6As$A{r&FvTqhj*^)t3dWmx?GF>(2=4Eg+@z}Z1%hPcoPov3%UQ6lSw#mJ;umEUVn=1Y6u68hm8He`hjxB4rcx7dVZkok&p39 z2?wsD(2vJ4tVcgH#kgR?pys#akBIhIFXwt?RkEg%OnZ&{R z)AJU_<@IM{K30T7&j;J#c%#iskrPiiu)j0*gVFAf^NMgZXdEG`0ge;1_UOla#&fdv ze%~DZc>EcKj(!w5I|)aV|cNFu^u_{T&zF+?h0c)+RPL= zo`mzO>z0A$g`7OXf$I%yhvS3WBeOivj~s69Utf=5Tz`rjGs1!UIJB`HKL16VnPR)c zghM}H;PVmeC$skGN6s^f!{|r5KSd57&(G%_%meEO%F!kqxUa-`92exFpPAzFTnT3e zjf4Bw?;d~d6Ao;LxIE0~cefuU-oE_;IoO}y<@gg0Y|qHSjvlRFc;3Kz#&(Q0#*OFy`F?Pq z{Xrgb90-SgeTehL7r4M?Z3&5DttF+So7LPcWXDV!N5c`u2CU zF&^_mo0(#}-Gl?%A+}>wX6@0Bocn|W*N1q#Kn~VpJTt|(A;W*ZPQZ8^C$yOyTD0|re%$W|%25;e`MMX|4YYr_ zTo1ybALsG7i1o;2rWlt;IB*_Bn^`j+YPjT$nhZ@1(FZijLYlK#&+ij2m1A2$GMwuGzkaK zGsx>N53I+0tVZ^o-*G*m9~I-7DaNG`4t(y3s4%r%B&ruA33iG2li9U z1LGKN^fM}Q#*AkD>G$~=zKjxz*{&PNzN;p_Q6#p2YBBzmXwEjRo>Jq=c4j*7TESQfM#li7K{asED;lOr?>-*nw zIthpV`8#rccl%Kq)3<+NKYn-p?{n)c$zLX`wi1541h< zv7Mr1U%wc~b)Y=t>?IsH?_j@hIgB>?85KF~WBblK*behx%#X1>+Q=~@94(R$w#WK` zDsrL-2i7~bL*78Q1LQoX@*s73*PkNCoNyo?d@h1I(EcGOgyP`%^tXJ*dgSB~4t(B?He+0W zHnwXd9C)sUc7N>{>#?2m_`ZCwU$|djJ!3mY8{;AfN0a1(`xE+qcbwY@$DD8m+KyR1 zh7_0LB^*84 z_+UPm-$3&zA{_eoU_Ph=<#5XVndb=>gri0JHPG>3%n$QENjPv`#&JO&+KlZOZRC^? zjwUUif6Eb`+_%5ua*&U9e~R&@gag-yjOW3D?)S(EB^>(o2IF~tp!qzY`o%b|cw8JP zhf}_9ec||GJ4PG*jEeo5O*r&^G3LeCj?qSr6U7;5KbUc@63(BvKkcA61Kq!w<)f_7 zxBdLremM~ij5DsEe>=`;g!8NWIL7>$*|@&y2?y>A{%bx`Q-1Cjv*j}LV?Gvy1O38$ zn8h>mBPZ$)ah?+n{l1dfa+&!tAKs}y?_a;$Kjdf;4*k9f{mhon=*Rf2gahB>!0Qc+ z!|!3B%}kMVig0uY2aluJFFYB|DYd_A6SomW{PowihbjZZ`h^_yGi%4_$M{!-Gly`{Mjp-!U~I=|W4lq)f1W2imNBp&8##*z2llVu z9bd#F$Cq$42?w`l+#j%i7|%?R^O$g8|H6Dwv7T9b^kbZu($Di(vHo}SF(({2e_?-+ zkG%dA}mZP zXn&B8oGikD?Faq1{s($ILJphC&)eZZ+v9SPqd_?EIV0`|r~~aEa{LJgj`P?bT+Z)u zvI&R&ePIy<4Nx(kFN6cnMREJV^D5T&hr>8=)t`?)3jH-?s7H<&;n1%W20AW?L(XoB zgX4_;f$}i^3gKvy@xko|+haX0mziQ5hg#qD2F9Tu?fw+w7Z47dzwrJ7{ip-w1Q8DG zU%1}?ZNKhN9L90}-F#T)^!1DJ_>6fCv|s9k1N$j%#{+GTe9U_Xl@DXTaKFcRW{R8) z!hz30(EhjIgZ@hOYoN<#%nO$&GqW*%8O6cz!Er`q)*k)HIY>CLJ)@0^ zas4UAKOr0o8V9$dfsPk)WHkEb*P;DyITeJn;t%9ATa%S#`5)k<5RN9{;QGPiS%2e; z^*A1%2?x$!$U((=jAy18=R3FWI)U-{!>k>nA2~II1IIDO{`~HGAE)*6=lBC{k9lD} zO9=;_YvF!@^*BywGgIX3BOI7l$v8e(&#XQAG42iF%qJX1|L^8AQ~T%dTVZ=tp<@>k<&mpEKZ7@%T4rt?^Pf3Fh91@BXk+aC@&L-c>XKmE5HXTpK`hyOL7Y{Ier1DsI{ z`kn*)*L)la$M6s2lR-FezWA^CbpN4z78vwhNB!4)k_ZQ`5C1Etn{eQ{&41+>8~&N~ z6-PL5o$z1tsUsXXZv0n{%ECXx2_hVwKakHu!hz30uwQt*!Q&&^%oLA5Tt|&Y zd}0X)?!W#kr=4)L{{ZKKSv1%j`RODpXNWr(KYMa4sm@A^mu`X0o>n%2nY6e2=#u>*4 z*FWn2X~^I}jw|87^(t1QA8p$W&JMN;O4B!sUU(L-yEF&=s2G2laNvFr?SH%8`B(h> zeSDnvh5f|kGE-cBI^n?Q)cCm!j`Ki|ugIBT)%RQr$9152V1CH)B%GBbALO7PZH#B8 z7+*m+aKDW0aGaU7WAr0ug7vSzmo!iwa@+|Aj;pvFe6EFde~O$s!hz?9*sp&(&N4QA zpYLFMT<`tmf%TY=J>h7Qd~iH4FI0?YrpQSm9N6Cn+K!QjoHD|hO3Mf1Fh8`JDRQQ+ z?Bn40VEjPG2|4kEGxrz$nuNf96gjU6NAnk)-_1wD_UH35_HUr$j`^4o4vaI}*o}d1 z*VxXVaI}8WFRVu{GsU>OgriP4*dO#WYscuv_@S%%_Aj&tdVPRAY-dJs2D*N*Jt}gJ z5e}R$uwPjJyX&i-aA195dsId)`WY4Tky!ond>h8N{%qt}5DuJoupcD1-txQooFg2V zZ-X5C{Z(AfK=b)VI65>A^7?C!^|(AWyT0*ZJl-(c*p5+=6HPeu>x6%sPZQzj(fWnU z!{wmOOfhcOnqPD9x`A1H^dl#XaOmTV^#fJpJRuzTJPz9pbbK)$Il}gR9JH}Ns2I;o zv7H0O!R;64lMFO3?D0e9*>zq0QKi(Z;x9it}I3U!&Ij`nqnQ{lt6>DGu6< zc@M;fIn(fhbtFJu@L453Uj+p=K3AYCtV?o^VS${qwK*xkRCW!t!*<3*yK#v|ihQD3pIv;E{7jZvln=E+Q}R8gA`D(9l#*vR|`qI#))3i%%A>X4!p@712lc@SrlphrSJWbi4(7zN)&r$wgDfBOms;4WsE>M0@4q|6gdYve= zyFt~1f_;-HY+nULVZ0tu{>MbgKb9wy77>N~o)d+3#YCZ>6_o!i<*yP#BZSNO_VxQeizE#MyV@N z=#M*9??w52D0>%W2T*npQRvrR%058Vhf^9!X*5+ILuouw*e;Jz_DQ1TAIm99&rq5| z=~<$X*9D@`pUad#gVHOM|0-o)r|ewHzD3!2l;#tK?dLINKc(~qQSy(agwj%?u-pnt zD~ZDL-&1xiQSy)F6XpLx*$tF_B?{}WiK=fU3cL=g{yU{VsCs~tKUoG5g*Xma7^UDJ zLTuo1QGQVH^H6?X%1>7q=iyYGAXN_v93e_aP&$&T2ZcXHC>s=(BTD%tC_gB0#t?<= zU;^c*E7VI9KeU&j>VKtBFH6;fLOVH1CsTg9!txX;KPdE5nX*Bl{VYmnQ+`lbjw+>d zC_gB~t5Y^8*cy}#3brO?(-rRJO({Pp{Ao_!U^y0)pRVAtr2M~9sIn$+usj+(Fr(z}ZQu8>Q|VbcoDDd*A_Z$;Uluv{CWupO?W?DbSVDAaEx3hkVULe*CC26?ytk15ryRzQu>(k7ZHW!KBxRID1Qm1r9`376_)pks;?jlA(i9}_*Gy~3idl< z1OEe2sQN_JgM$AHrHzy}Q`$xp+P717Cs8P%@Mkx9gZdt#uz$0YH&8C}23%fB`N2sF zD6|tK3i*$q{GhOY#VEf7rIJK}Gma=MXFO4elOqa+uE3KgeqN%piGr<46xyp(@dHs< zjs_J^SMY06eo)|Q69vBxodeB1%n&Lc7I8q0kllrc~S#N|zFaT)P{_}PDCD(`C{($TH)!t;2Bol`yeYpA<)lmnr*K3i)SK^>l^hU8Ve>5OT(tAoy z)2Mhws(v5}<293t2ZiT_+7w5J@`FOx^(p(mD2$^q#rc)O@oxpGhkjd8aiEZ=Em0VU z)s!C;;_Qe*e(NaRL=@t;5QPE??Y2_7o$~*a!gjus#DRKH@xM}7z9*>%^&$#+>>>(H zf+>Fp7^Hv#Zx7|)OZh<|--AS9d=687P~gT;_PADS5p38Db!a{^`P))EqQ}+sv`>Z zU%<(r;IF6rpkOyp+DQ5TNg@6#6$c9Ivx6wC|1Qc;SBU>X{Gi=b94ibiDRhPUL6jeK z6tPDWh3C6+lphq9qd*k4|LH`bzsgkouN1hmNIk3%6)FxC{HjEOr%u@#RQ<0M+Rvrx zf2B~bP1S<}Ux!j%O7*CEP^h0r>3pKlegRbv3iSq*8d83`LjO&OAJm+x2ZcYaDEprj z_|{Y$U11g45kHK}TB;rt;vI-Wo{p5gp3)6OA>N6q-%J$p+D;V8KPg;ykjGKV4+{1%D*hzp z|0f0hSt&_`K&PQRw#r%B~;^1r&}`wL~HQ6H!?1XG-gcLIDN;7orf?K-rCy zekBS86#Caf6xM4eW&a=w<1~mQ3FFEE$x;ejPGW-&q5Pm=b5S-ZESHBUeC9lwsu!i| zL1DQPlnn~;l9YcOP+cYN_SA|L8%W>=%*j0{*>+}3WcsP zZjrm`=bqm-T^3jMoC6!OX-3I!DM&!lWnQDQ%(>|ZIgFQ)403a;1W4VM3&D8$tg zh5SDeh2?yvw2mkgP>5@!?0-^N56vWwY-%i>R6JdQ|DE#F75rVq4|#M`+I#arY`Q`m zE4irv9YhqCHyCa*D245to7j-=P%4g}(qUBGuN2yipz1*(4`IrtD~y{s@x$^ZC>=w^ zfkL~nl+CE5s&~KnJ6{7v;_rM7hrVI>Y2F5GKaS)D+cnJ7fC37;%-{JMef!-hG8QmC z$&~(`uhBOy1DU5mhOBp92ORH)!9k2c!8M%ngTkKzqw#mX zh9d%OQ<-UyGCrH@NTv$r0)Zv5lWA(fSf2V3U9E8sR)a^>u3+~34|M>R`$ z*1@c}hV{-$dyeE7n~P;fx@oSPQ&{=_shx;f>%%8sM`j<*p>bg!#=>4drg6u*>#kjC z+R2wDRyTFtSli>4c`;g~GiC?WgrO4fVb9&?`jS?q|Lg8JbPo2A1Uh=f1 zbV97ag&{9A6%-!|&8|JS(`u2V!;`b)rk^4|P5!@efM-!y*j)~ADAiuPH)3b9-4_;# z&zmNE4P7o{v)owbR!P^b(HjmGvFQX4W;-rp6QaNL-oYDYFLK$`gIf-digfR+DmcB% zn8tItnl`^ z{ZeA$=|61zi!VGsYwB>&;O58dut#%7cv|0RPFlF`>b7v}QL}c3*E=`N_RJ5Zap7JF z3ww^<>XY+d)xHz>@^VS%Qy!B|zPtAq)%^(laYA5FPsFW7NsWnuHbr8aEdmWAwx3qj z9CAE=m8-$1$tTNAWje2iPN#8U?g$q4%of*q9WB!)PmE8kR}X(=R)1OEQ$QwX_Nhsp zt1Q2cE#-Vt^PN8??4_>tcS!-AV2ck??yp@Ztc-rdQWT}Zs!e`k=zrrtO>^o+vtJqh zy!?83;VnhmEz!;QDpDP%BSDe3OC5TJ0C3HX>loz1UHT zYU>I-XqZGJ{0>= zez*MhMG^BK>U0KmyHBYeuV1-#Xve+gu+20sd{+Vs`;53?$26NMS;e^_IYNq^_D7n; z=3A@XUKh_ZA$JFrx8E41zwA7x4-F_{dDb%y(a1_ z`E8E6a*S1Ozm$BvTBGI3IZ0Z+Fs}^@`{U^*9TSb`E4sMk*RFflHJ5vk)(yU_u-hcMKO1JF?00wDqR@FMY3d`Ns*(O;%pGGAv{5i^f;!nQWo(8zs2E!FNcpuy6LC z^TtZ@TKPWpJ*vm9E@^tD)Zi5obbi3ITrSf0s=l#<1{vEq^BR8vzk3LVVGIVGC>gq{!;xZ)kE^M z&fZ+C**rMiD5Ev(!3>=xwa+C@XB_F+z5lvaN650WNpdtU%=N{>UZyYKlT|hGxa6=d z-J%R}?NevhB&vJz+;+YgcTg-n-+$<%WbUwGs~4ze{y6qxkFRpF(8lUl4?C+BJ!Djj z6MZ+(xbPVu7Iyul^gE4P7OG_UmISQvdvN@{uAtXK@xv^elB_LCTsh)Co~&M##(id} z@}#fjM?O_e5jbYzy7#!-x{GW<0b{G}nrK`hgc4=H9_$)a-ThW7VtJij=!@~YCuV!y zk3KU+SI~ZWaG|`CahtN;uyrnBBd&(X`AhRUUmjoY`yyt?^LU<?r$zlnsnj3@A1uZrPhDB5UIaxwn35XbDJ|KFFQ0WIsnRJrTG#aJb*)3(5i1{N?^<|c z{JF--I$=Xco767g;PDwzn{^>kzT(KDJ>IkR#GUp{sWKXAu~i|J#ucV>SB}3izDUzl zw&NPl(QxD9SYzM3;l(W(1!ZByJ3ppKC0kxRc3gagg@#PlD0#U(2L<29>A(J#vP9|H zEhDKPM^2olap5}+SlBtgv0iyOd%-xt)Q&;l_;NOH9DYe{+NyP(OTy-MPpTd)xA=pH z+np`)KWZ1~3GnVtNsZ39rl2HazvI@W*vi|2`{6f4aK8{iC{cE$#~K=??bb6Y#~yBt zxMDXVagbs4@VPsR1FTuuTGp!cOv~Xuo4jARW!II%LemVyO``V7rzj^o84QiO8lx&- zkxk>$|NkX+s~;1W)gQP}S0(fyXV4MLkO`tOhaEpo@jg}G_$ATA=U+qNdDyqk(-ZZrtexG-lK3%j@5{x*NbwmClj!Z*ge&}v`7b0|@Z zYtdWYkN1^0I6jC@RZTOHoij(gaNf%DAI_`Pzl*Hnm6GH;eb)SuGOLnDC5e7mXhC0Ch9d7V6*zWab*Xz;Nc zQPZB)XpiMCaeq5}L*&d)?h67F5-&|YA3WxRMEvZH+s0WN(yvS4JJML#Yib@h_V5Zl z$zhY$;vapp?68Q?*Gp#xM-)aRWLF#HIE|QgUv9?k^Bl>8T?DReoDJn#0+H3K zXCkK`b$|izu_-7wBU3@>LPVIok z#N!s_|SX=($yI&U{k1^KSeuMP~H?4J6mUYD{ z%P$sj&bNo(e)9cTfaxm1%T278XX|g!9x}$>B(%^kdzdQ6FwLrc6LW($EJ`0fV~vVm zy0QEz(;cJe_gRzZ+_8@PN+tINPS7k)5+jK6WaJvql(eYjIhW-)mPC5zboGzHIC(+W5-R zxrcexOFM>b7}TttzIEE3A!kZUlxo5+cgsCB^?aPhvYsW{?^Mi}w5rgJEUPZErY`j! zBhLG>X8K3@ZO^3x4$KoRqH!nFxi8C|H`r9J)jH!A#aDFO@_6OKk8a#`_JNT@R^IzI z-`+ZMyOD=pY8~xadlpt{H_qZsc5t3& zHCLCvoW19aLb161>^J4NhJO8O9kfelqi5%uXKOqceP=6a_cff=B3`TYppl)%ol571 z>B#VKsRc^6vBp(NR#gs7wy*h;b~`pm@Qj^m_i^X9=Pq=pC1gLqu)L_DgjA`~YM>-wC(eR_xQ zIG4sj?{?kc;yHM3-m1@^=L8C6NHt$jQ8RUUYvU4ko0hL4otyeH_vEqWs~mfcrXE{V zu$ZrC&vUk0A!i2pU*ftGUaau(@u1f>4<4>Gee+JKX6(|!sUBhL+4M~`C2F}e#+~zS zJWJzFr*m1i8Q*;AkhwHjLB`qf_MNB^ZI?M#amvX#_f-k*T^*&Fp-r;aj z$%wNhmsCAsb);pucCO(QS&-sbxioF(C%2w0EfGbcTr*x5&ApP;^p=+I3_3UOUSL^4 zWqOWbn?>@_0{`0yC*8d|56`q4?)`4~jiNh6Tin<-MQ850XdJCkq`j}H{Hku3jA7X3 zcWnt}%O%q8kpBYdf7c~5>D*=W+mcr-*Lrqk*YQu)kFJX-j~t~I-y~s**G|=@vSs#%l^T1727kKaz`fBXpw=UQXE>YXa*67}uOc2!9MMxC^6kk39;i0PNe}X3@EY4^m#qok|kf!cs3O^`T{DYm_vTu&QLj&V+3w^%5Olt?<(A8( zl%O7a=b7sa73^6)@Kpthzj~8EzrRrZAC=^rdnWdL zhGn*Aary-3F%LN74var;N`L-4kjcr_KMDFZqq?{}p!m zlJvx~A+9rAwrlIK+Hc#I;E=lejrXHbbBeyc(oY$~`q}K6X;@j8podF~@H%J519Q{Z z*VnvHmG1T&ZW`U4s!ii+{EtfVomu&5@Sa7Sja_+0sogK<`n;85>ApAH=gAu<-w_9S zCgz_%pijQYSM22#<)8CIbx3RSnu&>TUaE`8Zw*n{B5TJ=<7(2mZ?75^N_ZG_ud(qH zloQF7TO)9#Xv)bKOIo;Aig0wL?!V`d8MtLK$Gh2j=jZp#e{u5sHP>rj*6($aZjCa0|9A&2UoASfg5!bQ6j$N7EMvD+J`G}DB9Wr< zA-9EFq{Gg_zc}yyTlc4PDs;;^+xU~M1#(sOrB<$6S)r!Av})E__Rl|dE!|J!YSX!< z3A?9-ZK;eHv|*-IZS47LFT5=*PHwHOTeq@(ky=A6{|CoMS#q3pmMs zaB#Tkp}M3lv1I9s=_6=d9XdDRtE~l&=e(@BA}{f--PL+4 zdauVU-CDEpc?Y*Swdbf^ll$noFmUKzg|%7P4}6#TIAzhex^%A4qS4%TS=y)e+vd6Y z?CDVTb8jx6pviw#Iy>CxpyQF~B({K=ySunzzMAmNE##Y$XmcRH&rM^`~!>{p*a+R0g8PQLk@_QSMH?L0I;*neA zFLt(2|6Tjoh&hY5o%TDbXFOHaSmqjyJCDxQd1^M6wP#|!Pmiffgb`m|$`-q#sy9Q+ zGOuXwZCMx_Q*N^T^0PTk^X9ybj1iJ=+8Go3(*IiQ;iXfzOiSTeZbCnA&Zl$tw;Wty zw99=-;k-wec`AlW?K$n&rq}W4evrqf#k+0@dyOi~*L(DNOmcT^&9(J+LrcedKXfbF zxmcxkVvF}{IT`wOwLYCYN10n*+lk}M%Tgo%>P(}#cfvXY7Ik%`@ay#vGelzJ{;IEq1PQyL3xSj(6hJx3b0_mlCyKOr_;(Nat=Zv|q6xd}8u6y^!MpE1x&JBtGOAcPlrt zFAMUkjCncSXxw>*z0q1Q|j;B%@JeBC=9k$ikjImUxUn!bqX0e#>X~7W9 z2#qPr^W7zcKhyFxqI0KD9~>!l^K{X6-Z@Ll9TL85+f|u3hZ&}v{-PW7dw-)C_lrez?g)?VCr%G>ZN0c^&vBcf znFoz}I%cX~O`9I1wRt?(Q{idVXQm2N1ebr5d%Kd&JAB_`t;03ub+wAsYdNJt%96Lz zud9ve+^>@gmR2o!njz{b;~#ABQe|!DOQR>ZZgO-aZE`ztQZ`ICbAj_4&+bhei|1~R zSbFNL)grYcqA5kEUQ9d2mp#?cfP6T{N@hR%5T*&8`%r%Uq1wS?V%ylIZ{~lvB#@%C zPH^4Ar$t+a-N|boD;l(*Mn3|bzSB(j@fpuYoA8)t|eE@IClDU zs|($|P(6)rcr>@8k#ec+VYa6=6I6u`e>x_oqEYf*`n0t1^DI7f9*WCOnE3nlfM+)p zh&qt0rAwR#+6wB5z34UXv zXPjL2O=oqX*S2I0u5;pLHt#r7ue+ZTHs0JECAsCkd3Bic=}r1=d^K~7(u?M95)@dv z#IUe$z4aY`E$Q4K?or(*Y?Zu6cMo%l^|-&UY=2eY%5%; znD>Zx$vk(z;x7&oWr|;4PcWBgy6xLIb=m$OyDs|&icC^y%MJOc9v8o7P`X4AMr1h_AA}-6TJ2mZ*7H)w~VgqN2HWeVBS!WN~=N{V|@Af@j+g@hn?g z%4V&0CD$}3X|Tv4#eHe*=^h<{+%&E=ojd#e_Ap+nV<&mVf_vhp*!X1zeGoe1>1Xrajm{Cf^qG( zo(*lMr*+Vu_pPLJUj=60-#l~7yO7La*|g7(TnkuFT4xo8S+e;oNz?W%XJ4|6OR8&H z^ST9t-lyzUZd|oFw`|DxQjT|Vp0TP=bv!oG^0lRNQx6Gh?G%dh+#t-axaj0!Q;*xP z^OCNni1>#}tj=5d&2Ce9cR-zG&iE&_Rvi-r%pXjcR9?PhnE28wn~iMuyIB0nT_46)M&6-SC+ei#$8S4>OM8|TFPFLH(hp|tQOCpt40Cp4Q5;YjEXW3ZTL1% zIatN<5Ld>;@GR_>?ixDxQjlkDiUFU_gfwkiMbG8uA8g;Cmy^=QlA$q4t$lu2<6U;e5i{@KZaw*E zdCDY{dY^}hL86-J;!y^t)7_K9eMix__H?e_jzyU{tA3Q-cJoVFoPbGEN7lZ*S9|S8;Awj^CFVTDse1?Tmeg3;GK`ojY2= z>x50-*XMT+q%XT05Y}_znDXHK2IJ(im6>j#^!<1potwPpZB%Ob`m+`pLlqh}pNo2V zZ?v+>eHrD;n@*~iM|V&6m;PGi{mS=Qv){N?$GlI;3%ibefW;f`m}S3)vKDGZIFqLkDp&BZr~_6y+vql#3DUKRt>k4u1~tl zCJY`^r@Sh5O3{UkpB>Z0pcs;q1&W#fG&b0{*f5U0-e=B3jdIxu#z{r;&isKxYl!sp(z4%p3ykyhl zhifH-qK7Fujv4kn=8gxyfnUrSyIWHun?)PP(72oE+`NoiW1_WejZ7Oe*>{T`t=rrH3DMC$;H_-!~81rZG|M{b#4S=kCUKua*+$S=G+Q|GjXwPJ3qGdA{#_ z;Y8=wUyOJl->$tPuKm98^QqDb<-#S4biXK$S-vFQwoGlg)v8dl1c`|WfphP9w1<{9 z3(KXpT)G!0``9K`E>yas0{(9n90zAQ_j;(i@f@>O2bB`<$^KUjRN6JKHn62lsfw`F zF>~eo&Ktj3cA?-#7SD00g=hA;Qe(OsS1deo?9lDTer=e3bE?q)hS&+Ux0AD@TC z%B=I7LlV0@zRvSoAX~gH>BOS#%Z*>fmOavab7$ko?$M`yJiF7zd#_$%RzZ}3l$@QV zxM@6pvn>7oZ3~^-Z5UQ^b4-Yb@S3dJmK6~qmA1_n{TjC#4`w|USyZ~g;6Q<`QOpms zk_B_vM|)VAYnwgWq?sBtDl}`256g=95%lMME_Ch(x>2nHR-m~|@ds@yxq?WIja$SIYkh&TbuH}d7B>ZW;x(KpRyYNuu@TQ)7Z z>rI|<&zQc$Wu*7W)cZ6p{9X?h_ThKj&PQF_q<-eAN8E+;cYfT89R2>SU6j?O38Tb5 zP8MzDl#)8KPpl}oV9zDBI{+*LW*g|=mA|IvfNLrIIFvgU(gHRQvLB;KzB#wZxurKd83}H!3vF zk(f|u-Z>^t`(2TP;nk&QPh1cdOuDj8ZG8s+&d8y5-iBslUzW7xySi?^3jaq6?iV}h zTo*3ZgB51n6E|glWjUT+x_Y72gqF2mbi5l5`})*a77Lt67+tm@%44PX)e9*VJyYx^ z8!ozk#kz=B+@R=O;T;o68rO}^U2f;ID?RbdrVsDN@Mi9ETPtKsjkfe9ylJc- zI|8?}JQUN<3`lu#F(#t5Ex~rjSbO2uMXhf;vUI#Neea~uxbAdrn8SywZH@*PR?qi3 zoqLb%L$YJZn{?eN+B?l0y{vS12u?FpViDysw5XX}vs(M;_C0cAGhLUC(lnjimX_l5 zSf-W6^`LVpXjY_`TYuDWVTNB2`Ui=Vb@8-3V-7CYlno#b5W{h!acHzq$-F=D1xL6wFE{UX#2$*uEiC=<*81Tcp~o>hE^L|{u#Lv`p>q$$oLYHq>gLiclaoOeP36O~ zC!Nl|=aaqXLfJgWx@s*0oBdnb6T%PPdf95K;UF_?`lT%0^kpNOG?a6EroYq}6G-Fw z(z$IjcQ&+Z9(m=Oa(eAf_RF_E%JSIq%^Jl!!(^;en_g?g1(VM%W?{2}xcp7Mhpe+u z*0dj;#a5|bEqEnBek7N9-~W}=cOLSib06rZO9zN7FwNbwZKGQ2)uJSG55Jym6e1#@zeI_?{Jvzj?TTtwS(&>F|~t{sKutx8!D%tYNjr!SLQx0(Vd+iu_WAwr@DssEvxmAVMcCB ztBuc?yGIRwWJ%}x)453kHgkGFRtd;H?~=on^zlX6LiF9+~tuZkO%#^)AZqEL${&(?1W` zP3KysKALPN>y_;-uT)ulUIJ!CR_YS^I2FSoq8;k?<$>qQ^pu zomF*Xws7&3i#?DSZq_o{g_dt1o%=nkWKy~NVwaranR}|NPKq0MAF`~8jNtD%v)Uoj zvQm0gu3y4pw`U)$BoAmz@AMigyFX`d`1#rflg>e39EX0KPvZvBx$%`Z+eI%0c8xE3 z%6YTS$NEQ%n*Dt9g&!y1%lRSbB3aVceq*uB8pLbNQS-Niiv%$i0Czb|8Oc}|2HDcagH~Rh-O6LZK zfArlsGNeSgahRcPs^H4JU@>!jb7#jZCbJucuL~P9X}m?iCl0TTi=y)PHJ#ZJFz;}@ zLjI^3$6q&nIQ`M!2YnuC7@fO(nCHVu3UzbC_kDdbSFB^54!g;xVRoLe%L+E?EGRrR zDY!Cwlwc}P>&(xucFO6r9R8-@a{76S0l%NiRgty3ztiWJ?4fgq$Xm|3p{f>ekYiZ6 zQKq%R-UJc#4?`^1?=lFIE(DO%DKAZqpLTs&zRuF$`h!%^ZU@7 zHS)CWVK1HQl%g<9Bdf>l*-1?+Q456=!5&k;YO&-h&GnFuQmni-fqSz-g<#Og@F^}y zm42Hy7hY25YG=DU!!dhSvi&%<_5d1pAD#O#;o*Aw$l(sD4msi1hFz@dk&9jRB=LLa z)`Zv2yMsc9m)~qFcqZ{-S#kNT#k}u*_upw-JR&ezNA~2bnvldOUi#-``{`T_&5LPI zp44Ama@&81R%y;Ou_d2V?vIeGzQA+WcDwmJw*b@m)l-j_t~oUIYr{1@>7$jJ_Z82) zk018raowi5TQ%%y`5vHik3Gq)TDoG~n8Vh$0+%~(T{ZdE&1w@nC%1`KqED8d-}C*H z^QH8oUY>?-EQfaTWo2-Ee>w6(=%f#erc_CHCaSi2(6|TbT%DJDk4}G|RJ2il#S^zS zje_;dZuS)2o3K`6N})6VJoZNqBUaY1>+!som@!6M@QAL2%gw6qjuGj~cT3kC=2$JU zhsF)3bGu_W?G7&4C;s634DC<+3w&H(#^=m>9dtGK>Wvl2Drnr~$;EbdYnjjwZu^sA z&mSM=+the-EXTg0N`48MOWxP)H)nllRLN%J3=~b8WzE0uM%vK@l{9W7o%^FO#XEp2 z%C?%PxMT2fr-z(_Z(JxXWi4B(`K`-k&EQvg2`#c;1!f%xw9Rik`DI7<(e=-k@hj{d zeXwRrz7JYC^+Sx@4o43@xE#>mFlPj2hICtV8TE5YAuBcOF=C%Xx7ya0tCbOaEXg~z7 zj~>hv`-2p4)32mI)47p|kePR7E{aLwWV?=XZ;zs@+(`N#h=( zbJvPZuD{--Q1iZBa7N+zl{+g&Nfc(qnAvCC7mZsczDCX5>iNsaHKEI%UQ|k)Y&Ke;9?;|vG8WRpD$9IILz14^t;^uUe z^BIeO;#rMD?a`*ElyehbG`oyfseG*CzIes4i1w$f>y>WM=ZVGq#69!Mf5m~ZZf03^ zT|t7<`FdC4uY8kyub3^YaeIp0>Knyo?NcQimav_>rrt1oe|`6pO`Y>E8@W%O!yTdY z+2Tsy|Ml2+zKErBllS{v7xBFKYOh3l$VIPv@wZHJy0;b|8||F>B%+~v3h#>cFS4%& zHQn%elk-NYYkEyt%wCRLRzqbaSJ-)e``k#so{Xb&AEkMwN@*@y{%Y?8Z6^mu8IwmV zudU2j#AhP5tbDgK|7N$D<(5_vgA%qLd!9Azn@?@Pv+9xY8LtLwP7boRix3c?t+#kO zS9kaz_5AN44PTvNxNRQ{7MEQoR9d&Md;4s&qDeW^HDV^(4Ay-!!~U=epL5M!p0@{v zM&JKov^+iwD$yR|N-oF}T{Y}$;Bc~b90PAW@=tq(Q*?mOjs?B)ZW zv$x+qe(%lO21WCPx!&`R7(DPl8ZtY@ck`FxIV$WN)-01XY55+Zb3IN8UsSo>d?M*? z4}Yf4&5=n`JEOGJCB!!NI9!?`+r>84-m`um_kwliA}r%dn${gp58FDvmhWD?pN^(Y zkR9t=8aI*7H7Z-76ko!o<~sWP&%bqJyKXYZ01TXaVLuprNR7IsV25m4YC zJqonm1CjhI*M#j0h>N5R99Z#2MiKAuF8UXc+@A6|?yMv~B_8{G!-QcNu=61N3q{r~NZsjisa=zJ^Qyf@ z+5V}m-)7CI`p)}m$sw6TMH`HR=doFiscflqWiMWESI_UOk7%lY$Bn!XgCh>y^$w=x zdy>xW5jN1@u%MbtRy6*~tmnsb_+E4^+)Z)=F zPISeWqa!99V{Ld+8$3cyO+A*zO`>yIOQS!Jn7;Liz$Ko+85;yL(^oge%#r#O9jhz+ z_%gS8rO=_q9X2v|Jrm_#wwxPwY3c#N5o1gyN$GZMoT;ZH{(1poq)Q z{TAP~`;8XWW~W(fL~@pnY;SZnohH9Hzrm*Q{-sUgQU+;zU!6HWNMGV^lgY*0lbCQ>f@|?~k9-V5q^v=7u)$OMv^`9kGC~}E% zEPmb?Xrpp#vhW;V%jJ)j%qh82G@*HVF8m*`ct3Q8&Rs7VlH>Hzf9wSnz2Wo6sg+4K zZh5025d2ht<`=JCRt}r(YVxi2W8`-q+2HdB+|`mlxl}ZK>3Vv9{Wgv`cGH4f6L+-~ zwT9%8@BGgh+Yb%P{Q92$95IE?-J+ywZ>FU9njG(6-xy!N^0idwaxR&*k*yso zxCe2+$sA-g%4>>w#cRoV(UV@E6CzWhPaIjfXyag>&I`%(=ZL9v?ismR!Clj3A|l_s zikqoA#pPtAL}Ba~dF8a)?Xz#@wa$HG)){3n=y}?U5rsm&L7}U4V|d0$)QnAjvG-VH zcAg0RxzSlV_u`4shq#JL0#}Vea=a8m3KCN%Zay}oe;#m-&V4*b#o)o#<0@<`ZsufVW_(umGkj4l zv#Y@F&^7g{L|L$eJJ`q{DYYE!=#yq3Tf-@Je|8x z{Jz)a(uIDHIZr>|)8#hR#(cBmy(zC0s;9@w?Y3LRVr6l>aHRif%|M+j)dS6r_L;-m zE=KNdlSs(q{9JtS<{26{jm|xJ6 zRQD6>$DYq`?NbJgiaK*+3SR~PmE#wjb5izAC@B3hQjz|A{Q{jU!sowiwDHo%wcmKv zR;Adi`F~X1WmJ|;v@l@0M7kRUq&t-^X(Xk)Ly(qMS~{e=LmH$*y1ToP?iM&N>wJ7` z&i>`EYi;)(GqY#zhnN*k>_kI}bw>r`?FN%awAz-j9@x{o*}(O^+@H7o&;-(xw2`cs z_J3;=i7N07?tpwNL07QN2&(JYg!v~KC&G;S2SiBb;{eS4-&i5hQdm<#1z}V4Y$_Y^k*ER+O;I_x}Zjva*i+?87u&|3UnR)3SK+KiNew~Q2gpkd+ob6Gh2+x zTzN*6Iob~CkM_FPJTGN+d+Cli>7lgTk{%*+PbwCd^(ro|h=uQ;lhOa4fB4^dNj2ya zSU2F{P$7mN@knVXQlDm#m#FUlLO@j~lZN>j{-6LcskEy6!;|(^z&HJBqemi)5V{gA1$! zZ0S~14JtcZWv|BWug*(lD~uj4H6>P4k@SC8SxmjPpuSUqFrI%%qTm}ndj1>eFYmKj z(4EGg?7>?){{qofd1ECaO6_y~x`;c#{J8(0-=~gqO~d|0QqzlxEvi6w{5Kpnrd4L}N}x1W>Vy ztRl!_7{cx`R6`RMIOy9qm!@=iCoJH4Qf*yA_;M=?HtdEd*#Li}k1Xe0G%b9fQ^?5)sadFcE%W@ZZ0`VfdHm zgtt7`U8a83Zevjkp37_m-F=-#uk%(coq~`kb}49|@Gu!nhZ0V8rzz6b6V>@UgVX6` zAqys=X!|#*Lhs!R?z|xb-s%nw<@908qI|MG0q@@?&~>kySmjf1@)?Lx`;e%x{iyGB zRab@qU zmyj(M#Twpq9UKJQ7SLVBbmuIlG(3l9gyY>toL-z1NZf~k+*2-67f_MdIOf|!Yg6SS zTEq_^DbN&@S7YDZq`>ZXA|8M;KF%kAX#(HBt)MGr&7$dn)*`NFdG@o`#viXqpvy0H z5XLT9`sgo@vdZhDM0o>~p{7q?QPv0k`$VZ&UTL@C2I0ayD_lz`bb7G>$hQr2|7tkY zR}UE5^v#tGsgO~*N*WE9ns-BCyQ;zWdMD^IoXnla`MssaaM2S)ksJz)IGc7i#*8li=oIs#0KL1h)VSGyhCVQk z2AimHkvOc3#p$p*(}LP7iA2b5t{Am1*~rO8m4QcUwk;{;QMbZr0e#pJ5`euc3>CY$SF-XYotR~UKK{BIy#M^6s!1+Tr=-z%#A*aQ~ zE-}(=>vZzrBi<sH4+Z^cK`t&fQFy zBcZ2H|I{XXVoFmKKgenuI5XMiafb-hp%-)?JGdPW{oiwL&>~1RgrUtepLiRFXAii( z8R!`(6u(Ns%KzQ3pfE(FK+5k~D+s@qPD@&3_q&ToK2@7ncP+>qaQi@)NcrnUU!=Cd zR9`?UP0i=T5QxiB@docLr%=Nj$#dv1&%JjtCM#H>!jMc7ozd5`C98YXIA8Q({RQS% z{N{}|0Jk4>ed#|bHuA+-;mS^_@DP3@bcq#EU+^b zD&a$nJo#;fqCxL4d*qvNdKD5^0qy|kj>GtChz@Db(-w`Rirk8Bnd9n*OBh+8&b5_g z3Q{`oEO_=DQK(PYbQL#zyhQNr)iY*{I@Ob>dhV<8>NSh=*}qUpa@&xaLlE`IW^i48JJlIWZ zkf&+gIhbYR(vZ#L2n|-Gq=7mNgYMqir(WvH%ucN$9C`Soc>8Uw$PU9~_$fT~^%Kgu z6oz49#WIv%$3GToN)COLqsQKGm`jJBAKr^S4iiHC12NMAY zI|{m1{&2#%5v1v+yiRy2kiXp#7loN9R&}}MANn$&1*%L$p^Tfk+M5U>2bszP1!Q0q z>Rjk^hBHOY=Hu=q{7=F8@7VuwHQg9=rD{Egmw%h9qFK6NT<=Jexu;Q>7!1A1>Vr@I zc<>>&NpR3sBOQ)f4zlpVd6{DABYmWb5p+=a=MDQPAm4G&o#(ht<*MxSy^jn}BG@tfY!k62_ZxwZ~C;H{i$*O)#cB$sfr&z!T0(E z=zcT!6@sv^z9>M>9(-Q7WOOoTmd~W!A@)GC_!>`usPTI;l6L4W;~#WSO$ds<&OJ)O zQQfR7?{;=fV~4=sKed5;CqWk%+Ale$?8Sc8D1UN=#z_!}iUvfAe8YLgRv$JWI+ zzOOc1Bz@J5tcgF#!+bQdjds5%j8WgO@4luwIQr`gxKp5e!alF6$nCi-MYj&MFk{)< z_I17OUE&R8h{4s}Ao)GJR5oq8dP`+k3^0vh@HFV&c3GXF+&?i>nJcg8api>&Ca(%5lG9yw1?t ziu*iL7ppU`d$P6;$ae;GVcT+&FJgW~ms!)g*;d2;>h*3V=4kT0Tb4^>FAepucMxa^ zpObr|FK(zS+^3nlCmgioimF{l`<2!rx1Hq}Jl8f0x))b)U)Fw=;#u6jFL`5{Y z<-3jjlVmaAM7ifppNh&f{^_YsqNQ1x-Jky561~JykE=4%F<=#Tp*C54f(7!O1KpdI z(JOJM8@<@CrZm!2uMERk4ai1+@(|ws3e7CX6@-4vbVqv>D$N!lKlo#2hj>}$`;E5= zy#I)1mj~X-JCOjuod;d!rUy8rA@puG#SrluXFo5>`mgomSDbsF2hWcptNqawEQ(df zT*pzp(?}XDv3DcAkSVZq(D(w1Q-U(dc<*@tcL8+U?&J;U4%C7V8!f_7&^RxW_Ovjq zJ*P{=^4->@3dO6*0+mWA=4iG%cQ9g>a;bx>IEMX1scs4>z@O~gu(a~h|DThcNu10yqh*Rc^tO9don4^96e(`Y}Ub*YHJp=#gc+{9PioyJ_ zkmS<*C4g6DS|uC-5O6)^%9o{_vLd)H5r_?Xq9sFloW#wAeXjiUa%2 zgcWT_h7)%alwUQ4fESdc_c`_D$xZ<^Dc~-HZd}2BxM_F>;wZJ2sj}=~E79FAPs`Yhbk7q+L9@U_#7AChRC4GiKbRlFXT$buik?gg4bh z1eNajbpY-v=yoiB4-ecuHsU1xV?fFBp-^aPL_m>9@N#JDj+9Ketfv$=Nd8_lt9y!RNhMR-Et0CClJd_EI(RgmS>>>6sIvMYqq~_+2}{6T2i^RoEbkbHeLcwu z)TGFy0b@^OJ<)|t&g)Bua^d%%q$bgL^WY~OYwG-H*UjZkM{&yt>eSve9Qv&@5OD2# z(_8@V2Iw}P*S5m#*7C?!*^3BDD5W|rE4%hEXIjPx_#C)4%6s3JgLTnl34R>KK z^-Z_%#CY8XdrB?6IA){uvmN-|*CyzS)WpMYf0R<*CO0In7HuZ|%R-zDXGs1PiSX~+ z^=4y(?#C``t6y1eZP1hYtv%tt(D^xZwP~i0_{CLKhp#cfebX(_ts&6Ki*lF4sWPqW z+j}^uegClhOYsXmY~tq>Jqgp#n`V@ZmO> z-PqYO87OVqn8Mey0;X+mroi*cJD?lRY}tiBta{DFz!x1cU*%`)hpkE2zhq3dnG>Oz zIQ0FzxcYC^9hRci-x|?TCe4H3`Cs(K!lWa@4s)+|Sljl2eE))O`>nQPz{*|<5{CRS ziJ&0d2M+kqT%DvNrt^%d8FQKV@bbOSnG-)3*hKv4jPv&tbNyZk_4rQ&?=Ph_Nl!O} z^POGLUGAc@{zG(JvzI#|f1qM75hU={W;bvx0kQ7!S6QhMrEKFX>;dV)U@e98O~lwt zTlJ?){vVood2dI1en)>Xy8-gu1Krzdwk@NeIo%MdB!y2n0{v+XI@8YmZ;wWMIL#kL zgbLoI`yp@oI)}u!nT1McrM=HOIoWgC2*Hq=ns*fd=18dWJ-hl(QP0U_X(|Z92fm@(8zS*&VP10M?a=tan>k%B^ z4nVi-3JPY>*41r{%?>AC&4k|}F@pE?xp5E9*_sIYC!7^dv#1^JHAW=~gVukGbcr!b z|F$(E9S0D;m6X@E1QGrL>Tn3U(}K}@1m8pHt$_8*Qx zx7g|XYWxxpUtud6eR(W8?|mU3LGzt5OK4H!E6;BK3U%s%bX3{YC!TWDzf$$>%bI;% z{H8_~a=sjz-}vM=z&f0O?t$?6UdEh5r@BlOm4II+8*W^aB#cCG7t(MqRPZ!I4W`a# zPvi$zYigVGm2P^vWkYYWC1&nq8*w+qew)>H8lb+Xpz8qrUJ^^g?j+>99>HNZN2TAT zbh6SQqAaPmZ9Am}FCtU`ej9`lEko~Dno-fz2^)RCL? z)~hL=i`|v;7^ziu z8+rH>%Tx>+PIx#d<+Z24V-aDxs#*C?%~`E>$JRE(}T1?F>7XVf=i zR>30*-pVZmaGbvaT{C-+7A(tyw;^Gp^=E9y>l$-g82%rB7Lms1wc?juxL?EYD_@fK zCO5l$@WrHm)n%c3**|U-2Ejg`FwzT1G@b}OSmaP zYY%F_kf@mQ{g?3*ly$PN++{@c+IVa}Kr+@u5dHUIhv3_L3o)4l#;X$iu{_=M>pn(& z=$4#!s+Qon*IUq?&AeeWi2fB#srqOmO(t%*)dA%nRcwUZj!=g9)Vws~h>y@DZoff; zdVz6arm8D3PSE4xvOP=jyLI7+2B`hA5-&Bi z3j)b08&4E)Qm;9K40rAHLxi*LMBn+!kke_KQ2j+t(>FIA{rK)@5KxDE(3SDZdlytA z)#5+0LJE5-pcq?dgknl<^ZKK^BwbZ0XMY-Yaph!MD#hjYY>p~jz_3(i(fZ07tc%?0 zm)I4k2Tj2J2fF#Q^48yB&=!?G4N5j{xt%18yTa)2{`adyiBUIESl`!b%fmw}DQnXB zu0p?7Qoe7y@11!ZEQv%v$}eQ~8!@p0+y~J8?||Xl-9pe5f75s4VU(rVJBO4j*U-PQ zqFT`j#H4601?>|q2;1ltZckkYX8XPt$~q$x1&jY$l)qDadWWqM; z=nGd48Pu!h%UOBTHYXMe;XwKKVY(!a8ezcz2J>~0!jFfqKM`=)lmhK zHs*Ibv%eBgos={dj|xv$cP4&f#N1-u+Iezy5krsmt+wwM(kv`8aUYsI;IWI z1@0PS7k1zI2UaU(`n#9yZ%%NjO3FSY6sW2SpYa=g*a|;Ig@8P)U6tm=0@qp3ze)5G zFo$1;I=%Mv7A3X~S-K@ZC%$9-*N)EFk%7{rRzBdIgLJiIu=}@vEOxmImfQj<=`mBe z8n=ZfSQ7o*qL20Tx8#4;%YN4LTKOelu=(v#S!OW;Z~`0y(xL=c3obo=8zXBMiMOn9 zE&Dt9Mt7^?K+U_(O1fz@)8mCaC6DT7H@OmE5hlkmtdZA)^Hey{RbC5g>rui%o=Uut zOa2qA=*sba8r^A23JsmwLo5CAfI1+6E=et!-8T#-TTOCOo&_4IE$pQ98xk8>#J>ui zJ9{e=%;tMR_Z>o3cU`5-g)pLbf{-)EACz>jSZmI2-sU58_5$v6kNG8FqO^z#zw+?V zxt&rwI!nUPsy96KX0OO0!5a4!dqzA=lW1_1(}$_`@oB~`=}PGHnoVK-t9d}JP?I+C zl!Rm516(A~#h62B;96YkWww>d&4o`7@m1y{T9XVc`>d$j1QEt4Lz`6o>bn7?W9y8U zM+=}E)jUNX0Hx6M?K9WT*&W}(&5p8`= z)F$sp|4m`3RXI&xR~AK09*i5CZK<##5`r2xuD_@0=SFOVAFF%~_U(~DcO2pKaA_k$ zgchTlyxtjx*L5pf$+cC0|A%*IhWI;Ka#B2+rkE#OvgkRSpYnMONF>p+DX3B$vaxwS ze?WhAQ4Zw$+zWmQ7%Ehr!uO%R!Ba7$WL7?$yCu3g5g+z8XP~6^x`q88GWEooI6ImD zVsn>Jw><>%RS zxk@WPEtnT_S+2+9MI3eeS}tUE1D-@O0>s;E8_kmlu6^+KdO~ST%*)$9g7tuCzdu1#KseN+Ed^(%|Q%$#5m(c%?A6O~OKU_L!oDSl^{ff+&ANR{dDqUHzH9j|4(Iv2^bawU>p$Y4RG?NScHsNC# zZP%cfqf}CsWo5q1oLPAb`28^^=qAgJ-17*3g?AFOnC-5pM26ng@LtX-C}wK#aCb{< zj#rH=Hbbi0&=~Bs3FN!Sb!+Y%uhFpdev8?o6t!AaJPy?1`OLygzzo-te7Ic0_ZM`z zqb)N)djC6$_(K*<1YP({PXWZlpLjPJ?z5Rf%{^(~(RQq=l-ocOAM?Bx0R{_!YUlHn zpi#iZ2Hozn*TtVPC4xE{>D?%;J|u}7mt3kYDo@N5SJq-sGp=eB+B}h_R&wtmPyQ+G zy+sfuIH!m1sro6%@~}tGunC@jcs_gd5-{~P)iT}+sX4vL1TGgxmN<$7GUI(1`maO( zG|FI*Tc*<^xRs6u3shI2>P7Y^e7!^Jiag@q3L!4R+O9VozXZQ8#06c$UY^zrYTVB` zS9f|in{&Q@#ynN4Dv6C%?^vL1&aMQz8}sGs3v?9KjhTw%Kd1IlJT$UYXN460m2m&T z{pW%Wr~@A8N>BzdFz1WKyvGi={uP?Caozm}mb~|UDePOd^w5SrfsEu*XOzf5Q#Oh` z#5?#Zv`N2VB|9Wd1~DZLbTSMgX28Vsmh#|rt!E(_ghhlS;Z`T+mq42Xuu@^-8hW5Fh^P;X9a%_ zTg_{QA%9UskQPnHvIlo&qzSn>i7w7;iku<_6XjpMdp~(It@dMRP>Zi)E`)irBOU8$h97$OY^_`DH;F84q9>Fc-a0R(?4ot7fHx;p7KCmQ=!-3!S6zeLHCnBB%eK^UNF>w zO9qn!4NCm##iePzb!$lRBzt@Sy-jjY05%r?;HD0mh*M<7`*#plSQ?!2S&@b;DrCet zIp8{$1a#%ch<-E>1g#$Gp3SxX*!Ji(MtXYF<3UCjeRp!7B|sdyc7MLjV-4NXe6Xa? zcFSCLri`o8@k@;j{WrgIEjGB$dhRj51k7y|vB*br2~^YBx$~wEA>SANupBW)eze=7 zL{Nh2MS|IHF#M}rZ*}vRJfx6%_SEQhda~B4CbQ{xhn?vAX|$C8te1Hd8R%y6*e{}$ zBH=Vea(S3aqWGFsG+klEB@H%+L~4gwO-H*PjFxrX!VC=b-?gqO%yo^z)sd>k^2Zqw zv)VwRr-St+2i?u|pn#n9DTnz{&aQLUS>6ov67RZc=(Inkn}RfhoM?MKt3^)N-GS}b z-lvq?`N{H*nVx#>o3wrIJ|;kBLPhv<{!%mHA1-+*obKAxOU@^Ox0 zm*_jhZlTSb&nKlA?A_TzpJKm#l2tjD<6a2*XZkY%Pf$Heion49n?&lip@HGGe~ zA<5L|Ipj-yDM6Pz|EP8xKlXM*5P?EOe8|5wMPU$)Mnj4#A3w@MTfUH}n4~pIo-M^9 z1Sg=5QT>}V-OfZDM7zQ-A)FC!LiHiQr2^erbO^Lxv%kLJZeS&H2P59>^lPgssb@Hw zVe&i2!>qvES6WkYnf%?{RQ#zus5-8Ny2(dYy(%g2u(ObTZ?_GOL)4%vsof+qZz6Wp z>wqtHf|93jQh`1G1}edxtkUZ<32yw)(5yHGb!s(0+B&@7(5cUq=e( z$45~mw>dxCWZF`1#!ytHE#D>V{XAB_)RzWy>GXshGA@QViLhlhxi-ny*5diH!jRWL z>S$N82M7tBGrPG4yWllxx7#sAR7m^RvixY8D!*R-gylYmpQnTTJcoR7X+hU>q91Y~ zyWtcn5be*~c!5!@d6}Z+rW$vI=!?@M>ZO^cg7_hd)s%Uc_u6qNp#+#L@kP?sxNl_( zF?G?A*iOK8Hy!Ajn;Pt6((IMl7Ar|Opm_XD)tLBO-APaWAdesj4CZ@q3vOU0f#71I26UMkev#TLC2L3j824A-gq<`B!BATITjg!`iV z=8?oTct0?LZZL${6Iwm2j(lg_?yf;&c$uUo*<%mBhF`-{d(5Vs=b5v~Qj1Sv-ky=DVDgvX(;Mci*UPZSCKGy2T_X~{CGApvKyo|HQV$&u$-@%UvNCTnT}1!* zhP>%P27LdrfNnq$q+X!5nG*LhOSDGUzTlyBV?A-9%Vp+v=Ftx%o**B`9D#=XLmzTE zUWT?!XpA{~c=W&k926p2wA6f}DPADo=WF;9Fjm-1MNXJ-TW3UOi0G;YS20oM%jK`) zW{8oxj-*D&|T4lDc(T&Mrssr5Txz9_$jN182 z?MdcTZ!!*0oM#3s8&8g4e+^GeZe3oJ6`NjR*oUI|XIUt^QfvATSOF@GB4-7IdBaVYEimNYY~@5DF;V}Q#6x>MC8edFR6^Ovq@p{(UC{)^NSTFhI{ zC~Sw^22}oS3mhbE)HMuWa6g^Z`|i1!m^f+sCw+`PM#aL^ebw+2!vt_SK^OLF8cPuo z8+iZ`MebCSD1~0=Bvph-RN38#VF8IKqD99g*WyP`y;)MJTp(6fI9~DU(0HR^s9w&Yjfn;IJ?fe)poZ>%>J$4*-Jj+j}totD=>a*Djg;!hk zl6N|>rcA(nk>`8)C16-QHZ|a3lK9S5ZH?y3UJ>xYX-54{;v+C8hU7$MsQn@tUQBjE z@0}1}()^~c`KEb5AL`7!HF{ACTj?P;RdN-`_Z{d42&dFkdhcFcXAIx>)+J<{=e>GvBgeN$OlR?b zkCgfErj@#>%_Z7;Maa6|B_u2fJmi z*|L2o%`PzWWzZC)vITyKBvt2(;Ks-BZWItXAcx1;s~Pab{YfmB3ExOm2J(IG*}epf zopP>U04m(mI$WRtE#u(szO(kdmV&`LBJLj@E4|zid1yL@-=DsaKdD3dxb^=;hrv0$ zeRY>kH!uj3PIa95+&g?3j|D-OX<{Z8XDoC0b-3Q&z>jID4;!zxOZumGyf5jPe#E@~ zgNHA=F=5kEdcA4QMe$X7Ji;#NQ)nPEQ3U4Z6)F6|^Bm{J6#`vUac#?wnaBg5CC(%p zodmsMv%R}z`(sBXav=gT0j2cJai z80a3}`0UtdenO>^ybfB6@m;<#s(ZQ~;TSqYYv_c%S4eN6tlvSGJ|5n5^k@OK_A%CL zeb88*5_UToIKu>+15x zOTm-&XVrH|tO}#Gxp|MLOmh7JUnhGy6L^n?S0vgMMm~+mR;DED`swR%9sgM`&zm&p zDhl?M67e46@sL#v;COW9oNTey5@Wn2fSMf~Ig%=U&l^D+9Wcn>iklOHSGE6ARzjozhkz$4IzG#m%`c%*vMJzMWu?l!=dZQ?%H!kUia#_VuQB3j8+t&DMNn0>fe`aRZ)BT%0+OuL9^6%oHt^|41=^ z6)8Shr+KzJv4wwsNYwRS)?V)yR>ANGoZ{ry>^a)Fj!k-$uVzu4 zX(m0%0QV#4o>%y?G9FeMVT3#^sPF4eNo+B1W63IGpHeHBnMI>DyH~Y9b=^t416)PW{W?$K_;>3e#nv#KN)j^?kE2pP06U6>rB9P! zevZk2BQLz%>28(8`TK1!=1<12tfc#6J}5_mA+o-fD%5c-AAoX7LiN>lQ0YR=^|dNa0v`W z$ML!~zhsCYWaw?$Pd~%&5NPhAPv48I>iMSGvOLGu^y>euh3N6$9&AN3%!@iB@`^F!B4KNP=^bPsJgVe z`#Nhn)d09^pu35Q#V}7eeFLkP`9>7Qa7h2OWCw?S6#3Zl$Y=gSRzrv7Z?%^|aLmCn zO^9Qs`HkI&QLYhm*?%dNB0siS)%X72v9aZg#Bs zK(QR5U&ue@90X{$4?OFZ5=slPGWwc}YztC_wK^x*#VM%igaYnC%L=ygg-z&X@d;?7 zBz%sE)<50I~|4nSq}=hl`;Dqx^VGr#=@5#;e!NpI`~OKPVA2YYK{5 z)%w7sauU{A?bQiYC!o|36gzqI6#pdT4X!x_?}z8J1up^PYUPiMGMPKw;`_r($bCmk z%wEoWTyW{<${c^Ih(WL-Uu@m3m2LbA+c!dv$}G>ZZ8~SeW*~p!kMR;O z_qy@FWu=hbF(}2#=bFCMK^t`WJxJkjn8wjW1W}>Wg$2~P2oLkGohYW%3u=k1{;dXz zukrb3FtSyl>x^2mcGQoz`aKDj$?=oJrgsOQ6!mKAr{v2Gxn0N zF6j2b&G;M-OZ^m`4WVGt{Ci)qvisTtEva8phB#xe-}NlserdHykcP1%(lNBVA?X%J z(C_sz+56is4j&yn`oA;*t{&(b{wZ{K3S=n5H)LW|=iz$GxNJjoRpQ2iiofL&uqi~$ z@nz)F3{^BuUq9fRy$=j9Fh2Vr7!=K zaixWsn5w|3b?bzFNdsI%(9Ohd%PVz7=P+8^pulC#CpM_Of5%%=oEm;0H`WS&G%}`a zi8E$(&@)jDK`HkrW_h82-FTr}Dg13aY$IgNff#U&K=*s{2TlZXvbn{_i*5=z3?4;) zPLKCgnp@&BB3br|aaZMk-^Wit*Hi7%Ty+(*;2GT9<3XnV)kX+UeVU{TVhaIWW6;I2 zislrD08>jmqhX&d1uX!3makuK`$9?Fj`$ySmU@>_?!T>H`itLvtv=FP zPj(}`NE^(@3(#MkNtsb0WFawQl!QSVb_>%o9NwPn$Oc?f(6xl*5k7HdlJ>0g$v;4& z%j#iSqgJ>Q>zpSt#0uMhxs9i~whS&%wvqWk&_Tm(P*Tt;)Qv-t0gv7Cig40>3|tSH zfi96UU#Wywh{yh?qgNt)Xk)f%BP+B}F>vf(CVwsQMA#J#o>#@sZ42tEpZX8|H<2ZH zTDIu;iSaHo(b8C4=QT8t@ADkxC16ri90waz=6sSq5YZqc5A4dclNyTms!F!P43r06 zO}+|@9iW6(H;|hXU{XV@-c_$%xO2W|N7a{*$dI|CL<0AnEI=1h?PN*B*?oF%KV;m3 zSt$9#hP(3oSzLD^$3ddYJjEN@v=-4=9zDwakci3j>o^4!7A&{&6$}MFmfHyT8mQ+r z+sk#c1YMp(T2c$?-4b$BJ7UWt$y(NtH$^IOXYWJ1%(}$TYf)(0bjoA;S!xe!I)+ z8hcF_Zr5WExHh2sKzF>hz|sdT>=h)DFKE6Sa81ZRULv#y<7FlPSK`C(%-?FWbWUG7 zOxv+KO~NwXqkoy#NoOf{F?ZBjh{nhR*DaqxciAuP;~^%iZlm9lP-4vieP~jl{9!ox zmMxa3@!p5g+~%9N@oUvW7M>94gpReup{21FS}+8HP*mjPi2nY(&pn5iI@p44%zd|o zm!P3qtrlM>(#0sRGYOgd9#64Z0q*A^*4^P){J~e0G`$+LWqv7m(d>)e(%)fS`#;g+ z)Hwwvk|U-40bINP<1Pg~H1idQGUN2%A~f!K{b?_K*L6%2U-2qP?NaPug-gpjsVL=0 zaa79-J7wTh7l~?;;y{ zGxyl>08|LY@vREtvoosU|f;T0((ryX;5b zlC?E{X=+$FlGr^yc13%O1g5|A5^N@LQ)Oa6zR$ggmw-7xRx8|Iz*x(|;C<5oaERlzguMX)%Tr~DaEj#G|@AH`s#W#@YMGIG*aIZUB_WHr~yc6iQ zT0o;8x&Pe3Y*6#1*iaT^92*FFg_o8%d3cPeLI2HJuC!BtL8Y5mTQ#g}q)KD#Z%ZD@x0N>jJt&))g6>v&v+ldjl%&nTX$A zTrmR6A;QmDXZGIj!i9g;NI*M(==_@dME}s~s##iH-nu&)OcW*zBM4KAr`bCIxX-Q&jW8@q3A7Nsw3`Jrkf6!o|kGjT+ zgJM>ZC)Boe0${jg>1UY$_bce0l}=$mBWiv3sOgy!WG0)K&=!T$v4s>X!fn+^q>GQPe>FIqG* z&50QdA$(pYtIeVk%4OcXHGUEyY;Oie;*Igyc+BN_+%f^mKpc%XC;9j%leQ`ivtc(P zFkdgwZ7HdPD>+M!>J+gFqoKR*vpWeJK9>K3>5sM(o$55J;^m&1e%sy$YQ*8=gUh(z;u7F`!7BKMr?= zPGWvj{y7GZ@u2Izei5S4V|9|7mS2v3#7TAPZBo${&kf-EfbO;~c3-T=-{0P`d>V2j z*#)f-SaQ*$-(*-G8X)Tq7(YUHx){J;bKuLs-!ncao@6a8o}cV~th>!Oj|t6S9fbkh zZ=lPy9VS(p9-DJZm6IUKW*#GtIK*~|fRaQ&cw2Hdy?8?hy}^Yx?i|VD8knp5BtZ4~n;w z@Ft6wY5kt1MBP;J!sazh-V7Z{{FSW=MK|uh<+5hL^#xtu94yZVp3I~VRUZPj)46{s ztr2fIj{g-jcrr5{PG{Vr7kKqeUTlO*}`#iV9N2;qSF=U-Lfa?dk zn$pwxV^OQQD>SC;JoPbkCWceu{@$;+kLw@441ax`zC+oo#4XYmjU){E!r-5=YqW5e znNvJx=Nmkh#}4m62Dtv98_=fADIF=xN2xhOtRI#&ktdicBvw8KO<6GQO!KPwFWZ^W z5hYAhJ-$Ws2ef>0TxJRHJeIRfJ5x3ek+%%-qJuqrryLz>(Vn~0Ch&vGu3#|_NII>fK{ix?N zr7rtnPQR@C6#m&y5p8OYfZ0GJ@-Y zov+642H3TG$;-^&9SkwQ0`d(4UC7VS;*6u#IF&{>eF=g*D>Y68!O3Ay=#pDdEFV8- zCj^G1L*PkbBjgCUvu>J1?n1&eZsS6-Mel`2D~C_LItJWe&<#ox6dzom?1P?Yc22Nh ztg|$IkcS-jriT(daIo@F4bx4gOOZtT=G}HiZ#VDq++4AP!e3nKxQaEj3{rgaHE=)c z2k1`b$dmsp*sVn_iDC)zj4iP{v;0UfzE`ErAVMvW%eOz#d>9vX1JyqdEqfK37WgSp zwOD(v+CNvFM9{O}-lP)9_j%3r5-`S_7?mz0*9OI1bh#*ytY}+e^Y2XRo#0wq3`41tp3?zvE6sK3%+&1Tzg&vy^I&3po^q09n=!W6){|d z7@EE;9y660mzwwcjQJ+pLMYoA*Dt%Jf~0bLLfjxh8ueSMseIbUBq>hL@_uWWgH@X# zvvR-<1KnS4SvbVHaT$@9MgwHb2xF+LPYAbfKZVB7QK04*2qCEvJ;44}YAh{WOUxVC zQpLN7g|h#}(xRLsyK~vBX=(TRD~@)*LE0F5#A*+8k`$+p2$b4___O+WW^#*yC+)U?jMp=pjSw zA7eB6O~-V-)xpGSb@~xpXGMXopv#-9Vg2u2%vvaVGFDXx_Ob+9v*OLKQ?S{EXS&5U;f|I&4tm0O*M|J}+53M7B7l6OLAO23Hy05tzdAcvpToZF z7k33b%~5px2S%M$9qgomOF=JX1{Cqebh*yC?%*cFA{mjDu7U}y$US4zN>u|2-$lTU z0bR+3?C+mm$?*upvJgSV4EcQc>{JwqLqoso5NRs+#hLM{p5#)2*vWod32irZRwSs4{xU}f?x19=Q$<`f(+S>ivHd<9&3 zH;Ln-I$~vfDV~1Au&hKi7Q_5f4aLn?d=>sFPn9yJeZM8JXYL-r2i9Kf5n(0_eW~{=FIEU2I*b@|^S6 zUyyt~m!0STIe->b$SIfA~@*M=W2RK7ted8 zFLg)(-4R@c^fH5}*H+2jy=LjTB7Q+*JPyxPujsJ3EYEr0#PnuJm3&%oHe-?9tm?t+ zq$272i8|oYboRY3>@VrsKUTm^1>LtD>VjmZYrhj1N0Yp<3|>oQ;$#^M5FaHq3OR%0+jFn-C17SK4Ufqf;e|1M zan-M8Tl0;t$Npc~VMxSMUJB;-z}P;bTI88{@rDJJ-ZWv0eV zws<^eGap9liT=kFFXH;@)7Tmhb4v zo^a9m?0>!BohZAzfJV+`)~}iVRS2lV^SkXOV7yn@YLm=jyK)B~U9Kh;*O9u}{%8s# zDmylyZut%#tHa$U({)ZT>)J#*x4&h%~g9%plW37&_^0bM2!=sOb_ zZ|qPj6Hhz6wD5Y^#parvw)v3%EH6Q< zmF^_E{>+tybc`>q6v(#_bPs>;#dkI!z%<_BFaL-MW2)x+W2*dwbei*qpWe^|Q%>W{ zQhDR|ROFR(X{qUy+`mv!W?hvDGZ7ysISAK~{lNZC5$GBYW$U8F;#R7_En>mUBEe{j zk9^ze{}jf+Y{F2+MVG~kmzu}Ul)AzB*MbpVah6doqZ4x_*#k2!*xN;?JnebS`|=zY zgKqeSvif`1Ji0HlhI&&P6m@EEe3GwLAxtA%1{n|vbhqD0bJelyEG-$qxmKQW7A{xe zA-DN!sC+bo95lf7vmgW9642EXn&g-BUKK-YKSKBFZ)N(qa!*gMv^UAnB|RfU{*wk@&|H_9?6QVZxl*ZL)3=<=~=h;hjsi6LDd6!12h zH(v*m;}Q+67Br?d2DdtrzoM1vj98fNkY_?0X-_0iscnV}Q+(?zgHRplGFsb#0pwc- zy1&8{-xMAt`(10`u7pANR|GqFsCtHP;u^K`cFeNY_H+04&1>^5q03N;(PiY*Zt z`)ekHIur3mUJ26jhy!rTLD#ej!LZ~h2j3SZgFG@StBK&q>-5XoST^B!rLVkzs|kPG zVib1bJ?0#NtB=ZBtpPW>H`IIa%B<4L4~3~2InTZCm+SVt#(oKyC=nCafwJiRjx3bU zbgr-%7Uf4IJN*6+0Sx{zMgoxs5;V-nG>*LmzKE}25X&4gnR^mLjN#Uqa>g!MEcGDe z0QY%M@DeboEZo*t?y(_$iWD#*$BGG0O&>QeUj;IAk`!_cu!z!N)(r(bK2U}k*9`zKbE}~XYsB$C@|$cM&yIgTaHvVzHMX2ulOx}Ybu+dcz#|78Zzyb?vF4Fzl*93aWai}{w?Mp*QHPw@=i`zq_t%geEOad zvbjVjxs@XWxHX`Q=k6zZTO#v8)w|@?FuW&)3~zq{)W!UF6U)-(ZZ+TS$3g z`iuaa#SEGOaq2Dv2#hNJ(Pk0u0Gj>hUeU{Ss|8)Ap3*!5-oAH;7w#od@;dr_Of)|1 zJ5&C#c4>Wnh`U%(!ZmP)3&H-%uT2AX_73wblJL0PMM6UCsWI)*_ZcYxw+?i9GGW&K zkRezr{@#y#3L-yeZamL5hjynOb6usq)F1kY_Q_jwn|uEP=cA2A?JJ&FrLdLh$=AW> z0#rC-8c-StfLjl`%m1RkdP>|9w0=>ED7g){gm=qDb`SD2(8a>M2p9K()&C)Io%|@& zj;i0K0rj*D#mO0xGa~kw!V8hyFXh>C47fi*7nO&u2P2pHIzxWL!d>=#gB#if%SiAeXi-tb!!CO568xP4HOTTDB4O?w<`t23#?c*-&ybW`ce5t6J4y5n~}S z@u(c*pcQYaoRFh9Z5LPCB)TC96G}di18x)Os-(SQL1rn8b6}5`Fw}g<$?ugweYR|- zID(hpjRJS{nNm!>tbV4BArGDS+wz{YkHHoEn|myh0iG_+z&$Z3ZH!yZm|l*$>IscN8DNY(d{FSovL{4t0M$J{=XQ zVuYzdzcZu}F0Qt*;pdcF0jAuTF@GI6K0NpSUIK>e<_VF>Ues`^@0Bd(n4G}!niiF~ z9e4e1()q{lA?_VyU*c7dj&$-3S9xd<+E{J~tmo%rcs?`8@ngejn16bn+h6i+16{$b z3b$*^c&ar67`uJ^yWs*E+yMMHD_8UPDYbG@eh9N8JKdd^uEq>;e(_bJk zT071ZF=TW7sDD1&eR11C7fZ4A2CCN=0lu4z{=;fpqpMZ7ltq%|h$mWDZ$e*Hl7-`B zjmfpzfL@nn*%MR-Jo&3ca-6YSrlpa|+mgbTZNTjS-EZuc^u9z3TaTG~CXGqeCtsUP zuzuiQ5TqRPgjc;cRYCNr<^EcD_^|b3#KkhvT(HVut0;yqFX*%@7AxaxA0yyCKO-*z z^Lp70CV|pCabj#UZOBJokENoi7lNB-)dG0%A?;+D>Ltqf(PW<1=o3UZPJpg^nAa)!mvcOU(yh zJzO~41asC6binbU2Xy(g2!|=4*)H^F82v0$_ca^tf`KGv=1J#mwxhA_ zmYrE+|NqRDn|tR~@F&rueh4opwaJMmXdIeE4dwfVm1=ZE7~6N=)8WHbfZGSUiP^DH zV(a{|tk5r1A>DBD&~`4PtVDHSUXPvT zj`O-wPaWrQ18zU)F1!A@tN$piQRPMs-Kxd@3oR1mC)dso_ga6~VTV+SGc()9_6ors zzCpZ|8H|E$wI&&Brj1Ok;8HEf(W%sN7r-3=-5@Mx7ooo%YW?Ois10oUU&OiATyoeU zss#xvCscZcIE~zMR5H?7l=8fqH@X5bmQY0YB0NL#;ePTlLjSeW5CPml&{g7oqu8F{ zp?USw{hF5Kdpf!F1^Pr5lIrnPbs0fQl#&7R=jt5IEX|3MQta{Gv<;haX-Es67~@y4 zNU&mJVi$lr1iGRo7C{4%!vCDi^CL@~Dp^s}5GWCK@NG0eGJ&XbFFzBKoA3}dZ648PsWVdFJTPu^_+Nd&B_Am>B z*)xE!Af(eQ#e@^y{v$XfvMsAIA)D|8DhZK!NMNX5p@qCHkJHc!LTIVuv_wuX z%)YR*$3Ru@w^mHeYi%eV9CG<8d5eWNPjDJkR+ii1CkE5_LLa%YY-C9Lw79mqG+hH!0#Mz<9^S*&X?;p1-d<_ z>RRv~6_g%M%6@I`{gWDhzf~LQ!r5yF#~LsX)`>?5pa0lNEQYiQsBie(?4R%qWio`aJW(k$DDH8D zW4>!g#Zq;mot<24NLSbW$&=_59*gmyrYR=C{SCU1BtlJT$YUDSK|vjCMVCLA$IVS! z$CUQ;D1<{OUeBqp@ck^%8s)-C5Hf5Tl{>h-r6g?-p>mq{t!Kyz&m?=k2VUwh1G@B0 zJ7k;Kk`p-Hz7>w0_JRxr!niFsV)C*M%zrj`b_P&H$PFr?`mFi`GhaUAz z6^*L#DD$})m=rw;udXjw;V?b$&np{qS=qpT$sFkBW5L5D5~;M6_p8BgG@m2hNq@^M znSX7Kd$N|K@|LE_GK8Qe8D|q(P?VAVhpb)W&|ng0&hMO&5s2-J>6%?GAm4e=t;sFy zh<-n+YIhc~U8(6hYRn0>;`?d*#Csar;eHDiDK+l+8+87YEXQ})(66Y7soHE+2q@gz#UjZR%=^ApDa>&nD zQVaVJMrBQF|6a~ZnA~_<4Si~@?aLc?5huW11YJF|)d2z~hNtN2y2Nh>%0Kxvmc1V{ zD7T2N7wwA9V}{rIk0B)Zn;VrdehzS1j*`=L>}uU^h+!4ES@N@8T!Qn^66luSMOm?z z@VSQBv@51CQU5JYU@drcM~`bt*m~-J?23jkcSj4!fd)hNqrYMqd8R(tAd5z2Bz12Y zV(XXE%@#J0?{lx`C159tJ#zjNN3-CZVtk3EX_ zsKqjZTxXbp#4-1GUNzPVWru0=ftMo=%6|mh70~VeGSNL^W&Y;>-r}CwEZ7{Txa{>C+Imo0`4m4o^x0V zqH2&zVW87?mQMbNtKdwa!8l~~9(dfJ2*Mr4YUO3NJ1sim6RSR)ZW_!8amM{zPr@Y? zHCWf=WQ6Sf4{+B&x74fQpc`?1-qw?29qGN@&YXSuQ(C>Q#P`2jQ=Axz`|u+fTVlI0 z}A`upZ7p7&+$6w2049cKKMy8p@!peTmEC4>J4V= z4NF~w>Y+U;zfx=jei7fVda}O5pZXz~DUI6BHo;z3iWnMVF4(-2WxjW6L4dmfx>Bf{ zvsx5&yT8y5%F{?kXVfFm3oJS?gvy8_o%^nv5lK|%HKK|uiTaw{YZ=gN(eArU$tR%c z3+{PdGiRAnJ@=qq@_pVLy#&nXZpc~A05lPma?Gkw5kL71u?Q*>@GZDLjT{+u-&978_9-2z=ly&Hj_#4gi8ev26&w{Lwi z^B%ZL@G`GX4;DKQFSZTVA(1|6I=jMmGp8tTXx&Y--&5%pL6B`&zd5057IWtX+~+;a zOTZ|i{{6#m)Y)>OUSPti6sBJ}&c@P_-`qz}<#uZP91k;`A?NB6LWBPb2)y zopNj+2Fg%R)?$0YZbP(z(QUN&(Ysgz%1qj|hI&v&0GuzL=jNAyS&Nu*mNjp*naB@( z$5!g^@Y!%Cw>+B=<}i6tG|es5gN+E&Ut|n{y+YA>fBD4nK%6YEV%!)Rjp_dn^IKwQ zb%A{MKo?`Y%lH^#?l6e9`p=VP?;WZ^QgiM!n^39@1_siv(Lo^!!S7bDTkvt%;t^Es zvVvbZdN=b+K7Va$wGbG%PE+tmTKyDPO!~o z$W=qbMvJ3V_QQZ}{^32=58eO>1xNiq#N8&CYD~CrZygZs(Vyqw7x(#0{Uu%w2V@V+DMqD|J=jaA~aa+6nQ;!bMP7g+yJGP&F zp=?Vu`T6fpc`K{G=yUGR=QvqPpqV((Dt*ZEAtsiQllxbY4Ei;Mbg~FTUnGHiPe3=dtVQ*JUohxbB!{((pXgc= z?1Qi*E#*J-R2#B_#aQmIexm&OB7tno7b3__tdIWR<+?N2+?NRKiaOP`eyBg6<-OGR z6m;3wU?fFinHwcEcl&4=Z>?jFS7zu}@i*C~B}CS>=$C z%y5Wy&eOG3WuKs&)49Q)51Wp>>5PUVfQ^b;Di0jb&OjI26n^0y3)NiyKh@2nnSw~A zC1TQ77c{QcHmM6Rn0lM*d0CA&e`x8}Hok|@W^AtPDFlz0stAY5wYP4{7HMe$`JRKW z(WCfWsnsIhRBN@3fbkbPVW@7@oLh7X7H0Cn)P|l8-I=qvjCXt*^l(-Txn2p3hzcJ^ z#{C10CJ~gB=|7~_0Pgc1@g-pXB1Y0=K}h^`%^<{{CNzz#BDaz*ub=dSa-#U?v}mb2 z6Ic?xCPe+AXtEPcx(hwIN)@H6fRqt*=-a4$i3H(HivN$3DGsVzR*9m=g0#NUq7m&RknVPpf8Y!F0I2 zJV?_ui^@$U<@g1_2>-P$UUBE2Xw+fJGt$(q zo&Ynd3e?$~sRZR%x*M3=E2iAx;SAKT$Q(x5&N|_ityAE0{QU2ifH4w|3ar?YSBD5@ zq?h%Zr*yHsg0|~hlYrUFNmpp)cN?gr#EclR9U{JMNmkdNqa5ZQ)Wa_JvX9uuUAX#Y zDF)gWjg^SVoFb^foVEu$q|6N60e}Ajj{`HNY*d9ztrGAQw zo|_v}x?oZ)rPAG3CN71%-1G>*y#?LNiyX;fx`zu1 zz-sP)X=Oq|5R&}i6x^KWr}`oauS*i&_ZAh#`6Xq9w|_$f+&j>fN>jI1bO<@!lIC18 zO|Zkl-2z17S8@Bq41tQm0JxNsSK6lbqUb`QGh*byjGsz$G)DYz{V z0V*) zi6DJ>E&7iPKGC|R5LN;XO}N+yFTxNZ03qk{lg#VegDBw}oaV1X?ABbHWm6p5ACIvO ze$s>Y*%Rny7Aa!)A$P_R&+nQ- zGgnCJxnx8{p2u(F(X%y~p>BQdb-vUA0_r7O2nd*b7|jh#m&YyxRkG*{!~*GXrsWzL z6fR04s2hbGNSWc_G&u)M*sR|KkBki3ua6-cR;Pa@4hruG%sl*IsT%eKTu9Je6jA;H zT@vD+7U^v-Vm#9Qz^fl!R3?e>iA>SiW`4^cjW;;>trW_7dcV+-(iZ$zs&M_SwkS9= z>!RtJ*5cOZ|NBe6P@r35pYaql=!GKwW4sFeNOZ@4T@cyGf;N!HvYoNrckhR#NR`&e zUz~jeWV+>(_Xqyf%woil(lpbrj#nYMY!RM&hc7NP=(>dcOYVHaVt$ZU?!hJ6gykYK zy7@3g4lxj~mYCuE&TtNsX74@W4`C);dpLT19TrVGjq6hiXj5s@)muYJw0D3D1G-~b z_|%2{`B@=K>D61A%6{}(KUK5*p>#Fa$PI02p`Q}w3)~Ug^l{f-O@EAII5j;YcxXD< zFF}nCLQnS)>%;?GSkP^DM5_$SQ_Trm(h=5P=sm4MOkA?fB!hZzG+6UZ)V|yAt3?Ps z%bc#}YT)wAEmF5H3s?Mo=h83{xcA$ra}@0N!GZ2Pq}R`XZIQ)B6f} z{47jn%t+SiN;3jn1khzeyn}F{jJZ&xJG6kUswNv-_>5K*!7u&_t`rxSmG&$v6J}N9 zkq4Tbd^VcBABQ>wZ^wKr`9@KQyCAhx;jsa55kWUO!eHAgha@Rj_{xWRtNp9|2RE9} zhlQj%8pGan>M6>y`ZV8XQR_40j>wYw>e*ThozcHW=o*X~K)Ys-w--nN?kmu}R=r+{ z4eLnZq<-7?w0y7dR1P8B?;~$4!YNSl1#VW{VBnPFliT#^D(+}z)?@G+r{M!wn0c?2 zY=^$?9ko;N{1^#zsbn+=zqHP0n|1y66TbgtY9zXNetsK0FRYHWfH!m+Qflnzw$LcY z6*`jIm~r2lHmIiaStJgQzkx;OX|o_|4#*c7bl-=x3dzX`KT@F|Ue`hn)Gl4xBZc;Q z_^;v;ERegZErjyNQU36Ft9WQNqsyen)RuJuW!U3&S3JG`fmoFH06f1y0bSOxkGqLB z8xF<7!(@1-T}AJ74@}nU`)GA;S}5 zEco(cVjP?=P(gP&U}I+dLkILjjnt(AO7MoK>bMn`WfHZ#U+qIRA2R_3S}W#u?u?b4 zPZ!1?H|0mo5ySl{)_l3>j(KWXEO&mO4rrjO;21`OIr>X6<-`U-aT-krcTVX~sWZiq zVs-o3`u9^Z)T@c1fw2 zra`+otY-v1x+WSo!*PRPtaYU_KWbMi=?0W+X;kvLD+4+Vo?}Feb7S*4wnHNdBqLdwdgV!FL z?cu!6L8niZR`rkSJs%{3+>p$a#9e`WaX?q~@fGnX)%;A2kYhehaahvOA&sdP@q|V^ zOu882JxqEhU)QlIv6qbrsT+K*8za~{O;wJ7L-`x~yhZv-!C~4?>3*+EqTInX*6et`QN8z_rT#!6r(+Sln{W`UbpDM@1@grM-F+!x8=(fbz$rwio-Z357)olxSaLzWsnGJT zzKFH0s!XYn6$P~ZR)j#1uhi>FdgTYzpG+_;u4_B}|Bo1Y_Ok=-8_;#r+R@`=nspN7 zy)Kc|fG^bCzD5^9tvj(HtKii$5$f*WcyAeBv+%l{qLB;9SU>OWC*pp2Jb5hmRk^^X zT2XMGe+#;cYNHIb=4yn7=AAeWCA0vH9d6~24Wvrvg z2$aBX8cMYU-5JF=+T{J}(c-42%>`T{&`qMkraaJkR8e@N>2#1*IW{Y6(y+02bN^Xa zJ*=n4tAFeGl1i%HDSq|Th^VXniz@XW3d4w&$-+N#l>WFTi;95z4s^E?BTyBPDg=<` zzA=5fS?4lVRptFmsDHn*JK8>qQr1tJ8!=_JWobT6Li_#C;y-DM4-!u;R_4(KCnNL_Ycl$nXpm9 zWwpt$FH+V{v6;SCMx_yY;9@jX{fgSuy;&R4_wcPlE5(|VU^%r@BCk#^>1a!=ClmSU z3*f#7-K?M>vfXRB=}V5FHnX2W_I0``_i_lPS?l%oTl2N|FrO)_n|dp^8IVp357XL7 zuSD&2&hiZpZaK_K^t-O9Rsoj`bW_i)5BKKDd2kdBmQxIu%xOs8Bg@@BkyuP=`=eC5 zFS4|U(1z41FB31Ta>(Giutbi~O2fu%8_hpk2>@Jj&{ejWW#SgbjG!T8QM4Fm zwXl73#_%_!U=+_bjh1U)@pkjnsK37%(?oFUYjK^E#M^x%LD1Mne?m`*+kV8N2d;l9 zK$jd^VRm)SnBY3UbM~>8k7Zq0!j}3wy=Jg0q4pf%pFWfkeXd47!`@ zdDRnl$R7)g@^jAZ%fWG-5_H4Y>MU^f(^>@YGU>sWiAmNzd|oK=(3IV z_ngl=Rg68WF0$jco+QTNn5nP3dR+2B%&gEpC*uL?Kn1$j?d(%sah8rB=SAPm5bu2K zT@Fk70HYlwZSxg|HCs)XB`?4`V9IDOo>Je+>9s2n5)2J)^h&f+`9UR(Mw;8KIG zgWTD?gL)xC6ZiEwnpIIa8~WeP4Ev(?v=T8QD1Vp=k#4o1lnT|P+|R;QnXeVz*(dTn+5shg zRY?hbCwY`6X5zZ~woyN1DTk4f81v*ieAt>9D7W7X^JIqXB9LW7syRp^X9rodX`vG(--)cHX{XMiUb&FV>ZltbXoEmG$ zMHAkB7i;X;A!}36BQ9igSj$MjWU(qsvp$Sn%n+nsC6?R?AG`_aY3~IOxD23sZZ16g z2GMvH5#u_vD-So#QAM(!9$Y$(~KCXW?>+Ysp4Xo-lTcv3BF4)}O{L43UVnc_2 z@3kz%o1w%~G;X+gYfXd~B!k3FtL5QE?kNG66?BL1uhmsIq&8+M!$~Xr2-4eVgiy7A zOA@SnnEoc4@U`U?t$sgm$oCyy8F8$pH`N?ppPoj4cU66ZQRDkXu%5L9xNM+1K^W8+ zqN}ug_D}V*<;m!v@)1>!CShCiC|l4ssu1yo83w!9813f6N*c6NO(MGEs2S040gPrh zcrkCh%+!YGGtHMeu!F8*Pb9t|jf^ryE^ekv_0sGvM_7mtD#PAa6k$%e=QmjiUs+N3Hy>{H?`-qFdK3o?;g7!EjB z?v!GlNZ;%q+P0&*%&!WIP4As_)~c=B84|%A#tl;Sb{o&A4=|;X%Cx%xE+^MCvLz^sYqPdQXaiIy_q7pf|2( z%D#T1pF;6`CjU|gF3@fI9r5#T;OI6}YIPNSf#JEbDc1ptiwl04OZnSR%>CNtaRiS+ z{$HBYzt7(W5U9_NiJ~ZC{(2f1EWQx`lP&cIaJfO(_;0i*RrA;qQd;sX>)$3+BRRs! z0Ovl5j0IIo5&z(zEYHUeD1_5L-x4PlJeCQ(iOtg4YASI5#hbp&J3PgU0JuD$E69Y2 z%h-iiNF5a9^2YyA`a`LkY&A3t({v@s6Ec7G$nH7b(Hsl zvx~k5m%;6+XaFuR=#p$#=D-W+WpO7eN^xV~q$B)ctIyW;DL(8++~_ z-pfPYfw5!%IL}~0&?&<6a2&l|7-Hnw90s_2pzG;`*iY6P0gZh#5XhrGCUNy(@p`{juxs?%pUxatkTvGaH9b$?Aghu^{N?QspoxPhb)kW}})2r=KdE#3%-LER5Gz zp}NSMgeA9xEDMQ|_!gs4?G~*>ecj+3wKMsL6HPbutvgGg)dU;dw+Ml*C!~y*NZDs% zg_(bKWD|4V!>Tc@X8~RZHldNIWg>LOR0#sa1au{jeWjS|v1XxMr?T_pxYU^zKfZXo zGwl^WpJBZ`7s8;+v-bZft1BJTBpKgOm=hKI2b>T6PwIHhF{Qn;mP&egoOWnbJ&>tU z_9}n7#c5L`Om5AToofwodPm4T!ks@`0j>z>S}l-0xDOJC?s~pSop&dXV`@lE8vQPu5rg|_pxJ# zF0QB;*LL}~#pI-&xo!Kj9ceuTT%!%AywSUhEPl76D(7fg#zR&2D&ZDR*?g(`JXI9y=|_nk}R`-{}r9u4h?}5UHVAgU-ThD2!1xmAKCjO9>U=d5aY2Ry~rgHjd9#+HF{! z!nZNs?(F54$3IN6XrsU)n;z;riGMB=vG^r^o^~4Bnpr2IdxxnKe!~$ZrnrP{Ds+Gj z3*;*ex(46S9aPyrm#5cXaJ?U?R>VlFEMC$Nb1SIQVNhJ8)pt>m{dmcg=N8)^@U?zp zWh*N&B^iyK%9Q*&iVAHs9X;U6fNoQpGRacqcElN`fGq>3xi($Xo3!CBLT0=ljgAjgY5VF0doWI^|xX;|Gd!rG9lYfy3? zt^_K#rw&J+779J~Cq(Ib*bbEnEqe;?4CDTV=@u$hv{Je=nq1LS9V!?6PAWDjGimVL z=@aN$5Y6icXB=?*Q*udU;B2*p> zNp>dn=o`idh#E%FtaFV}D1J%8Kt zGEORhZsR&pzI#r7LHa_3I!W*e;V0j5RCdN$OJa`Vp~$aJjUSL=9gVkP)2*5@)+OKi zz>_0TuIy`z-Na~R>v}jHf$K9x&~?DE)*|FxK;(${Wp;$?MHWFexCBSIOZn>ik>-~> zWFlWyHGRr;`IyN{3jpsl9jhv3L2`0pf?_ll!3$!xmLM2XbmocLq^_ zs|>n<4d3<28whtgW0^?m|9-Nb+9ADN{!NyV`$P2mZb*!G8F9s~H;#Y)p71EHv1p0z ziDur{-L{K}wDxpd-6QQh!2JxmtR3;IVtwp^$AM7mx_54S8>7@L_}q9{vL#ZV>m!lA zMiIq!24h0%-&qEjW_dvJ22tYA5QO9@xS$Q-M)aX-Z#bANHv+q32FB) zX~;YqA+Id5A8h7Yh5Y9hRbnx()mBba=&56xA@e%`4Q;8IfS z1M*b?U3@v{-kXLX7H7s9R?M#3IleEgS*T300MI-r3fynYX zBoyl8*Ed|DhoRa#Z>zA?rF`E%cDRWI*wV~KFhzmmX5jup4RmQ9O=wiz2Hq~0TKsiM zOW&nW|0rds7>c0b%??R_KL%5?*m8Wl+w}{2V=K{e*_Iq{wk*MEC)HHGa>$S>X%p;6 zse`U31j-7Nci@(3k5CdJYXn_1jlxJ}vbXIUB6{l>K^n8d7WLO9B5D7BY4Jr;>*Hp< zg{hC+`S&J;RxNUZS*fd0pbi?KdvxnA(?oS41tV%GCk`w`QK&idI6_w{ExNeZ16KdFung6l~w z(B&2#`nR8P?OczNgk92iPr2~!g!EQ4I%qNQGYO+H+drY?hSre)`O=~f+N47dqz6N+1$U9P+=a>zG3&x}biJ8(I zh)sX8_^9t6h~sxxCf)*dAVugZlJX>ra-Q%F)rY6P$1V!MA3nLQr3M z`p-{v{<<{(JDrvO{O;(>bF2rts5=G5?0#p4)HBKA5s15r-y-7kag9`Wv!4crRSoE5 z2$$0d^;s~}i@V2|V!nIwv_(b~o}ZG9_}9-#yJVnQ1Fk;k>W@j?CYz8KIt%Ya1+^I7 zGR|-j%D9Q4muvpNzY_jUkYTm>ChCJ(OC}2f&Bdywc<5`}e0MxHe!IcGkA!fEm4Isi zx{r|A?RYI@XYuSdGn1_OBVA~Dw{r9&%Lb1Dy*U5;(e&T)Euh?xtN36Y&JE^K6?}+x zZ7o>%M-@OUraLQ|0rrgyLHGL0FJ4*GO9;HS>*VHJ-)#~OyHfU20K4-QU2p{{Z{dMxfgr;{H%9jGYooI6kCyf;#<` z%tjKubQAwcx(UbOy_??dBUR&vY8IvZWpwJpU?#7(?1qfOnX|b1CeY?6!D`R%q`q7? zW6(u2Y+KU*tLjxAP$T*^$jj3;(d7x|{Jt;Y|Ca=>m!T!to5@dx-0>$%O>5-}+=Y+q zer=^8&-{vF@h{@ZOoQSATocfZ#qt=g@ydk1Jqtf)bE0*ib&Py^T}={ydcYo4&Ss;J zycPWm{SKi;Qqo4 zbXhmt$RoYgTUiobTiw0&C7AA}`a>H%5-7BST#R*D@`2?yH9qE>!d0^HS)Y9&1qA8X=O)omQ~c$b>BB)YWj@>#)o(-L$` z9)FWS@Wvakeb>p!_ya3(84x>w3Aw3id$xmu>@>!cjq)$FbiX|59jTdco|~O+;KvDG zeca=~~?M=O)WOB-bQnKdYp|jpNOj zVBD7`GTdp2wE`QA07ISj$qtAd2L zG59tek7}<*F=Z5Hx>6Hsh=WIl+KJ45;GO+Lyd<;I>vqor&Yg$6Nh2nqS2#evHlXWA z_amlwE&FQ^I#Z!59y(hVcI%`|^z=@Wgjb-2d(9?q=B0$1kZs|$ zZ__f)>9mH*fHz$fFgsDRd-Zdcu`PzZ5iQuBQ@Z{Cm(@E+Z>n7fA#Hn2= zA!X$^w>U73>wZd6vb$d}5&ihXmn^?g1^$4Rd-Cl><|BQ4wLp{Lle#@93bI0R1`31dR+&nSra#rlC(Eg357P4@qnv%WTNC!-LQnBa8J&!9o+B1j z9@?IhwP6f{U?0XFbUi%6)Z_D`tVm3-VEp9r^=&!FYxgR*lDD~&E{qZ2d4ny+e+r3( z@sY51BeYv@TAZEmNuEA*I7BKF{P|ch3647spu4|gxz)^}KAv6aSaeArpu|8}EF~7| z{aKo?*Szri{^7CBC&#(}Zz)Gcc_QCE-xOgnc7CU)ME=+ML7n38jC4R996?uy0O3?5 z>odaZfq&>VTAQ#1mvcj)nuu(Ss6H&DzfTS95$=74&vx=fvxjO`z$kL=C!=KWL zNnYKMSZ#c6>o``BDEKHI@U0+auBI>duxg>-P7y`|@pHud=v)Q9-&!F!PP%~Zgi{4% z{0Lw|WPW=vU zS}84H+BU28fXUvd@`{&>Cd8w~E=zcGz zO^n~7C>?)Guwg+YM>;+&(}DbNon6a;g2i)rV1-0^tkF!(Jxf#OvqYS*MU#&stI9}X<>jAotsXj)Ap=f3oj=#EB-nP{A+SrQr z)k^!{+3{#;IFOpSJ!9}Lh&(hUs^h|!CS-2PD zYT!(ibWLK&gu3Vpj8kJyR5Z$hf?s{di?I_`GqDW zgr~#fz860#lmX7SuNQjtrQYlbhiH+!sdci z@p{AMY7Si~1-QPTOY#@G@6~HkE+WlVZLN-t98_$}!gczErhDn=&+o(-R|b_m{``aC zT|T}F7`|j%R$8H2-o?NC)f1(A;&&hzvt_-8@~<&(qDl49dreIh{o7v zh<}Kx#K+(`*2&{2^R%7n-WnA8e7i^5kSAMb+e$Q{rq1H5QrHP+C7?k3a{0!p>p*T-gj-TE!&d5F&HCa+6AJ0hy0QwPf$B{q7$YfEx(9en_ZTHe`2J zy#n%XEozQgs$QyxI~EWYw6C}@A1fJ4$D;BU5SY=bOBSF`hXe~LL35;|x1up<{7 zuRp{QtB|f#Og7TJK)z^Pfa!K+1KeQHbzH9(5Y~yP{hN@6i${F+?T5Rek#Kj24s~$G zU@g~%=SQ9g;%`2frwn7&+PP}-d+~HjW~FKr4wDlwVZAqpV4pSwbZMwi5uB;)WM?^< z?W#{m9|f@fElsT#hzIX7a$(C)#DDynz7Pm|{885UjyB>-u+c~+z{OJSFH)6jj;G*{QB$tlpb%XOXn>G0S!;l`_H#2$3U zX#$%SQmWJ4LkHnItQ>DX-y-)qD%g^)hQ)PGubA5O<>Hrv@7aWdZXG_G!@JDWP{R}R zZHe%tGV2Os6ui=E-Wf8?Pa+iDMF)sE7Eiy()-_+-uGknuB&szCki`bTeSWK}iz?81 z0PZ&{jYBuRjhK-wg=_ zu3Hr75>#m;2CXG_}-CZ*Q;rcj5K2sspsHQ9U{hgqIwC}}iW#j#G|91M@;stvcq5PntRNEJPT ztEkN-wcHa|^0{dDA-|C`9R1wiI^G!Vr?s5(P_c9v;KqY4yw69I;&wUH^#Ez&sH)dX zwl=DPT^gg7>7v9INDfCI2DV|RVloZcbZYzIlS)VBb2|w2)d}7P8)Qf$J{XdL^F;#a zO8 zjN4G6T8>BcDSEd*5I)5kJD}8an>&9lc(S8GbRVcg66ki?{xg)zyLsRFcz`*1xq>x$ zc_;J1bTB0D{sE$gYPHj{zt%^MM3azEq5MNVeFEFU*`FD>s|f9lUkJLLk@#-_HyLyr zwIaC;{-s$S4jG3P^hO0Y=wHs;<3_Co#s-?c`xMOdy`Oc1EVXL#u<*neDQC#@YL%g8UCC5qJ8FiyY#{;QA~TbWcvwUgK-_dEBh5sh4zgiThc1 z&()SsZi*KgA%6ChBANyA zkO{ibwcLt&s=ChS$sJVd^i3v}6c6Qe-Ja$6xVUk$5shy10d-JMv`>{d^>Ld}gX}s+ zj`S@rWv^dBm^6`kVfJkhz#Ly3Vk|izlJzftgn}w z_^WFu;@_9%Ez7r9oicp5Aj^J_BHsKS_JgHt9VO`pz|98T#y?3vPxIF}Ka?`x^u|ze zclBq9S0ioHr(cC(yC3%>c;jQTuU+R%N2W1tk?Q+uQior z_)3u8ZX#i!nzOf?#iG*zANZm`zZ*;Uy1iSN0@lBIpvznMCq4~YWP{++^zZPZ-HnsU z#9X3_D2tWJJ4cVo63GvWGJ~%p&`=&q#HQ%GKjGO?I%UVfp%D^`Nt$oEWg~wP z=@WNi4_gQFY?O-uw*Yh(PxkrapC=3@n0#CsUXYqMjtc^Zmd1gbvCLoky> z8A3`1?2)v5SIaXfig@EB)Nj8~bTo-7aM_S{oY5({sYhyS;IZ6nX)UA6fp`l+H#wA8 z_GhlsJ4DIn+JCbOY6ookv>8~Z`DTG;7K^C|iCYB4-JfDeYZVk>RqQxYxt#YaUCibB zc$1qi!YKp`iU79=bTy)*Ws@YA|Lp}>M2-h^lzcV1BI_Y-hnlwf_(S=cC8CaaHe35= zJ^>e_mem@X0;m7bf1fjNHvSVoID6UHlZghn#h^PeKfDuGf6O<_lEqJdhvLzVlYqLS z#sjOuTwr!gG!s@bBq9qRBGak!&dJJ*DUUFSS5eq#iPWey+**mi+v zDsMX%bbSk67p0)f(^5pP|NhIuN7!O>QVSwv@&3!{2}F1TE&Lskd+lFs9A<9JRWY+k zoGb9|c{|ljG_jn++rMXPk%xQ}+Fi*1=bdN&+i#YEZXB&(`S6?Y?&r?VmFr^kEA`~E z&7I#l=@8yV%;&L0-p{hLhgbtH_EDH98l@U%gZM>vr;n?tlF)Svs-JyV!1WL1pvzjN zez4LdXOQr%R{c&z4)<64u13%8QWLWc0pf=KHiVd8PCdQQ_P74sN0+KFr5I=5!n4C4 zWbZfLUczN62&aH}D?s;`<2voked)n*<9tK~x$blmKXJBv-DQ~p9Cm}8*xnz~E_Uh5 z`hQ3QbqZ?o^h;aYOLBwe^+r`3p|4ujR@&x(TM4>Ja)ODE&qXHzA_j)N;&kBZW9F!Xv2nLWq|gY)MAt`dvgkq)9~{^N5`Q?*GhD|L+eP z_EJa*QQN>@6N^}}KO>d^n&miCUJfCNF1EDOWJNr*x5PUAxCM)T3wbbd#WZdDrAuT2 z;tS`;Vmuz+=>eJv5 zPei4Mq|q$>8{;!9bdS>ddWhzw_*KkWJ09ZEe<#ELJ0EI5cTfRdd~STSV!O){A)R9@ zAR>;Wv9w^hj;>lUoxL;AB-1QGp!b*!emzl|WZSwH!v8c%$g0E_d)s}UJ<9a|TW4Mi zx~GTHiu!?tQDG9!$r1IAPD;TE^_u&C_#A43vK7!6;fdE!aut#ctM;3ntsg}b3Yj*Q z)_j~)qSl)VtDvhMB7u18Ko^lQiw{HfImwATwSHn|-2fF69@A5fmSdLJbOtd$3B3>B zP-)ik8z#@{|4`&e_mci`YZ~DXEa({ui!fVde9Z{V+!VKOgEJsIG#pxm_WL$ zeNZa@gd+ED=Q&L#w)I(%6C%!Xw@++a%JK8}@@>olZ-{`gbmc|tSpo9V`@#unv=f6&m4oFIWh`TDEWw< zPET}!((`{@RB1o$Ju7y(L5iqvpsDqKp|yr%1>7dkRZR1od<|8OnQ1=yy_-$!Hq1eN zu-;SjM^X0T1N_r_Ow2+LgiOJ>p)54`hXHnf6Qp^);1Uly75sW6?=wahaK5D(bO(2Z zL;K_o#dZb{nO&AI74>uBOvgFjH&&fp{KPSMAHn=)G$P?%*o~alYP`+G3Z|t)xYnww?MO5VvtG&ZFwY{&6sR%Z?uJgwN1u-=-E$ zFiihC>mjBXFMcPvY{L>}Kol;`dzZueMcpW%E}(3A1S-=GGhW z;ZGiUH##pX#l06+kc~1!EG^zjq2o|>Devlx3o#&qiY4)stG@4iZ&ZK=WCu-gAB{t`4Hh-3>&HZQ}7dO-?q{rmJAssPh|Ar4!gv@%oS~^sA+I-6u zk^ZB@kF}?`(Ineb81tXIYzDt1(j^dY7wD$pNGuTaZeVpr&6J!Ah<@V=-!eO65FHiq zV{zF!BH^m)Q?=S={fKEsS?FjY)cr@5JJTBhBP$bn=}-kSs16EnyFu6Gl8I-V1#eE? zG1zy`>>2(M2lBh+K~F^DKv&Zby;7r6<*aOxSk0Kf3NecYo=*xf);hAm>#x@e9~m|( z<}T_1w+D3Jp{XQCw+cVTeHSW9_+}wD+N$hbA<~+FshMqydnJLC{4w@Hva{ zC^;LY-Wtq}B=aOWB;AD~hQs)L@^evxJUD}_P)vICt(|9x)7q6;HiX0Kp*9)mr#4jf z8i7j`2Qt_f4uNjaPW|-~%_W{)$=}TmRPFU@P7Ko7@)VNSF9?a!dN&Eni)5rN9_*H9O{4&GZSz#ReIb-mDUzMdGh zdL3AiN$%K#Vot7)Lt?2m#-|(^ztqNcyQx4_ zag4#Y0PZO0b{j__s?CHmu9)HM3q-MoO9=OvYmsKtAMga+i>i%5F%Azr5tH1}lYQon zuJ@BSNqI<>hW_9$u1Ri)C2#-%j%$p8t{#N)N;K{)E$I|Z?o;uHXoXR`uM#>(jDOyB zNYtRTPVpx$xTWZ`g52%<>cn3^94H;ReJz4!Xw&rNY! z=Q9BJ59s3lOO;;^=~W~iP^Qps-#X^(VtFv~#7(m0Gfdht+P)On;f?6#$+dP$<<{`i zLL~jM9Y3f5 z;++Crthio-hO(kRvf=u=!Rhx$LLYec4(Kao*v*jFU?g3Pp8Ir^v|W*_mv%p~mc>QL zV{9A0xJmcy*qa28cLySXee5*oilazIO2}v3!3-P~ch=CGML6oltChVQ(4JJ##WG0|9a7+wLo~5+)tiK7EHwfjUoNg3F4OAFU zsvgMYA!=;PnB3{q(t_)a=0I0W=7j{mIX%w~KiJh>+pIn2`&S9aw$-8Xu{`$ffN7mE z%Kkb@WKS)t%HbPwQ;mOr?Ez(^li*}#YHNCJp2V+SG$jGi3UvH+oe-H?4iwu zgNfb+`L9mciIV=jA{%M!{)~QGV(V>MsWqJc-}&~3CUxj{wJE`E1>t07o&RIw55S!V z-CS+wIFvq4c+q&9)!(%U-RqOef*gy)pL*x z>rlfy)0s8%J|mL)!~yOC=xU8o-!y+#iB9@lpzwHOhrt_iJxy+wqAtBif(w^^)b|@J zunalydsFl~$P-MGZ@fsu`d&habdL`mQ4MzWRQZ6r2)ei{3`GAb;kbe#f5a9aP>t5q zm)_^;2WVtn!YyW6Cg5rMx99)%p(Ei;|Hn&8JQg_W{fc7KqO-1%zcVX2lLB7HOQ4&d zj>(@(8F(=yy!d0=)#Y`+jJefWegCTp8592Ul82{3;mHTO!(G`3--YvTMGdujsZL6} zlig79i3)x}WjJtM&@$*sK?&bxKMB^>A2lLd81M!G!UzL$c*YLMuYG zisn-ImF0Ci*-n!Ei5Vhl4-@m7%E|hkJoSz%kcSn}4Qv@ac+DL8R7@QT0bylL7*nAZ z78Vk}^V<4u{O>=nP|x`%p^PUosZyGuF-mx7UtZ;=A@uqL@hX)d=y#*=Re-w+y7E_= zWj$6nzqHZ~lTx1cg^bzrLsU3^Ptx@jHuv=MG#!#9Z=K@6rmi2$bH7#|`_>c(hC!05 za~Qre7I%TF0sD(J&|T`0q~b~@4~d;erJ(v?!7Xjh7B%o|V*f&rUYf$;5;0i&+mq7< zd4|X(YzC>NCYt9(W3p38q+iX-N{I+OAvF;1I_QpN7K#LZysClW-PhOjj|*lC6|2`B zLp>O85cqK0U1+yc3dP=oP@6D@M}{ktCShSLvvj*!qVB3G@E1#HJ|C=qH$Zn#!u)DP z`Uxp)_AKrUVc8O%UkKlwb87jdAe74pm;OWFCT3Kj?pBmX!m?jWo5|&39RqUW8xXPbX2qvx+Km5#G5uv+_Fi1MzNyZXti8ZKz7^ z{)LW8wZO!$)!y&_H7&ZR;2RZ)F4Q9 z?8cwuRIB>v!xWfsio_07nz^POJ^}77=oSp9wufQOt;b_q_wtsK@C-Xn!4$;7w<;_V zUO}{bU;4c(e<|XaF*RhjZG$8AhkE0aZ-ysvIRym?`+u0E^)!3USGr!MU3KC0yh(nE zUVwW9x{BhmRm<2)7;qPZ2F;Ywr&@J1j8mLL+Y6bQ`Nq~O<%Rp}2t8bi3HM z&G9VCkK}@>RU(A8ym}B$SAcsAx^7jao@xSCB8Lu#zWx%Qm2jkag%ReVzX>BPZxZ1| zve0Vyn;?H(IsWZH6_$`DGm95{!CIGNAKz*1RO4+{A^^B2p!?)Y|6w+&YSh3yh?;WA zluh0$vZ;-+?A#0{6YIaXGOTC$C!9u9d!AU=li>VoyZuwvfW5HdnKg7Sr=NOvLI%!X zoPw^YulM(|&)rAZ`UO5}geOUOI{T_dJAIQqKU*4Iq5RvNIHW`ZEW}agLWG`m>3wob zuBS*3X1S3cd|57Ro6W)c>B z=z-`ST-+4MU{nXsTclti8??JWvQqe7I6^PI%8+sa$iq44s?qj*yhpBSZ))JSn6X@r zni2YrxOBuZn3k~V>49ZTMn|-qVg90YN&l(MUlQg}2$ok-qpOEKpzD>vpVnU!d~RNV zu5RTPvp&LtL>~dyy1PTRPjjyigFPdZ;gpQ#I;7fX%FBPo$>N$htgblz^g&NZn~=@T zI>iHl^Bg06a|^P%;JVC9(8Z=0Y(Ret@DvSw-xnJ9r+YD2=!65&urGGP>0}wdf789K z+P2nPyA7U|(ndNZ>_=FSaCzOmlzj5$csODmgFKLjE6`0+V`QyQKoOhS4qdHK`m^5p zD~o2Up5xUVaW6HQR=WHr{gd`UM&h*hZyTZUtw~|X>p5 zXUKzp$Z2+8#>O^yCRT)RI%K(cgt*osl>VlG_1P`xh7AjoY+G^JwU6nVn@e@hcGN2W zupe6@Z2t903!Piz@~!>S*j@j~o5107q98Jw(rw-Rdlr}0FBU3(KbF7afa~z?K=*)W zC@bT;bfzDJZ-9b`(ARMm?T$n6OQK1@6Z9dk(Lz4|6rA zhe1?Ve6aZuzrniXAL!zzASq;>8~q-xzlk%~dtbc=-!91*S*P~Iu}c08+tO4)S#0Y! z|JOEeuj6z~*?kw33f!&Fq@NzldRMQR;NF9M_dV#^>yNmzqigUjPmeN7v$;72PX}7m zHEM-zkZHJ$`X6L_EagPgTh5jFUFoJ4*M}t&vo<(jzs*V2l_%OTpgKnZ=feZ&@)l+C z`$ze7?dE%{al;b9t72N5o88#oc;~@IXRm%$9>dL_asF?QVR_W3Llj0XYT%oCwK1Jr z$>XA(Y)C*Hc;9&hT_FbM-nm1SN?4AaXeTmP}jEcPdNvG@4nD<6JD zrIFV<#LOW^Kk-%n@`m^)lgH~bd0o7_0FJLef$sfZ#znXYU6v3n)u8kh^X%Ln)J&>V z2(dFuudxPdn)7dB@e-3u#F#A?u{?Ncs>TMs>jlhd-YihTzc(i8zk_wuGw335^&}%` zzB`B&Mo=4mj1IUy;4D~)bs;C@OSY^$vUv~jaoq95+X<@WhuQ@W1 zGhMuJJQPx$-s`VJcFRSMj;o8|_#S+)+xp+lMv>d5Q#wROow%WL0QU`aLwe@06;&co z;}IEf-4pxi-9zw?MErX8Je&S3=F}o6+MGH0R>qJPmIQ}Az2Q?&+wBLrzmv)O8naXz z@QMcG47da3MigW%>(*AUj5GMZ~{4o$Zb;W}0r9 zIkGn)3fn7m7qrdJHb)P!7sQv~X)FW!bI{6SBcYek;c!o^lh+4Sar@O zOF~1piOpt!`Go@A5OK{*1&xSUy^A&|8k?9mn56zvI?OIeRrU3l35Z7l!Rt6-!Zh3Y zB8E8&!-G5``*2FteEQ@Z#pvV8qGv?#{V>p=E8y+WCQJ=EbM&dhOoy;AVc#oei$DxA zwYPNhZ13v!W@S%HhsQ|Hz=>B%%NlQydtCC<)LC9Y&p^z_k$=X+TtFURKzA%d-4lm| z)flk`H?pa*gwLq7NLa7L&dKWi4?U0c!e>L6VC@XVU-y{0n^-NDs}TW7i}XH{N6s{! zh=a45C`Nz_3%XaC5GsmzpFY8Vht8WefG*?{#L)g5S~;G>4o#o{7o_-VPR);|f^5=C z(w6$UTzw$0LvB7UlGr#U9c-qCJnBjTy!U0XPaMNbiit$k|+xbUExeUqDYv32ly z*;eyByj4&qbPJE~wXPS9)#1yyX0*4g7-c&xlfe5XZFdt0Q9BkoN~AS(Df1Yw=wXhx zbWVdFz(oLEg4Kktm}0RWS|?`1{ZG)>59jm}(5j!CF2`*`*J6YUI|PK}QyjbqJ#8H6 zBB(rbJw}POqgIH2X%(ULTa-U(Rd^@VFs?u3Gc^_a^cOqLY83 zu6xYMCl}*2slturYV=#PR|7ATP z46c7b23;jF=@vwD#Y-_r4m;vC>zrpyXnXE*U1q**yf41KE35iAE%)8M+l|ZHtTkv_ znHU6;KGTSJhjKSS7ayreO<1fc>*q3 z2wN%nwCycA40vWm>XZ}#7aerZ$v$#YJk2km*p2*Nv+xPl>C!Q>!w9CYtQzX|z#j9( z_)f2S3(X1LiXiuU;7&2}T76qL{D;oM-|q7l_x1*GJQV|UQO5;}7raJMc7kcQs6Qo8 zxP=(3n3lvWoFrNg+35A_j|&`^iaeU~Ch#6pNSGaei)d^aJE1f{F}xAwYA$x?1>(g7 zUA%)v=rWjcpVqKnFwXL{XroA@L!^!JSUofTQBOPvjP8i<#M}!=OP-&*VE_9F90G6J z-yp|_qRt6Bvv-}h%zA)}1-f44T@@7!_=(tXkp6y)aArFPro*p_bA!J&a?->QSO?ht z_CXot#Er0vNK-dvc#9F*ove9Vz(x8^K-cX}KMCQBMOQcOpZ0$M7YB6H z{pqp0&!0ox1v49Uc#guhebjPvQLq%TxS%BwCq6BVVBbvux}12h_!`|%%O5pa@8@88iB4Z1*X6U*U2)@9gTzyg0#deMv2YXb zyG~DvO$n#yw;P(a*T&|j2-ec9<|L%l7=d^RLHFdLe=G1C;+@2@15^;IgG3>;Xq;CW zEoN++s-B^~p6MQjnkK`kw8GF2UC7N^zFS4pdUn_hiq~9BW=n&3W$^h%1iIZjuT?Tw zvDhRCf8TK}B6pik%6Bt%mG;BRG&_l-vS}HWVj_P~$6CVr@T8UJ7iuVz+TzbsCgGrv zV@htx^|23#ml$;8-B!~r@Aeki`-i3(SUm=Z$utS%-H?a`J78mzSxI{iZ7VZic>|hM zemT&}Vm?c~@9Umbmv2L)h|Fy5Kk;A#ToTabXVxC+)!nu^#O~%ryWOQgQXrV!y{uM5 zLUZYVH^-iF*19)L=l2&Il396P5Yd<5x}&)fB@PvRs!~F{wy2jKa7jUT)NLRjFMkz6 zudi`5F6>tx0ZTO+xeI)PsG2{ugOQJ~zYzW>+dqxp`c`0UJ-W+!ec);k;fS52znDE& z55uDI0WKNnZb5iuR`7Z6<7kM59uj@}UjN9sv-2~Snx%f$ZRg~$tqEgsdU*I$EsNp% zF!@)s>cMGd_sEoajdeR@razmU;P@mt=rV3zlJ7+uP3=+l}J=i`XS1(UD?PIT##+-{i{)s4{oR(|~* z9N>HQC_tCW;HnkIt?gq=XrD@03_I#9$)lI8iu)S#Dxt%?!@prf=C(75FaFnZHsWGI z=L`cHu)l({Vm~?*qI+P|V%C7;B_BZdvIt+#WoQxs{da*dFB^CJUZ`Fw)<48gjGMa9 zh3M!q`>d0e^hIjrQE?lyH?&u@FQ)c1>EbUwa(FkBpI=Dhf#XIAx>8L^g>z>F5f0&e zoE`>MYf+tFyroN2+FjyAlz-U_o}%iEboz{FRY6Hg*-*rzoO|N}Wel5>Ebe+84J4F49*Dcr4c$MWHuE>Ctw&R}x>R3~MC|Y@vWW5e^ zTArEx10%hBL?r7Ha^B+QNNK>O2HnY^Os=2hq<5+d(!q(zsSplo9gJr5V>s|q&%t&h zI*`rQy*QZX|I|AxwZl2$_QBZhs8T;Hm>I4d}vgDv9oW49_k_4eR0) zVuEODa;+-XU+=3@&fLa~*e;UZ)|72y)^V$Eclbg8@%ET&LG!mq#1bYf9P>ZKQ) z;(v0DDAK-ZZ@#M+_p$@$1L#1PqN3#sk>{A8dBMFYlllPm>RTYC+iQNHL%zZ=2g%mm z-ul$6#epA3;8>Ydgc{3CJn^g9f1mTsGW^F__Yht`1;k4ay1W7_5GFmvdzz=jkDD@A z3uX{s7mY>evu(GJ{h&W~@TLXwp+XNRm9IgIskAP zK-ZQ3OZ)AS;BB{PT8pdfV~QApK{!0R?xQ^-^@{QZ9r{Ug=r*MxN-4Ts4#JDGnlj}N zVY;$^E5eUE3bl3Td?J9$2)d2=nib5?IlV#W&hmYg(5&^0q7k^hLnC?qFM;h!RyV5W zim`_+=rlPCi`;FZhlFOMzxpd~x>1+oWz9C-f205|6X=Q`A^i&-CNo!4>$x*|RYK>` zk#;BLnGFo9Vx07@Ko_D$N-xutHjgC7I0j`D?FwaL;wKtcFv!Vj455qOUOB^F6UG<0r-y zdp6TC&jVIgsv8KvWdYr19sNC|I%)+&!6F&P1dq0+kXI~%rC)+&GqesoY zTV0@yDH0>Hj8E5f+_H1|DALW7;NJ}mH_C)FZ^%i-)*LptDC}D!MC+vn#LEV{85llz zI$fs9m9JUH(Vrk5Lhcjq@G4WkTmLenZs6}Ske;Qe61rjK|0|Vo=wQo(f4F>#9nsIm z7^7Evpa3;h0J!X++xWwwuMYqGUSFoCFlz;!s4H1RB7x^G8^s-0orDGi)ceE!NClo{|bN?R)7r)6c66;~0^>oBkeVTq7fC#IlVpSQ-K03ar;TLH8dW!dp}v z_nR#L#7WqYvshh~!TUhN+;|HfSyn^8B$Nb(p4idQ<*9W>oQZnHReWQY&9eSGiIjJN zofty+#9)3uf-d4Nebfug=Qt95k%Ld#}FkJ7Y}cx?UNWZJv*T?pKF%LTeOQ&|7>pg!iIWx>)g)~y9@=lm(7xZD1e zN`0W3(OT5kg2sWRCWm0wSp9Ru0(lMxrXnyXEyhU1o|St;Rk0E5W4S?>i%k|vc*`w+ zX?G~tk$ye{!B%nQ`Z}C^bX(u%X&n=SI9@593l*Ct0OjH0`#7$F9Sqs@SXBNDRG&7K z^k}dpa6Wtj-HNilBYWW{H0{?p(Fvssqc2f)^a%_h4MfAllx24Rf?;R zlqfZh=*q_6`p7REqpF`Kw8ht^t_-+5pj+25-?!)fC*9TKua-IAX0b+V>kaYWXKZWH zdYENtGiYRpl$ZBS>1119{R+R_k@?TWj}X_zCx_${DVuRMXeR?MFX-YARBVWP%vXH< z!1TlOYPTxPj*Hc>)8c;KDNPu4yD8WUE=a8AQ7XP6=El^@JEC^5H}1K!l|I6!JV7B& zW#k-i`9OCTjl;T}aa(0F;7zJr>G6m^V4oo_5@qx`zXW#)GF%se!NPADDQ>U+batbT z;z?yue_z8qvqnM?`RkVmf+$14QNb4F4gA8VsN zk~w=h(a+qw2G(#yF`Bg;i7-yPjb9EO&C1vJ+%$-4yxR{1TmjG(_+W${vlf|zb4Ka{ z8!9(5#c-<;>hXBT*hRLoNnJqqftTstBO=BSW>%36y&+DOuGBFw?d|MCxeT%JYHpkS+n|pE0>rm*UmNKSe$RE=%8we!O(T?em|H5_o)eiZhE6QDU!qSQWOzdelN}rsm?C>KUG5c+~e|jbB%n{ z_OHlTCNj~Z1TFc_%`SCDNHxMU?=YDK_AW zfbP4?mEkOzOq!!Lddv~t?igPu-LN(&I{vpA_Gi|YJg2O-H+NsevE0EzzON9J%2Zhn z;}0>@4=G(z>1p%Vb1#4^3cBOV?O%GuQI2Hk$dV0ryVRaETA8Ru#ccC%7@g4)QggQ; zzdnaFxK{ptBm3nu$v3>R^YNDD`^`9&MbrFMOZy_=ih-^(InNP!1Tnk^!pb&fNV8R_ z%`m#dRW=@88|E=et?25EM^~coaqcrM2 zL_>&OMcA$#)qV(qx;0fur}2`l1O98pJy-)Bz?B5u-#Vt`0#|pxcLj;IXudG$$E^*E z!a`=o5&y-)C^b8OgSc~=$Y+=o4{Bip6uK153cwXKNIIYq!}B=0OT{10D5+ zY>~L(g_(XoA_)e5^LNWaUYq8BYG^-3vw_e&62RG(`W`;|MA4YKitutD=c`LN3$dwR z-0~Rg@M&U=2#8l2bcHAA*IC#0hpbeJk1e4J$1~-~eO0vIsV0a9kcA;E1+g%t@=4U= zbxw{gI?}H`Q)*5IbY9*wqWt%l*}9O%j{BeK^DC@g&V2A3d1Cf~i;wIS+dg0X+Wri04B60EJpa|Vg0D~DF& z7cC=QVru#@v;11aRwZm}&up5D&&s`Bmy>BR2L?hiz4RL0>c&pGryb7RebftRMLMKeZ z{A-znxF)IcUWDo&+1QLux8L{&N<10?c#Zej=ke|6SR*pa7fUrhjE3a~{@Pdb467a9 zOaoTifU5|)d(&;0ON*21QH-igAxlxwKZX{P)33Xl;bE29?Br0?$-iVmtfYV9?=G$M zMo?9+XD9JBA0rqKyeyHOcgH*53@%!!kh74JM8&s-A-G@co>#98-=j)fHm-zL`U?IIo3eIL9*0vq zzXI`o2Hgp|!u{jUY6eVQ@|WVjS&@3Zxc8!T!?JFS3l@pY#Aw{&&C6#lm4x5);2o=` z2?Xh)x>*ryw6~f+AMj%6CyN5E3h1)YE{yj_enKJbf;^lMWBcWA--B8k&7?r&W$PJU zcN~R-7(FG3a6Eq*(sYoqMxi>62Hobe%At>GjWDNT6m$T%s-Vj?T&!1Oqpdtfc;slF z;BqC|;iF*^MR87|jBB`65t`56%BQXK`-{ZCrTF7GtY|@=->9}FnnlQ2DvW_>1u$S= zs0O;^`xjjp9${mDqO$*bMBxw89zm$0=cZ@7!UTRZP(hd1Rjbo1eRP)29y?8He(j1* zMG+(*tjs}OCg?$N#;XRuucr>WMxR5YEeTWV;|EbAYf=v2@TPl)Z-xi;Yt26u?QqTg zaTeTjEi{Pq#nJ0~(j$F{RNLXzqlVppVH#QQ|5<%|2;@NnbU&VFVTIqkQWX^-i(O~d zt)N9t5_yQPzj3iUNUSDeJ5pCMviYW;m}$97l^74``#&MSU9J~ea{9%rN>GS$gY~Z_ z=#KuNWgGkDPoAkkw;jrAC)L}7WHuW8KE6vP+I~h#>W1*6VvzFgibC|sq1FJaV9>|+ zgdVVP2$8UyUt1!tS^sw*%Kw~iTA-V(HU4fy8s@!~tx)Y#tVM0;_%9uae_^{HPM}oM zqHhl`c(?}#=WhZ?&EeLnlFw=t(-G?E^|{)~#vVtS9o%PuJZOXN^;2kYO~V4ihf!m3 z-RhSDw_}fAI&#+~++G>k41I~*4jieE1W`$cr=bFe+3jZf$|I>aX#WWF2-x2h!J@N* z^@Gm;=LWD0Slyl!&$ecij_HtmFP9DBXGV{i;xP^zy|4`tebVuXq#1J8QY?5m5&oS= zEq6-$wf?hi%9}-?JQ+=h2N16==*rZ*B`*}D^w&DBSvEV#DoV=G%}Z=i$_?B0dSvpG zu=8=+{FL)W)>|JTgiC7uih3HTY-?NjysV^TM%!JtL;$#7KsQRy-khU1-0ApsmuV&Y z^i)6CZ;JI6{v7(BQ=O2kH$?BY=43fj%GOnk8+Af~+P$rZ?i|J@bDCGrVk<|&h8*DP zf$lV&EOu0ku)cX8mmIElCOhBC7XHSICHYy+>Kc3NGb-V%hqs!hvd%r^oEU7blKZbB zSD`nQ(`#Z(r+r!4vkSo02i^XTMV6|cm%n8gt7}%1EzFq(7lccKKF}^a)BC;HCf-^d z{7I2Gse?|p*S6M0p;xF{F#lKj6_MKNbGNwjnLBvjF#z4*A#OAC5;C6udQjsXeIcbsTelBRl@-pk9a0zKTAkw~W8~TRHP7gtas{#Tzx7J$~c?;xz=_ z$Ewp48J1b$g(dwE*UF#FRJU6V0t$Nd+7$=hJO8~UN84tb_U7X;Q(ZnzVMda~hz^ak zRk#Dh-Xv-{ZoTOTaNmIu=x!SSwhb|h9+RuuoQ2;Q#Mjft>4j+c2p&QPs~lk9RtK`47$?mvxh$&ebr#&(Ox>vwC-0# zY~y)J*F73{$63qx(KCXrZ=K#Yiq}Rhik$q3p$)R{DSmHl|J|igxDH#hf&s^2OhEU- zvwt@oFFsb7Y~HYrq&rcn?A&80vy;Eh zw@aA4$+5yGavWgY_Z4*aX4&J`f0kTHKuZ!L2VI^ruSm6oy>U`Axw)0DIn0FQWrjE$ zO&Z)z+GPyQd8lR@si}>N1#NiX?_|BUF6-_Bc`yat4YDIznl-HJz|T3@zZl8J%MbQR zIVoM+QGgq4G`jHSaIt)gw(#Qbzp|d4*=bxF58MZb7&KhIG#LVmMz9iA6Yp$6tfv zLp#z!sc=fqpWt<24!YJ5#Tf~S@UD`af;DT45f(-0zhOp0xWA@_)h^nHMSN;3L%gPg1iRvNX1>%9GpnbBpx)ERaDy!2sPJ%3uASloLc50;>d-J{Cb zzYbrAjLJMwmSLaC)Tlhw!1Ikl$r{ zdr{YC$17N5&C|?YKOs)>EHz*=kjyc`b+6W-TgVge&;pOwKXiJVM%Gh9G9b6Yab-7d zol6nDRU7!5slFbjntZQsdrP`zv(cVrfSxFGH+5_?D1?^yNtT4h6^Pdcbh)wYUqv^X z$@z-h`>q1+EQD>!6LTO-APW(47)mS!Onr2=3r$Mz-nhCnoL`j&CKFI-#$2bVC^RNL z+eS13!T!P)bZu%v5=oT%@Yu7wGk3!R4FX}KH0(!BFrYaVh-c$z?hE4O<#{ zoN(k)gu3@!gG%kSZFz#RZplCvkOxQ5wNg?ZP2h_RxzmLs9gVf@LVyaZM`M-Dw1U2JhU3w$f{GQ+JAoh9!+)c@naQT@4RD=6H}p>SaPNaXw%yu> z`-|B(%x-wrSovZ^+CsglC%)1t>6Lf(V|;l5-5VPM*Z(}#t{VfQSIW%Qyi~JIq+rPB zQ~}o+beZx^8gLR|qC3Y(&9SZ>97~Z$)S}~eI=?!L%<-?<^vGv3XO4IZ6Ryp_F8Ydu zH_879I`Wb#OgdPosZFbC0qZjt&{YUb%NV~Pf|9I>cXL!*;77dJ&SJ}Se<(E#o~xmS z{3Gb7bdX$=_@kA?^ZsyFRmyF1Wu;KwLDQ~ZQPa6B44n6O1>Fj5#?Ik!glXSAjErM^ zwB8S1o_GNRLq9o&Ynqi#UriE=ldA={8`3BayU)8NmGxx^Hj%De7@FWK?~O7cLNx@^N<@ zRQ~h!S?{C9kUQdvTl`|T67I@BcUZ>_f7)A7r!K%iZq{6hc}I`&OH!F%7wogVKvybk z0#dC@RoENN$CpsyjOy)4FJ#i0{=IaOJrpK}^ul{webRF+^&HFYkH{~MX32f0q4T2g zNT=Iu%jY@eyx@J^8+2{|pg?;@mC#J-*8O1@S>0DTN7Tq-^EA6$arr(1yla{WnQGmWom~e`4ym>h752dj}gJ1HpuXM+Eh4oXqm8T)$NsJ%4|ThY5Al~v;b}Z=*D8inxiZ; zf0mYJHSFf}o8y4QUJE-g4fNdGLssa*JAEB?dJg_rb=7Gd(|Ba$_DPas=UIL*gHC## zlWeZr3>;4l1l=<7AKSKC!Z(dt%9p6zr{3e*QioDzH<2ZL@5s)lHwdj3!E zgcY|~C;p$mblhEdFaHIbV~4OT{NZIzT-@+z%9nBm zWgPIn69T%46H8VEuT9a@+6G5X)`iCWh0Oig+>S^gsfjHjCIP*%mB*<9YSoa4S7n=n zgx9~NBg56bTkXk$vQIWShWLYl5ClHSQf}p5_Jwit1WU&ic8sTZ7vEuMF-NCW;`rA>R92tn7h=vu;Xu4UL05N4_y@`d>(3_EDA!axD)9?Amt-J^Gi_Q=$y`zJzCYO<%p}@X7 z0(42xuWj@4kv34Z)h{8HF8BSS2)0;m_g)X^pkxqH6xZ;Et>CGjqHEmi2G0AdZ2Q6v zi5fDff2a_X+wZ68pZUe|NN8)XFj)wEGyk#K_Bjlx;_t08L=jerhF8uWAME7l{U4 zso&b>FRW0QA#I-c>|dUvS$6D*P%49QvJM7sU5eDEwQaBQ;~%u(y{T^-ygMF*~N z^oQtsU!M*p-@FICbA%!1;hU(1kUU z$!}YO{)9e$o1Fa2YUKH*rdvK!;a-wW@sH=o$-p2(%2-26_ow*U|6%V<;IZl&wr?|; zQiO^kL}1MWqxON<~G|U@9b$DMQ6~tn1p| z-+u4k{XF0MeAj(H@BKaZK7ZH$T5BJB?PITf?7h!(uXUc4=S{6*wt`wOBmN6QakBFc z?mVZ>!$$wz>uI|0yRyKq!j);Gf;+Eg317~2oih@>{j>)Alf!(?+z$(LQmf})b~_YP z^0V`Ht@ge*A=ekE~XGaAjZuch;jhiF?&p%1)S!=&iPKQfRUj zYq5`>!}e}{pWnQmxrLIOB^Hf~Rw_Ogd0y>+pZbRR@$~Wh8M^N{wSz1M$G`PfwoZu&r$KPUja&24=Fy%?rbVA-radTvsG9$zV>8-q`+u?e4mb|Z}IH4 zVS3wZZ0ouQUF0T=tX!I!c_8j-c_=N1b9CSA0NaCR(U!NX<~6_ms5rE}+I+8$MzQ&( z=V~3o^R9p5n0YvGck*e$66h&BIzgR;$Vv9_lt$IObn0 zn$dHdO(Ob{EX_BL?%VUIc{|%pqb7%v4H71wx0f%@7@q3nl~<&3{iNIHEq051YxDL8 zZnL~1WO^y>kmL9`_k|0Krp2G*&QNnu&sBNvM)N&S_iZs67x(Mapq;+)FCB}K1^X}B z1gQ<#X6c_PuiooBPCL71$l~|8xkFpN&Al3QQXi`&}m?qv$&k6U3F9O+)Sf$clby2 zYn*on5Bg@`;A#AF?7ewn?mNfHr}jO~fB!0vFL~YgW#>zO(y!lmx^H6O;Ts!F-&o!g zKNcCPS}T#SBBDOnv_k8PB=9%k*?;!E>Q_}_e|9#r5s`|+!=ecUZ&uFz|T9(flj zpPpC}`eyRu#aD8o)CIRa_6TgV6lWV$Y2Epie_2$gg@VwflDT^y+fVc2v7q@T(tX{Q zaB3DP864=$GrBYM^&4y6xZGbmJMmBP^3=MOD(hIvJ~S_Qd}oUJ@y!A@=WV&~m$@V# z;aZwwAv^WXZA^|Uc7d$=TksR z{G0`^cWJ(jUooZ2^s1N1Cobh@JUOisDi=%*?}=G*iO;;IMkm&PB z*R9|%#m>5C_DM_L-lNkGCiUL5TWCJ9g#NwLWxDV5BgL7~^&;UfZa_oR+bvkmu(~^Ub_`msh=0%j_*7)rWV46c=-;B=9$l7W z*4DD9TszL$GgZLLs#m$%Y}E4XLh+rg+1G=obk1nEq+JiGbYB%4_8oCz#>NYNhNeC! zKaq2`+;oStsGdR7;@rY7mv*g4+rDFEm%YmxlV2_4*I4r|%rRUYu+itOM(`D{U0S2n z^go|XeDL%((e*e)D=Bs~1+T!od( zv?Ptj>YvL(<7b&XPSexv%h=;2ca+xO>vUhP^q1#myNh_moE*}Y9(DJ)uA*M5`K8jA zgKtA4*Y_6HS4Es}_NcWPl+WUi-Dh4P_I!OTkLQ~kdgcZtGsmywqkoT+M)yrJQWM%W z?Yn)iX-Lqtv&*$4C1gMEKd9JYBeq5FI=8lWo5SyoepBjw1agb)t%N?TkuZ(7wkTU+ zf3$o0>W|+l>Cfxwbl+^{O3SbuvnTmqvL=fDxOB^%r~JikuYe}3_rHTTw574=<+VVkm0;=QoN!-;d&Y&nScVuW-7RTfjQEK!?(|BTCke+MMeKT;^QA{N!u+N1q$}1ftl!h;7}% zQOly>@$8(j{BQYX5nQu+>ErH9y6?#5lH_G4MvLlYbR9XGs~%mD7-d~;W4^`g(ZI=! zsy$M={Yz$UTWEIqGVAQhz*Vi4yV=_<^;5%A?u&Y5dzkL~LF;c8-FJ=oqPJ6$p8i;& zm+E10W+~6+9_s!2>4ZLQvWU0CAr3cS!+$G##3l}OM2(-7ccFiB%e*9`QD`aPWK;) zzO^YdJ9Om_x7W8*z8+~x(B(1p=CeJ#a?S52k~>Bl)H3+@%N=-_N%=% zC*Thp3RPUnl)pg#9w(RX+j04b?4&20Yt9r!hi$0W5Ph}ZLpA2;Gr8SzM;-R0erL5& zxjtF1Z(U5IQzLJa(Z}|pdD)tMQ-}Az7l<)$dXqz+2fs!4y**XmLZ_!*HTmnEo6}Tp z229;$J}eor?`YK>-~87jY%b|f3JROl^b+D`l^~Z*Sgzvu3HAL?I;Kc7t`EqYcHdgcOc8GZc|;x68p}fR=bpaniK9{FM9K~B4OEs zeAXb>Bq#Rd&V!xHR3bLg=j96MzB}su=I;$`;|y4R)yBL@k-K+o(5j|S2Os|^aQU%y zz)fRtc9>1wRoe|g{Ks-1cQ~yqXc-;9Av#v5gxUfBKbqB z?{-~f2@&hJn0h%*V`0Gi%`+eLm3ZbaQ2J4GDlKwy*bnEAI;P6S5kKsEFDf_8F5^ww zR+l(6iRSx&?%TrG{?1^yVA%T9Cg=2{bCyeQe8Vc$+9CR?Z_2jE$)fiIt}cGI|N6YN z%&ew6)zNatd}D^@P26gJcdp{E1*#4@^xsbw(tX>Le2$)3_3#Jl&DFJ>^Gbt)Z>-IH zxcFS0UfKq>WPc@_3LoRD*2R0gAM@saIK`&7L&rE^c(Psfg0=Aq_nIa8>Ce><>AsEM zle^x}Ia=zWcH#PTlWSJl22Hc&uI4Q@I}~=jNorl!DQ?q(hPV1E&#Z2Cme^c$HM@Q> zY2_Y?ce{mWXpPUkpiax-5#3iWF)P?8bcWJp;X1E-Mji*Q3M#mr54SRIP2iB&CTKBb ze@1;%j@s)r)?K~t4=l1eWZLYo>iLGw`FDmY21U~?>ED|c(R~Y#v1BM*yFFC>$$&SN zcgF|Ww&kA>$m_Pc#AYhyX8hKAKj2cv8ssCoPI>V3<4tDu;+ytYM?IRtQtWiQeoIr& zOj>`7>ApWkw@qEz^*n#`9UrChaZcjzEr)&;k7G+v4B(PGkijjV6!Q32!^743f+EE| z4j-~Mt*X!w__^?#S4hMhVTYc^CYtYKx^KJTigLrGs72SJ+@ozaFFK+q7yfFz^!_r@ zIiqPiZ?`n$7M9(QC^IYE;n1|{z#X@O^$(UW@LIh6&|CIHfk!z`?4IRekDgO{lry>zL~u~t7GbTvYsuQBF{)!tay__ar#>TjH+G&gT$oV5R>)`9sW zW{On{VkhkpqmMUB>At2clhr$lKWp8N$>P5EW%nbV{>`}&yfv}MZic=w*YV$~yYklj z{HU0Rd#n6H0^2^fI;ZbEAbo5$ye(Sh8b(cko8T8FQUK%vh+t+WLUnrIi*l6P(IjKdKk5r_XDY z(|zy8cNA}LQvI>|=7r}4ycX`mN}@5cD#pL>zCBqtqc!(yM1H}cG3F#gznp!Ygd~z{b7ILnZ{Hd!OOi%C#gC-HB`U9M5O)O zmcxQmxSUtdeRlG3fZ>9;!1CstpuOJveX_JCx=d%=ZeNtYw1(#Ul<2HZ&bVCB8}(>QL$kRZNBp+$ z-Tpr7`gp9p<4zyvHH-hid6+YA`S?Pq;Rj#Refs;}3D*ToD9#k#qdW0prXJ1rIo;Rr zch-A{&%OdZM|id!jf)Es<;wKGykcVE@$2S!QLiH(xN69pDcf?iYi+e@V9^DOdRODF zZl8&6BO;X@yAJP8kfHg$p!-I0hnx^+51Ah5a$vKBs(G&Zw#P56Jooj8m9NzfC|#;I zZSB3c>}#6d_dFe3E|8ydb8ndsOU|ZGu8KvC`nGOS+bYJlEnQB)UtJ9>j8tEb9kfjf&# zY5lFD`+91+)M*$_ddqe3aOP%~hZnWxNL*QQVw~mh`?~xa#xFB0X2xxAn;Rgo()+TY z))bMd7oB;fru;+iQ+qsiSbQ6mr}@65`<53b>l@cxI+S)uFX5fBY{Q%KVL4Whc&p=9 zp*$9o&iqyiw%8@HW&GE*T>D;ktZ-Ss_{;^tq0+<)IW=uHDJP%B(R^RgedEs**voZM$g-ahvuBRNxTq<_{& zjO@BF(o;-7Z?EaT!XjHl-Sz$M?){}PZtat#XOS0WYGsvv`Xp@Hbw;-0MwhTbwf~nE z&q7c8rca9(`l;gI3Mq2Sujjdxc)zdZfV)1eztwc#cM45IYDs*X!b&C{NS1f&G@seF zEm6O<;$GF@zUNn8JUfy$Wt+M0v~}S|vFA@;U&3fED zR3uM7Hix}Rq&vv?mgL4lLt%bp&t2xh^$ttziUPUyMd;sm*V27ECe^UZty0|J9kAq< z!OuRKaP9+%azUZ3y=O=<+6PIzl7^O~ED<=v+5 zD{W}~eM|Sf=NZ*J*Gj0SDqNd$tK{>g4WDQ2pEl%QbwoO$X6d=Wq6q?u92|#Uh*w|v z>FAi7r#N5PYn94r`6nV;f^M6GL+JA`b#z~Gv&92y!+Uzy^6QrFU+QV%V0q5%SVG?{ z(c_Pg$|mUEu3E}snO|?t;gQggxzAxvORibj{@(*({{BBC%q)ARiqZP}j_%vuRd22} zuH+|IZ zejOoZTC?(ddc4z0!KN(9Y3B=+JVXq;{r0eMyrTJjp!=E_M4QH6aPA)*zsUQD^td6Z z=}zWDF8kiPSI)Q-Unt)1msx3dctkcoZm_a(>fAErn&$Fm?S(f5erqjh(OS6gFwOTP z-FIZzqC$0LY`%p0dclI2i#;m6y&NueEyriCtDBbO)hz2TV3&Q!rF%nROKwS!>dA+8 zm*>oqv{2aeU0l#eU-aB#nr}VbcM^Y>hJwN*x2cC>w9Xw@FLF%!bm`b7ftDt*kaMLe z-s&$^Z@aGyO5dR7u{mkZfdk(!L_M}2Cwu!vZ?{p}9N)E^G~Wig@45TSG-D>uFfeO> z@yyC&agXVuA3yUimx`vUb-HBfEqdM*5G35Vxq7FDPjKv#3dL8_XE|9qbf(|yy?UDlPCsjyY)yL4i3mNol^g{O+t6Z~ErSv{|nr~9<{lM(~2 zC(+g+4ZpXq5K0x|X{=s-p(XLKj7Nl(-uvjAwEljk`zp%Luvikj_k>+`;Z6CMAyXza zDk_?lMUV8_MrYj}N|!q0V$jNVT&7^v;rMS)46CE=71r{W9JJ3{)n$Hq^-^>C^Lh*2 z_hk75B|FQEfcLTI_V;(HNbl6@E1%xIO10x*{n7cv>e-Umm?Wd$*y3OsD^PxD zJ=c3~NAram*6kkU#r^cp%~rZ^U_Nj2T9-UW>C-Lg9NG?UX)cj-9|e1a32AMab^2S; zx8D3h=O8N?16S)$*O#7^2r57E-LYblZ*t6GOTPH+O|G;Y+UUMng^4G(d-v?yJ$+~J zt`L*P-)oH?DSegIp%14Qls~r>kZ(BPe(d}qs%P>)5^ zW1c5ARG5Ui7d}4S*BTM8)flbnUr6h3JKcAcKyI*I=2bbh#Xf6UZM}^gI97J+#%t7> ze=qw|Y`Uf8f=&CDG<(m2bs9t@UlD4o19T zp?otWeXsG@E-M~CQNf<$V^BuF4qLK~hN8-OT7SRMeRUjMdOb_s!-b9uyl0!gc;^}a z$;nw+gVG%Xj+Vuo!o6%~gZXrR^KUpi-OV;zXMv$z@1w>tosT!l<;4V6Je*=e^X;Vj zMyMXM`q299xBT5G(@CDv^PKkS8_Cz7se3VLgSD8am_T*XRf+Y(@BJ3C?%VV3YpPYr zUgORV#hRvs*r&HQDdlI;e7oqrc8|_RhAdYXKP$v{?_%u66Q^b*_`jYJZnW>X;`a;{ zRpU=c6r;j>=0u`P8A60JPGZ7Ak8k0@{2Btvf=*ZBLro7W0uZCuYeJ!IMw*K(_x zm#p;9`EI&z$ilu)5tSXGQ#($vjJ})}`F{22vnjPDdrgi@AGBZl@%G33ab*gjWi!`K z*}quz?$LDD*TRP-4w!mO+4-^O*0PTmX#MS>`!34db0e}yJ340CXwjVU`UdOMhG)*t zYuXr@GB;G&$T)(_eT%fTS;Rp0E2WMZj*dRB>@3&bz4EijS!6VU*ZA`;nr|=N_pU|p zG~GB$8!vvbfL{q8RjAxBoo@4+$2KJK@O8)fE<9@pD92yie0sbIN3=S6#DxudPgc_M9i;mz&Rze}R8DYN zSkU;ktu79Vv5Q?g#5%5-;_q&;@;_+YlMvT_Ky;n1;zvw!x;Yo~F^1pFu{2I;f z@n`t1DbasVJ4E;Wv`*^f&7Yatc_%8lvU`?xtrNPDJoypZGtY(TbM%f#+w>*&R z)i}Ml$-eSyInU^xk==_ATk?s(E`W_b1(# zRp?rUyXTb<(c5i57p&Lx(OkZ${#4|H@}u1w6_V$lId%BX^RKc8MZEIYvq`G*4YIH7 zn~~wbUvgPs+B@D1=P!IT-(Pg!qOZ%nh_jpq#x#gneqbm^(ke1Fq@(>e!KUYN>@omKZ+ znB3bOGB{~{#pP6!#V-ZK7o8j8R+6n<(Hnl<>gkAFhFLHRr-r;tjJMSn{gOwAu1wy) zcQO6Xv5wGv7l-tSG(FLOpWhKz`Gu{myHaYw^|`@C^9>$Z?&WqhP203lfww+sbo>u+tDCGV+ZVL>d+j@^MD0hDo;)~toolJ| zmXzZ6?YreftBxtgZ1<@6U6apdI@j(|=nkPPBb$G$*r3*{8a8EPsk!%CnlB6a$Hb@? zhiUS)vfFz@?q1U#?KV1s=48Z{zu%eX}+vTEzhJ^P6^iaocjLI z%)#_m=Z!~?$)9#OoqaE*CY5!fI$zWVuk@%{Z#^?NI(~>=PV;4>`|_`>etXI*WB2d} zn{>r8v->x_wmJ2`d{Vm0ugSzhrQ@1MQCUsM>-JriGK<{ByCrs}edg?5SE0x1o)ski zz;JRY&6l0-Tcp9iXxfZm-te~ix*5OYYuLGa)#I3t-4aKRj~J(nb)0+Yc1=NygjN99uBAV zmxu1V&a5QrsK6(FsZi~(iSF|+$@Ax}=)e5iS?jGFx06r2442FPnzYbqq9weqwC21G zyvBCSxNH}XWz01zhonyijr8~Radh8U@r94y7R*o5zTU=X`sjMu=~jbvId4WRw8b6y zmu*zsJk8}-QCQBWZ=)@)XHKMQu>RPomK*55P@H8>!?D@!U3+N#<)!=HirF~0tS{iI zG(S(E(ZR;>(^B@ASGS(y3mF=hnWm?DG05Rnq;_=EBK3-a=L(C1eA&Dc?5Ay5dg0() zQ=VU=Ukqrzd~{#0MNK=WhG|Xv9=UjyQ**BV$XwO<$v3<%eL9%U_3K#&+i|~=kD3YW z{nEa_Bu-o_SN{HL@ELE~y=ON*bS$|Ud5`|*o%rd#`-LXD2%b3qd9ml`1-`Cz`W22_ zMb4N7ULP_J>@ToB5MfneZ!&ya%yjU)XKHPn^SXz{?$PVTAG+e7t*%%4GO2>rUje%B zlfgqBQi^*%9XeSlyt(N}Okb;ZQp@D?KcAOg(f4^>c&{{~dP1dQZN2nax!hwTzTKG* zCLZ4D>-KGQ`Qhrk-aD&lzJhdLT{Ct&ze$&b=hi%_>G-^2LP*JAN!iYDm)4W>=L#4I zgk7(D(6Rc_al2%T>Jcuxp*KrzhyEHUkgyONmQat)t)l-bbG(p%sX3yL+)#$PxqerJaQ{$D=cFfKFD_M zXBGX=X9>}LN51)_?8ykZmFXL1EVESPIsfC@i=lpx1fI^FeDc`&426bM@fTh129zp2 zkV^_Xr4_m7&1Sory~-!IWU=AQKN@dUbW@*B&DS50!p#X;V0EH2*9;=eb@74Ej{ zg=U0EJn!Iy_QPvVc{F_s_xaKGq0=z@WYgB~F_R6~^-pNZ?pYDf>Pnw4nMn7Yr!Zi> zA)DP{j&qcg`rW#(ob!Ly6@OaG*LjWK-DQKM#Jel2ZiFeU;@Yjp;k9?JnrzFo9krA9 z`Rq9C_oP-RbEZA*yb05NpTC<}dcU0Ot+HB{TFT&74{x4V-=v41w(pa_TkO?XV_G)r zjhdHVomYIznuJRy+0QK9HnHT%B`5KSRex z^~e@Ej$#qXg9=?c0`7j^?c4I>pt$4>r-tM%k^YQe+m0TtRa|WWZ$@=e-h3RXd_kX= zn?(1W%Tc~Jc7NubBWFhLDfP{C8C6&4shn>eARWtd_^yP=JRQTQPku>Q3$R~$I`Md- zq}phiH&@EC^RpvHxDTecg>0tvSCsC1@tE0`_(7GH7r*sVPW=eEGygY7n&G2ui#2s- zYJGHnpfW?z()&?zv8+N;#a4k;QYk<7CfSGD-<6WDO|Pt(_>?{_6r=lcO4s<$^AEYM z`7-pB-xH_%7dm{`yfGHmXe?cuwPe};Dv>pj&nG)9&6bNb=s#I~u65Y?-0Rlr?fVA= zY}Hp>Y^1;Mh|_&{JCum9ZrK=p>E+p7tahcmrVHByES!BuWEvX0_auKk!aeJBUV}y3 z__bM2e!L7`aW3HRWY?*{r{Z>}j0pT;FTZby;d@QwR3$2}dsoL~P)53rRcuq_00xCrzCxjD_m6eHKuk$ z*OkBldCl@%o#~Y>C3Es(gsbl*?jNe2eZroCxbH7o<(ob2`~x9{BZdze#kSO@ z4_C-c`rLGI^s5P*&xA##g8W4rcA0P4urbJi?T4*Wk5NgP8O>Lg?z`X;JNILI?X?we zw@kXXcUlquoFc;woQaZ$!xMe{R(upqQ_-32BWrK_B%b?{P@1@u!8IoZ8@|@v)v47k zi^7V|(0t|SzLVH}RK+^w8tcCmZsK^f%z9#^V8*Qo7DcX&r?>`GL`?L!*SwwOw^oGX zNZ?zK0rj&*;`^f(Zoh9Y=r@|br;fvm<~x(_yIuB3$D7~Pi4UtJRyHJDS8%g9lO>sB zR(RHEbHav9YxkmWQjN*AN_mGD>=-BY?MCIwQ2XM(b8qhWtgpH<*LR^R%~zi8tJzkd zaZt%nQap8aNy((2{jZk9ac(WRW$YwlWoR0gJz1todGmg6Dce*qyw}3U zQ)Yd3&#HLMsB>cN>u23D=%wFpige#almZ^3rKer$ROU4hUL*=g@t{ywVF~f2nd@)%iiS9ZzgFNo*TE5?YX6qBkd0DtR}3UPFcMYtge+ zBWvl(Py5zCxtVQt!|C%;&&u104WDI;mS9FTd&jKdD!0&g< zKebGtH%cWse~E2^x7({o@fC{$uK85+1jn9N4`Mw;^Hrt$)^i&kt8u@6`r)hRVsi}g zO-@G|2z(E9lascWzOyTN+0)Tx^DA$^L{z;$uji`l;Qle3E#pYSoPyg9<_`k58Y$7o z^J;Wo7k(F`!u1DrZVEV*3j5uD8PI#snyYj9wiV4a!`Huf=RG#?z3X|;B-D7mkQ%P_3==R@_OYs?ziN4Q}1tPPru>oZpn4>A(M-NB1qTigw_S|6tes zR$$`uC34rha>5Kd`Sl$kHZnpM2S;+Tmf-Efl|EJsj zm3Cymo(}FF4(=>0n{n*C|AhULec0OXc6UYD%*nzs?w_!azmfs7Et9}MBLQ;V|G>S> zkL%su#Yx%OgN21?S`%1UL}}VTW8Z)4N%q?&#KIzu{c;Plu<$YW;NM2XEdLuPK<*DN z>Hqy+{Wp%|pLXaZXJ?PyuJciDoB7Xq-uS0=o-zK1B|xqNM;BX9VmS8M_zyE@jF<$N z1pZ+OkbBj`VV4&fBMRt(f3asrGRziQ%EB_~|3kn2{5*2-u!lz%JeaX5g7}NCKdu+A z?YoJMos+AI2UY)zw#?>C0{_wpkn7&v!DF|Jmjg?e9W%!MXPqpPv+|BV^Nn+6#t{Fk zoEcvx0VV+^fw2V0`>wNxlCSM97Z#D@|F!R^#=ce?E5|(lCzK=?j~!%opL*V<>i-jt z?XMieU%6iX%6^$`nFN>wm;{&vm;{&v{&5NX@ti}=0~=)h|6|-u`g|hh&%R#GVPU~f zFZ};XBE&D{=AV8UC@20!zrWHKW?LqK|LF;k`_0wXb+^+t78dQt|Ftpa|MYDBk;g}J zw)gP(=l}nBZ~sRgKjZa(Hvw|}EzSM&_gCq)_&)b9ey$R~MYmX3#NhMeEei{N z^63BHafD>QyWJdI$#>;X-u?CGjsK25|Gj;X;~2*I5J7JLoxjf^``zL2XOGBt$7A)s z*GEQU5+K)02Ch@`9A4ha!ZP{4={{$Y|N9A$^I_HX=kI9jQU0s_R_O2d`d?cmnfmqp z`Aimw@~?h2{*|L8eUbU`=Xw3_{9O1eeP*_05?~Ve_e_AiU+r?*^~Vz>^M3X3c@6wW zM@_Dcy?e>b5(`T?KkI+^tU}tkJMD6}b^PP|{XhO3AK8X^{p%z^&QaP#)<1r~{qJy} z|8Y%{AFbo1tn%-0#D5+u^M59Rf0YEtJ@|j}=VC}ZCl4iiCzP1eVm?3qlM~2+bz}S| z&Hk^gB7Nhb`uLCN1i3c6cR1PO=j<%8imc3^%l}7&`Y+@`&abnRC%N@mH1QW_F@NvE zUq3nI9>m|N@yGkbUw8ZWbNJ&u$JWVHX}2qjuNHGn{`*}4%n|=r6Cn4D&n_1w@+m)$#X%8n)hh4UAEdPpsCl=|SyQd3&mW98&%j!R#pZwQJ z^k2UxB-5i?|9tL;6x#o! z-*k{;+qH9>le-&!%j(4X5BvKz$=`v(yqE--1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv1egSv z1egSv1egSv1egSv1egT=brPst$?->LR$2U6@@hM|dU)EpxG1~qw%_UK-g?(X2A zBc(Q1%EM`&!*0hpQuCy2U7WVN?snuIJC2djKVM|IlAVQx73G9K4gc3N8#FCStD@SV zV3DJ=my|{pMJeqSrEx;zr?l6U#sy80(yF21KNfDFNoloIJ057tl=ha=#z9k~v^q*7 z2O~vk?rL-@UCJK$6(%LCa4B9qw z^6>gfY2v8wr}o=HX_KKDqE24lP?G8tpg?W=ooY7~+B{0@rZfp?3n;CJ(j=i-laq&6 zFQrXGJ(kk?C~Z2l^OV+4X;RS6QQ8k^Ue)q?c|^ZLLZ@~G=V`y*DgCw)->B2@p_ppiqL1twD( zJ2d>qG8=GF8aLHW5t=d}*BlR}%|Ts-(#Am}`%nU@I52V@@fFh93Rnyp^<&4fpgUHPNFn*XpxjA1`YqQ%mY^_Z7Kw^ zkNMy{G;$3~P}?p*J&tNO4H~+|vJhOQG;%)?O@nCUCdNya^3z0J8ydO($@>S1O$%@% zcye9Oq1r7%J(P3+FC|LTM!lUJ5MJbcfvjE(UQrskw~3|$rciyEOKD4>*`ZV9`d5WU z`lkzalL}t*sCIg&yHVPFN?QtTJEbk4G<|5cl(rBW{$nu!Y|zO4w1{fA40TQFIJ7Cv z5ZX5CdRa_qM$mraoRfP;htig#egW;sy|aYUj8RX7CWTU$(pI2O`X~eRC~YO`q>tpa zl+sqA9)db~=~LQj)XBDTz<|lhT$`+FEFy z)cG)`v~|$Pe&xXmN;5}Y6URpGJM!U1Vp|Wippn-qO51?CAvAK|t)?^!)QKOt$4n^A z67@l3O71aJO52Ef6EyNNqckhjZ&BJBO4|f2pVHP++Gc3vSjcM~rENi-?3dhk=9FfQ z`Ve)z>nY6!+AuV7FK(c;t*B3-_CY?x*|2O2q$zD9rP)CfgGTPzP1Lsbs4GzIHdER* zXi}86h0+|LO`4`mrFlX#r!-$m+Y4<2rIF84;^ze{DD4oX zc|)_Jw8PNIwd(^uVgr4YN2qqbs5ens5Y=uUw2Nc|yn>;TT>QXx9GfA^V^q8SsFVAe zaGcT(p#BYY@;X6j2T}J%&g5D>361pm5HNxtxp%^$k$w1sJJfY>irO{+T0gekiZYVY z4x_#f?Z~xxn$nJ-Zb5AuMQKN&8AG#28BJ+{sB1xUKp8`6L8#k8b3}QD(t=SBghpOx zDJ=x`rGQ*F=P2zM>Yda%kEOKZ(2|fJ$uW-7PN2R6?MRO2DeWZcemFLg&jm^gMSVHi zk$f&vS{Uk2slLQRBl(4c`;?YQwTplj0gd#XykC-br$8$DLi%)>Y8Q#RGxkCHMBYQO zn#G6Q@OX)n8v!p~?Y-)1I(R_;4<6OYHsqXQ ztRR9F!eAm00uul$DPb}Lkk2IYY)?LmX9My%C;`al=5#Mt~aXY(NsQ11X>YrUCLfDh`wYdDajFKi6>=Sr^G>cga*dq^EfeY9LT)}P-01ksAU=_012gv)~0dNqsL;nUkK^OQAx|C81#EyFZ~#ug1-JnZ7zcO(AK(W9KoE=vLSO=z2!w$M zm;^+D7!U`O!4xnRNB~JN4NM18KpM;dGC&r{ftf%aD1cdDHc$q&=<{1p2i}1kkPGy2 zBYL5nfN~-rV=Dt-28_Wfpa)iiuQ+Taw4Dv612X24268|VOa$clZ7I+PbFoauVDkYP zcg=*qJdgtlKo-mbws;dDV=(gEL&jY(;0z$+t+OBwka5;zcuWC&c+cVj9DoOm1Dt>t zaD%n*3`P3@l!3qtbsyjh_5nX|6#Gg5mjHQ>yaw$$NCQ{FW#9%xaopm-06s=wIWPuf z{N)0612?c5{W1aMy_&oan_$~jU$ifDMpwm>3WRLO=ir zf*xew2l{~(_GbsSf=$2{Sc45{w;5Oh3t$B{f(&GG17w2hAQz;89B>m{1!TOI4I!oG8ISwNiYqNXM8Cz1IPe5FbgQ5Un)Qq%meemLZAUIfomWE zB!d)i0Yrn#AQ8j>GWJUaNq~&`E&?*nI|JguX>b;hG2JN;4#-%J6X$~+Z~%84lPB;1 z&%skr1!~d98c>V(Dl*n91^M7UC;)ds4%+2{JfMT+C15d_32jjMSC)a zB4Z{pMp_5R7$_d=E&>T`I~53Hzx=p2G*JFTsfJP==)-FX2tnHrY)77HuY(joo~Ow3 zQyRzwdEhF@2kC%3N8JHgAQfbTTyP)U1qC1nJOH=AHE<8y02$ymNCr2-I-IwafQ+ve z05VoJMZedfU*_OFmOp@ZKo84HfdrTZ$k_y|4$F5L4Cux|w)QLiV)$T!7Xqb{gB{=mI0kxgjD27L z41yuh26kfK7C0_T5Qn~90O!GC5Q}wWE`W^bm!VHD;8P9WfGY3`G=O^W5JZEsU>LqD z(f%Xq?|>VQ=@2|ru#c_K$@dF~(O-XX1O#H8Axd2^5$iSqWt4 zbJ6ZR2nA#=TN3X9Qh>~1pCtKVKX%w=7uX8ez!K;SK_~pkJTIBoO#+Ev7|S8>S_*Fi za02}qtIx;sSX~osWq=fr1=D~bFrl^Sh1VeH0|THRG=eo~Lm2ZK#QuiCT&xoVbHFTc zpVkjD_ebXX$lM;8%exKoKrW8i46Fg`z*!` zc!J~LBWMOq-~-?V7qAVP`y#nqLP=Nw&y^q)*^s&bJlTjZmaBm`>O>zvsg3qzu8S-a zk1mi0?gDdYL?1;v(w5A1{QzsRZXF<+G0MF_3+RBQz!r@8ccV=Y=mWjrZ?o;kzP|xZ zWbqZ{ev}8mA>adifgf-Kdw>Vn0i3{2unjnX?O-dg1@>SSpy%j^tWuCw64*f_nU8&e$nl6=8pt|8H|yWX^@m+e`ST;Y+K_P_PQ@R65JXA#N9Npc`~NZj#*1W^&XGNipPpd=m+U~GF2v?qNbJ{c&95AkRQ zL8y;;1!H+1mWh`y81vbW`ay6AkoEz2&h#DMAUbJ(7m)Qg0a>2|$hk}fSHTsK4z7c1U^cJ^^FbQ8 z0kS|Q$OdDcw^6?Z$bRxc9=HR@Hnrdlr~%dBHFyPHf+|2f$o@(}1$Y9=!DCPiiU9F^ z1RjD1;65PNdjTi}6Tx^e=2L?D*!E;wvJEMTM%s+kNjbJ{8KsZy^C^}||4IKyJJJub zzZXCqJO|G}B_M77Gup7e6?_Jtz&k)PtpoL-88m>8;63;Nh)(K_)H2b?aua9)yny(9 z1Ee4QpbvZnq%Xao3y}4lpaT${ER%BVm`J;B&;z~$(st}vNjp*}>qwiiWwPxU#E+aa zx;N3DfnhKN2EhOrYeV))>SP@$i5KZV*^cBsww^4L^(1R@ZH)Pv;kqaDB4nPH%-52! z0+~Ns0gSHeAhc}%1C>u)vk{x{YKvM=&pN|s3`Bu|pX z*f#V$>GiSoV z_9zLYz60fU;0VZl>5h`j2kZtrfirLdF2EJ+0;J6z3Qv?lAQ1S1qreAvgG1l|*ayfu z@(kez_JhOVAn*sIT>v-&$mjhz(1bcU4m*?$fINFdgD60rK~AB3jFMy)iuy4Sk2-l4 z2|?Wvr2{yL`U!9xjMXDh4+ml3G>8Ob`@NtZ)PY*?8oUCr-~qS~Qb7{90xp9;_KWf& zhy&-q84v@;u8Fg#6Ax07^LifT1wi^W)+Pn@WI*~z{E2TONC20pWwP!n$OUPj0NepL zK{~hx@&VcI8X)a5K?b-1NSo_`Y)iHw^&F55vHh}lkdYEpp*G(az7N~f8?I9Mj3(SOVBR@GT#{k$bAxtlJt?xt4Cp(+%HSfp3JFd zpl*kH63PH92crxG2T?zSvIvmx)>c8OTG(ihqeqQ`Hq0>gN(u0P-g|5X!i|tfX`s;zHLXn1z^`Ktth{MHXwuL zuP8~Mi5D#X*FDq)eH09VKF|ZY!FSLL20%Zx`~xL{=!4)V7^dp%D2e_XknK4D@%jbG zHl!_CPxKK$){SXnUZfrIBON6B9cw?f57H0v`9rQNZq&H|d4?K$ei=LeywKR;A&OEM zkmKdR|40rqfD|Ct5c%!L7I=`~h>&%hluqj8_aWrBBII`?T!8#`gp}mBBjk4@$970P>p<^4pOAhrREBifUQb z-eAt4pn?fd%pf_Ka~5+1)B%Q|BpFaZM9euyOsJS6=7c$?W5$4D&Vo6k{$KU(dE;ev zd*5N5b>I8fdS|UV8|RzquCA`GuCDIhLuW;*fGUINJPDmEq4Onl&Vk52rH7)~!MKC)?NQhd;>Qd4s$_v=>5q zA_al>#*<{|!=Ik~NuSZ!>7N59zd=5Rd|)7`KmP7V{{{u%--N62^aJ^V=)3(v{v7kc z-^)OR)Axfw5g_t?aGTC1fEnM9@1$1ZzyCRkEa)& zpUI!I@mvO43Q7Vk040K~@SS;h&IQc@%?B;!&xLp{0xbb82bIHjSKzq{v=X!$M0Jo2 zuj7C3#&aiVJ7^n-+DG&4Cj7k>v;~v`+6*FW2cEk?2SEEl#G4A*2Qme|7tiW=9>((! zi0UKii!w=1r}5b-P%QpFfhXC;anMN+`F>TJU=oRQT=sqY7MCDVRcR`;(B=<+q z3lPbl4!Q<<2YLdcw%o+?I*89zN5`l7YXe?mPT@+B&I@8zADLc#6Jr3q*Ah??ce4r=Ff z&{L4M4r?OlnSsiJ%t7TrRX`N)RK~Lcs3OP;WC^kW(YZAG ztR6^vcES~Z+kvWsTtGEJH9&O!!5UN*M3@uE9#jWJXT5AdwL!H&gi{#~AV*LHbVTHg zzuoxfBv)(v-3mm0lG@S&)CANVln7lk!?P)fo-IMd(*{ou5b0(+s3-pJ0qPFw2I>mx z1PTFv7d$)je``Nm1RnakH^>M?~d$v@Ft z9fW`TgZx0W*73#D2ecG_d*VqpN9B`$rv6ibj^S@QkM|s(4+P#9e|v+7zamI$BVPCn zU;URopl$d!tuNMsXdS;AQqSqB9({zZ(Zi0FnH|LB&x9$whK#P?uH~l6yRGs(&n=V?d)pqd+4; z<3QBcluMb8=R^>dL+hx?9Gisa6wp)<$uNXM<*esH{Xh zNxsE+E&?q8%?Fv_Gm>AcTkZGgy9@C-J*_}Ab_t`;h=)EWB6~>!%|IQ=crFJ~+(F}r z=1z)*wDy>S&o+ZLg2)~>fL4Rnf!2c7fYyVwpKaoQ(^_mSi0tqO%B1;-`gI#{8q-t< ztxKcuq`%`p(?Ic{B+z+$ClF6s7oNl4El@@*{v89_g?~rmxf4(FFKQ5#fv>PKAAx5q z{-$z>pVp7s@0|t@eV5w12Y+jMcH?iVpLi*cpyj9h5S2mo|6WcizJCgI9JCK~5_Al7 z6m$f15Oe^v7ewEs?@+w9pa1(Xo`*p6r1^v}`p#}V?}AR??}vD5Kc{-AZ0*14JA~8c z8F*^Trzd?z^_&5n1yS4Y;&}m-0lEgd1iA{k1xf?m0o?|rgKmPZfNp@UgD!(Ef{2HB ziH~slo1XMJl|g@NN&7u2U;AAxpZ5FO`suqwIc3tyL;PA=nd#KD2x9)6VF$mmmuPO0eTL42Fh8+|E7Oy+e+ zkais8&x=?R|NaH~2Koy6eGCnOeSE=ZpF!GjLSsbB|GVAi=JW3;m&UrbJQ|lYu5ym4 zpZFfx>km*is4~8z^$+>b1{$+@@FX8*h^GN)FutQ5x2E9Hj$5toknkO9ySA?F_&WwX zzqeo8=5SzCwlna&;G?#Z+y(IW@3L#ZPxq{ff#^hME9@geihj|-P@wOWyEU%BHwL= zrzMDTQq}OJxYQcY${=n0S%u@2tE!5>Z9%m_lsBaEYl3V*bYILFrDvb}x$Q*!_FTmeArM#|j$s zb+om2w{?=jBh-Z~TUY1@JXmWb+)4ER_Lqy*JVS%N_O^~- zV<&TrfD{}%{jK3+EINqC$<_|>7kJEpbZs&1dxqJ*TRNmK5DOqfUc7DZeQdxe9YXUE zHVe|jUsZ2Ga; zgt*$;**dWE4kW?Qvh}_NjqB#GLn!)yh7xxD%r24Vd(~+`98r&hBRjKz{6@m^F&2wY ze0K2yf}(5@_LW1gQ!lh!_iJtWElo=>1Ui+^kNni zI??@&3>r3YK;80wPbrkPz}=7pL+7OkJ@d^kv)ZST20uLddmK*CEYiDd8ABbS@(qg!g^V{pPxITm^wC=&Zm0#_@DMyC^_-($yMA34SeWtHkq#&? zOWFyWf1yPD`1WLPPPPs%fDAF(NVZkk+fH5?G<6u~ff^{*B1;T>z5R6;r^p&WoNdu} zjx57j0!ZVf!Kcl>1b<{a%t9Q&L-j07ta6~ktkoY34ZuRCBdG_gLnAeq!3(Tv+QRTn z5_qUjVLOe$Qye^vzJ%A>TOe~h5Ia~rm^uIYtINJr20vJ@kz8pq`OH$ad-&%$nEttO~M$2bSQX|qG8f40NoZu)}Zi+OzTAewg`OR;=fuI(u=Wl8U z?ZFBYo{Yv%%-bC|(i^45qcm87t%EbW4@(-I>Kzi4xBkP1B!MfG?aVSm3N1x@TB9@? z+g^8qg2y^K?f{Pq8^BVeIzpq4z)U@|&#%>$4VnN!OR2y0M;6%*X@^d2BNLVoW4Gr` z9m~+RTsE{+Y}Z@BLwZXq?jBmwv|SsL+Sb7i#nD}#l0fDfB{XsL-qga-Al}Z_8JJ`S z2Tm;={cFdP?`2Ix!9(K|5>x>~cJS!cUh_j1KQ1u|&>}?Y`7t{IS!lZJh54A&fm}9t zF|kJJG(7S2Z{u6UYC?DN%IIqIR%1CI1|#kx(vy?GA@@p>?_=*~DJ#{y@lj%}&iIbZ1P;dLX0& z>eC$c!1uag2850Jt2B`|Q4v9ntuDroUe=N3AB-Lv!Q#@Epq^5w$FtnYozc!ei3c8p zO4|a2Z1m>%sy`cgjxPj+_jXPRfVjzauma7bmd>ctXG+x_4crY4YBHT*rHGHIrDqF1 zuiDn*%sE~Uw6hNg`KlI2eSObYdmo`IEl{Pg@efu7%(@-8w^*vBOqkG0~^d9Kj_NslMG=lRsq3CARd7qh2K&1VvOgRkvubvvwK>z?9?SgP!Gi} z_U=+KW4S$!Gks$ZFJ6ingN`$k&o#r7df{a~mFl#EhujO0!O_ize`8nKH;Bu(CPKE)qPIIkzJ!TjIjbdqyx=_)<3te ztP;n0?Dgk4BZE!&F4JU=S(8~JW?DOi*%<<``KJIHQwjB))l5ka>0Ag=01(K4coRrv zAjy5^d|$fq;Zhya1_-t1L(P4A{0r^2)FJ(V(7aH&cCQZC)IBHbkVqh8*V3V33(d`3 zjdVy6Fi=Y)i`I^tzIji8p#e>R5I~v%gmhlo&TP=P76T_T9k8Cei0Wx>+}+Fl+U!)M zUjG|Xi|Y~Vpb6Ywb<|V%FPHT0eM=nF)uSKpXf;{^!A^PbOdGhUU)66%uP`2_Yq3V% z!D9uUg}aJepJx9qL&xI@gnVz`1}@QW%XihZPPK@*Jz~9ydBi#pw?{0sxE`@a|5+OqOCWBkST?Z^b|M@mi~kxu>g_}8 zC1yH*tsj$XJ-HaspBuG2;+2FG%!5W_hI8i_Z}Y|VG3GF1QC!s!2nKP&TK75OUCiDk zT(1hYSEh)_e2C_<5CQt~swmMsS`b8#98x_3yq?ha>`_ z$gX?Q=VR2pV_WHvtw3nhH@STG=pxTmF*@V|5b{XXo}WEGs#J%GI^;1gt%7;d^Y!~I zD(aA*Kxp+5;^9(sq^84o9a0vx#@4eu ztxqw}+B(?(fhWJEESur=K?(DkIMkxjNhp?5aO^{}q zskds+-UXG3$A$dA{Y&uBobqhV#1d&~`NItj((wt&v=WYrkS-5b4V>+>xd)RCk*b5F zC;^M#{*46i_1d+wkpW*i=c=@SMgr+ zUbQBUWxdTN)c)u;g%}n*3b7?$pGH-Y$HM4FSIf1%c&e372jNknF}`7b>KYAwCb$;Q z=gkn-+XFOVp)hZ$ZiG+Y24&aFaTQy&`2+>nl59bCi_2&Gou(B(#cycoQ)@X=y|WH8 z?H+GL4lGuNMssFYj0}n(RYtLdI#PvNkexTb|M)@URAZfN;`~meCOF6kJS~&%tXp1Y z-xtQia!wsoK5y-T;A1k8*+9r1`du_zyY2KD_;^C7=bRuH zA-cR6rNtca=?d@|18L=S1l0Z(RoewBc=_F!uEpieF`D;J7K~Bp< z8z0a~kPd|Wb-tcQhQB&D$VA8U9tg!Q1&Xz>{?%m9OdV1JVNgXNS-U*)Pq-O}6_~aj z8z2-x#!Jo?-HaO`FQ!HGd#*jcOVVybo5+V~^I}E@S|m69GeBb#qY4R@rrw-X;%o8- zvMTa#u$`Qv5s0&`D=jj_eYzVm(%8<}xxR#Nmz9Wn(LZcmBJNXh&mBW))Tft5yFb*V zrXw0;u|H(H3WWOfMr?1RJ|&A`lxX#qo8Eqm(r5-8S7rTxSbxjcy3)P_q1miZ*UdE@ zR=uO#6J~8&7i5`*y=_`U?$a$9vwxka|FN2`wA}RRRFp;5Bu2<66n^tOl9cU4KyVfGP(SZic zi^Eow(}5HP@@&EE-fHifZBQC~GWihwmM+3~DGt@|Z7rf0 zhp_lyKv)obA6EWuUY}Q8?XjHdakZsPiP%>u=PcDAx5_V(}Eqfe_Sd3I*Gv>8AssMf6Xq{f zjV@E9l6l4XigG!mK<2;zR zcZ07mN}DqHc&irf6DI(1m$h?*Bkw$_%-cS%d}$!O=gt8!0#DNw@pEd_+i44g<}8Fw zw>c77>SdI}%U;EG^}GT?GsfXZj` zXk4U(8`miMG#d!@>7`!lF1GoQ^cWdU@&~Xgv1|dsVLm=F@TWKW53dmVi)_?hb|T`~ zQmj!;pgK4h!E%qYow{cFm3@WMum?vLBK8#Gs3rlDQ+r;999!7yY3H*{Z&+glm1`i?gt9sTnojPO}FAX|N0zw*n67^T(v=bZV1EKv> zXmkS*n(ME>_1c?f?Lp+L;6qsCy%z|Lg}M9fNP$T^u}OiIQ`3YtsOuj7~M%l6Fv!8|n!L zLcK8W(c{6lZcn0Bjtiv^a5@4A>A-2GwM)02f6@LnN5%pn36^?IDDxrO2@#4GNe4ph zIXHZN_WdS(`muVLPkaJ|=Emk}M-v|%EQ_om`joA+G=l@e$oCqgj39z3LjTRR7C zEE5yIinT}fZ-{Pb-u{!pyya=;vIpnsK*MWJ?Rvir$hHd z+1{|{X)o=;J{VcZr_i}0O$x7~{0`<>lDcVKd7Q4d?6v&cm|s=JihbEnMR(FQzR>Q6whph`Fpc6Zg$ zrH^Op))*BUvNzTwd_OQcw7bde9Xg~PM}`zUTHR*aoVmKvVt`ORUq<#QxhpMon+{pb zk&1hUX|fl)tkfZgfgrfUDV^Cv51E~~uS2qc)C4l~QQDB*H%`;cq?I~{PsE-PvtAoJ zMZ0EJ)v1x}t6mNmI<`<<7uj1nkaqe5L7FhZDQ?RAcX3;>k3qdak@pB7lqKjLyJG)G z(~M0r;)d+TQXn)hw0aQSqUPaUd$fp?v(U zm@73~>u9%T!m(r$vs6s0vbExGoA`)u+qbkYKv$pS*_g_qA3 zEa+P2XnTe*d-GHKLRvfAfy6i+U6}kG;djayu0B zV(es(MjbMkP8pcCdEBGe%qkC28V;_|I1SOD68yJf`>|^~u1{;tBw+i_e}5<6N!eHZ zn?BvwMAlBds8!{L=3V{~5-^S0<*I+gy`ZR3rUPXj8mGz@0`dOPQsvUf4wOqHM9d@T z1$zhKIR`gsfCl@%=+l>7+BSUosLM-el>8{-UQs!}h)T#@1u0Iju|B zC=vNL(r8XkuJs2Z*@#DZ%n>5C>*dYmx#Z2UVd0CepQF4Ot&Cvt%ICPqVXp@djm8t@ zOZ{B@yhK@TdmNtG?CJ~c`0e;ahC6Za9xX9YGe2R zCxZMAi|i&BK417}{^d2%Qi}O7&*8Vx=opuDcGa5r{=-{V07B_&L=E7viNsH(-5H&4 z*@CF8VL)iXf;e6w=K$NG()P8HXXg^vtCk=Bavu3!@_gV?j8K@jJPsc6(B0A8Nzrv0->1VS6ZE}hR+fk0-@6;C~Xc9 znt$5#4R|&xIWIEkD2)jxmQArV#xtXxT-vzPy|OD;uKymTVGa7{dK4uPOU>$0h-&aT zsWikd)W%O0sj3*bp+b#oHlHbXi^8y85}XQy4g_`pkCfFx&W{dD?V3>U@Ho;n_aWjj zSI|RV|9oyg?X~@*%7Ho_3m^#C6FT2i9dbSAyjq8}20}6H(^DC9Bf48!%Lw^i@o2mV z9vbzj?gl3>t8Y?oGua%aEFd+36fbnIYsIX6-n!Dn?J3)ly)!XkWtQdhg%ejIgRX69 zTOgHC+Q82{of^JtI!=d(WfRvU=27gbK#IW&7(N;jJ z0`YPjHDSm6Ul(=l2?0X;KdlR;WR5trl2!%0x5e5~_Wo3l*!zogfSWLi@f+ztEVXh= ziRbUu^XIu<+&>}&mM9!Q$`SFOq_(jWmnLfIpLoP0*twfLej>WP`ZDf^i@c_V?bu2E zfKY@VH`{GcfsjO6V{i*e0Ad4V-ui?ZCi~pK=#Y&-Y=MN;IG6w9j>ThiNN%JSS-iNn zZS2HSizN{Csl6ojZ{q$D$6~o@kGLLjdz7OmvUu^TOHN}18QeO}|^ za&J>TwR*BQY$P;vAK$;-bGP5-5evgnU4ZPVIj6$w-LtnE8q~%oIEImsfG2sro|!Yo z=jpm8QCHe3jtnT+ASn4oz5zPq91vR9Z_8Jr+tNA>=@bYCDP{BCbEJv=kj1kvR_dnX zG4Cx)P`-2xpNxCwc;rpvryUTQnf#qR3%DCJ|7`}00z#w2@=>8@Pn>*z(?K#29FItF zD=>A>EN80`ay_KcQ$T1wJv1tO(($|ZC@aNB;~QSjKF=mI4^L12uH|u*%=^f*S@y-~ zn#W2m+O9>MBzGXSP+E%zp$?Pp6h)M#EzJ)INziid=Fe{L4`WR$>)KhG0EF@s!^ao7 zKPvB#=Q^H^KuFiCdz?;rxq9du9dZQ-^=bbL=JS7UJWe~2Txw%anI|x7;ix8~Y+QAS zD-b8}q^S!{XjQb0BqOBJfk5g2dHOZGskuL$KhVmy00?=cxdy{bo=iUeo32j+p~%6f zK(R#iyvRDbdL9Fzmd;sYzI2a;RV^J-*h_9{oAaGJd%ZXAqC;$fSb(Q;^n)hG2j}_f z5Dy?E_2i6~^QjlkUXm0ETgzD+|)jccurd71IG-oLW z2uXeamwL(A1F@9nV;Xgp76PFWyy<=KS+^Um<`zPw9RWhUkhbRO{$1y%$7*@(r4PKG zD<_6a(FaVQ>W~WkWR1F=Xw{|ly0a>+1Wr<8Ak+&fNqf3VTPM&C2k+BBAT$>8H9KoJ zBI*1z9WoUNMQN}1pL-Y*=)>b)l5H=Lia?xI)5iFuEh?+yxdDXqcD+~u(41LE&XlGwFN@jsnC7ru6^xJ57F@q0zw|?o@=d% zZFl+dTpG!i#7k?na7ves-|vjm@f-s}z3mcMdBN8cmnmb$bx=Sh=aI%orCJ-dE)Zg9 zkcID>;k)I5RKU}4(;=Dm0<(Jz8VXG8BVtw4a;{SeSUmd{D^l zB8-Qf4isxt+^1q)E5|!@!BJe#-?0#_-qaeFjF6&h-YXY(=vb((rHT&Te zKRg%xceJCer$C@=JA<=>?SE|yo5Ok=c`59f0ijX9>d1*#eTFQ5MF?eu=xkBI01eXU z*GDx?JXrK1%~`bb4Xd&R5AA3Db<&~X$@Heb`2%+#G{G z4No68JiWCEL)adeDoECwyUDpuZeGJy=y)arp;>d{(vvM``uX(LA^N%7cw~`CHgQY; z$)5YudhYMr!JkSK+0Os3JmL(-|K^td{XYFu&h9_eQjvGD7i8urrpS$K%6Y!rmX;d{ z{^zYKM3}P^w?{e4=7!@MXx(U+tKJq#{ihtUxIJR+{Ll0Jv!gyYnMP$E z+OHRDM|^7HpY1ti+5VHG{(s(flr>5^5ciL01n188{?B{9-1Ndf>ydIJ!9P2;|1%QU z*ojWu{K?+LvMF0H%|GJPCSto5&w!#h#PJU~Z?V*336$dy@|KFF;r@c%AI7P2Y5&{( zn|O!gWrCb3xmsqnb@`R+%(0sKH|tXyJ7o(Y9Sk2KuZP$7-xW3G)U|kBX`(hQc>3|i<2AKa>FCCQE?RgC+&zNu(4CP*?>$59k~(Tu{k|n z&Ox3?nLa&zY*s;xZOSwvyK)_f5i&A9#ZG&rHfyn4hiE3qJig~EO`Oy{!5s)Y@FKj+ zgVK(Jrx;30Z(`awC3fv}@F1^D^{6%B5kVm;>FBII8&ys6-UY%>KdT}F!c}+~lwpai zYdwx+(2fnyg3g>M=eTC|SZ&aHr9mpYE5dS};v3}RH+6~cmd}>t?3eaFhVEuV&Kn^{ z2HIQaJ`pNkHO`P8GP#j|@6o4~AT^zT!zRwQN%C2#?)_i=`Zitl2?&3`Sk1|Ddm6ky zwB?MEb083yJ33AZ2ST~^yuBQ{ozK6H_IBw^J&+?n3IVBEr*-xhPZK(4$1{y|>eW9e zSl#aEnrm+N24?`_=ePv#>_IOyoFeBSv#+-`Y|-tn@!;XvJTa29w7l}UG@Q1ldpS^@ z-Kc2KP=Q2r|j^y*_5V<^P^RT84qndNI{|g!9f9mk)|taA9?xUBAvgc(y%oc6dI_G z2#VAgFL+U=?A@!_QA6eIzhzTp2`U*r=-W9fD;zwOX@suV0ii5tzNd3sLg#Oy{3w@g z2M{A5$Irgl5#O)T>;)<6sycSKT_E=~Cp`}A2RN>(fP|lu}$}k zAckL1gbmq(=GgJ{vvXdPT~ld5EN05Owr{k;I&PFPMJV(hCU@+n0bv>ENBhI)PyI;# z0J&qTX9Ez@^(4R9TT*YGmJv4UQ#o?5_QG5Bx|eOsBw**f&+*chjNR94&5z=ACW}tJ zItZj@wj;Q?gG;TZQC&(b^|Fw9i<8KkC94LY0<6GoZ4OtVPipjFGqam zE-Ez0KS=E-J#Sv{Q{UsohoUrhwuz9dTXK`;%6h9e;Op4L+X?fyY|xwdmfRfhkcE^A zJ$v!lENfXi@F5P;QjVN%bnD!K@eAps1&u8DUMPq0XgxU)x+RBRSPvf3b^5GMg|=0@ zw-E?GjjDJ$9Z{N_a@5I?T_}xg^w_f0mNA{Y(02n6?kRFp8b%f_`{K6{_OF@N@Oc|Lw?RDzJGeMs_7q0blP;~; z{#4BowDcwr+B1sSygiS>T#4p6E`d5EEHcP9EOcr7#NmYpUV6e1*4t$l$o5uX+=G7U zZ8D8mY3#n4xPQcVN&WCb6q@MfT0gxWao!TWO{38XpXiSg8YB=}D!NdXz#`3H&;0k- zv6D~k0LH7gay2wS5Wsw5Y4DK6$E6u<`LW!kBE7MVy$DLO1VYx^qeJ1a>V3CBJKEB0 zIP&IQ&mQxa&vkowdPNAiPLw_wAiFq5fu$G1ap|SAt^8Q*|JU?J&BJGe4^mR=L zl{OqaCBYNmW8`!0Y3x3+Us4vW;$^+jY*do#*K6*T3}?`u3)k zTHkiG$ad6I3N6iQT)3j;nleS&Q+3I-GfzX&M^0Hsop$&@O*CCm_Jp~q?cSs%= z5(9)wAl9{%ET1|`YtX5DTc6HuIv%kO0>DFY?}jU#3SRYk(OJhc2nhMAq7{ZlJ3L9H z*plBVjt4^RDf@D3@s8mgJ%R8yd5T*)89ZbM9rrBRZhoy>kghawFNifNF3obKY*j;s z#PyDv@~Hso;r-*v5$|qKTvnVs`%H&)07CO=t+l?7KSd=c1K~X^r-fkw&R&_6eU(Clo}qPbhyn>`kA1iF3( zgvOl5(D7sQB_E`<8Mo1QK*|8Q=hNX<>f{RASPVRc*2!~;-KkQQ5(_sksN*pQVg#O2 zk^Yyex4&>ohtvc@<8;C^3-jh)AL!m8w^27BWQi}jZ_MzqqeSuj>`lwXr{>j*?gW(w^8s zPXl|rqLD?Vp&mc*n3HT{vX9LR>Vy@TRyIZN!faGvZ*cPB8ACtkpshzx+8_I;+Xh*q z6{1vA4u^f-uhWhX5Sr_oIIOR{Bh_?~4$%N1A8%8BOyBv_4z>=0Rf(GLTU)}n7m6Zpdv}GCaj+aR1pV9Kn^R;v zQ_Lf=H!myR(_;a);)y~8<*v$iml?9Ok=#H3a=#vk;1)gOQOpqoahDYD{T`Y508i=Bf_Er5ZTpv+5P*2mR52mi}@Y#Tt9QG>@CYyZ0cz>qQ(xC z_HRAxpeS_|#iJ!Zez;M!^$Eni6xdD8C$?mxWqN);4o z6Ba6^et6t`+14n^dGlmI&b<#N0eiMss=!AgG0IuepMU)@I$>JaQURYkMlIhqW{}dCR6Kttd+SWRsH6>B*fTR2qUB z7>@@>231aeJg#Sj;y|#yPDx_%n^ya99Z3+OrV`^EghL-E@N_eQF= z7dFx=hsGRu#BV%Qe!C=TM}yKRPF!BL_nKkTcb-9Md_PP4W>V!@lQOg;P#VR(j_akC zW)-)wbr!iXducjH%+uz^ew^>NnYENzmGVqWKdmKxr)&~RGeSM}c8;-m_$J&~r#I#I zm{Ch}lkXM34{|dkCI4)ywIOMS`{q~bTjbpa2pw~JNryZCJ8cvs3!%I|(20EAWrFC3fpG+UclSBHq- zT`PXG?`V`(o}@l_YUa3wX|il=Mqdh~5|9qtPp-OGZ2AD54h{mb05YNd2D2vRBPr`a zJH^o3T_BZ##LZmL#p-k#W!-st(r}lIv?}<#+_y1Zv}-eH#~O$YcvMXWM85MVL48WO zC(JUr*(*>FR(=eGTfysr9UO!m&}jUZ zU!r1rQ$HXZA^EPiGl*R7Oe;Me33b^md&`0oniaU4yu1Mr9@TgQA-}WBCeO+e7mkuA z=eacTukV=ek-g>At)nYudlybK#P0}Lu;iSwN1}iyr{B@NpD*VOXk>5|jkk-c~9wFl=xJx)MqW-72~#<|L) zo-Ahwlb{htDw`ZwoOJ!tD~`abil)l4S$D8pdaTjyQVe0USt1bf2iM9Uy4`jAF|q@a z8ax|;lm)W9`20OlQ}#9H2qX~KQ(?dC-^wNpO`Ni(n}d!=jEH3m2n(lVtMsE$=hM3b z=V2d1E1T;9*}GU4d%OH={tELsf*IWd2-(}K%?*~B?C4&dA*`i}rLj0fd>c}?hiuR=X!2Xn1YsiR7EJ<94~y)DovdQPkzaeKtF zO*$x##;u$4&$?>ga+0p4ic&LgDUjfgmMHEYL20l=fewHu+5vn2wecZ&K7F%m{Pe_v zk16MkGX@k5DvkyAR@>a@O)P<8OaC@5ZBANWMk z`p5MT?_p|?SN43r|8^mM)B|0oa4L+?GJ@YOgoWtO3v5*YWYA%GY{$kmbX)$dXC7FH zgF8#fi07=_{9>Hq%9V{D-yj;VsDH0vaUMF^N&+bZo?#{HJM7#Qe1)}?)l&lq#bWbU)y(|-#Gm#7c}$TBgkruQ zi(QA;?pmjo?v0`PJT++o!GDQI<(an9V#9k*CAU9CX;=Xw9FwXZll{TE=Ls6OyLI4U zwLG+R55f%8uVbYuR!7pv^U?Vb{QiRCyWE(+&O~W6|J1sc9C2yjRxj|7cY)^-pEYqsVI zxfeFCRnNL-`e6xp2tjEs9H~87HQ8m)oy)8=HkUL7LQ+rpP`+GP3_F8Pr|B>jIs!2Q z^4IH!H?Ey18^?I)n5xtdNGTwlD>^6d`0i7fmxfGz1Q1gok0#~snmKzn?OO5G$2g7{ zE{Qb`ZMbTgj%N`^Y=^DM_qkU-8go2vlB+tGbBUv< zhIr7@I~?iIr~USwQ;yJH0U?N@-*e>9)unI8c${sf<0*7fuIE$zI^WL3=YP!+_})rD zC=#;1eQ>nt{tFaEQ)xh4IbyMGw`ukHb22yr?R4bGvkk8&bof%@07IA^1aPGGqBd<; zHXcWDB5&z%j-2zjX4|Q0#3x;8^MFv^f565XM{D$V->TzD;fVd@4O`yDG`7?6oaRX6 zmSY{PW(CL+us(eNgvQTLb&PAx5$hm+Cgghue=klw0EbqCOX7V$tk0YEAOxwFj6%WHk-YdT~M z5DSv+^r^O2u9w3Z8Eri)fmi{#8{Dh!=?6#p>Jaf*a6BzXw<{+stz6S%c|-8_grTKWAU6msRJG_h<8&&#vSu}wpomNaNS6m~%QQRhGD0I>^u5pCDj zH{a!rccxLoSGxuO;@L09G>@c}Uy+Squ|NDlZlunYY+=D+5tx~xC&XQ=Ud@TtfS9#u zWQjd_Ze$Z{RE!+CD90fyALos`xTZj?PH*Dg7MG@fnhqnF<+v0}W08aY@6)pW!E9FK zlH7C0rx%&lsK+ykt7!F(p8IF@mhZB>;_tAn_Lx?ERDDnn_k6kO1;v&+&?phu4(4F7 zM#ZJ&MmEKI>?ne4aYc?PvhqqBPGckhiocJ+_NsGJnwUqR9axp1e=vf@dwMx}V2OOM?Z!2EUYH+#wbikcUX%@| zofNE3Ujv~SX|2V8K#NxSf`Cxu01vB9ljFp_#)tM_I=QPOWt>@9r7Ro#i;E=M|FL(d zdR_KNCx%_wJYwKqw4cS}DkmV6nM>XA_GZV|S*tk$30ea&1+t^ys*IvVCA!DLZ+D2- z3*O+NDEgz*u-lr=n##I*a%x8x1qgcKk2WgqQ*k}wQIea|#Px_*ZNF~Fb5^TEedi4| ztrY?7(EG1l#qV2pQur10!Z&4)R|ZeY*$s2Bt#qVR9xIea+3UX_A272L+qL+&eEQ## zEyT>;*ucKh;L>#R3P0_Lb+9VOub@LVI%b349CPzkTVGw7H2bWtKX~|RSNsb^!%+`qPD4^uQN2&T$M|9M0!kYXgz^W`lOp$* zdi8Az5LyRAZ(-r;Q2GUkGm{sWNOIcm$m(G~M5x%OEDF#BMGU5u|FdYRtwYgX>AWZ? zF&!{3CeD6U%#eFwb;*+{9w+PNWm2;@1nvVu7Sf=|yel3;^ zeX^ZEI?{sw)>U4fTKGbY5lSQ50dkzzlX7;$t(teG?o0w^qZfdX?RfWT*)QaoS1%y2 z4>IgXH7=jRLf($-^J{fwgC;=WN2we9!Xj;a@ecjJK3;gU{bPeey3!O!7R$SYhA|e& z$$RJg$}7iX{IH(GC=v6d-j%iUmy_nkhg-9=z{9Oq%p*qhPr1d@*$8MSIZq}SVdstkQXs}bSVWAJJZoo<8l@J~ zeL&jzMtfLkdcU$wP4%~sHLCynnu@<5$wu&w`?B?ZDr)?A*Bi5B)Po^H^(eOogTe7I zcxdbu85}VD+TEYXCxVAXH5WK?#=!Vi$Mw&?@zS7!J3z{Sr{fNT5pfM%)&SudGqHA* zTS^rLX;cvrsu-zM#;}7|eBDdxPRc4vO}(I~12%rdzZfTOk63TRAIkRDcieij@smzL zHl|T{%hHeJ%+HYxTSBKbjqM7AB7Ept@st7cS@J!s;?{7uj9JzbxjN!;1lvuIsF^+*X$Rsgc8`z0xx-&dUfM`POVOLW_`-)5&x=3 z8h9vkYQ4rgF>AzP^8VzJpo51%C?BucHFZQoLrcm%@sk!p3GB1D^cAe`S3Xq8Y7gUK z^N-VGxm|q>7NxiRoD>d(<{$KepVIGru(?tED;SEu(7{?N{J8F=9A?cL|7-Sn(k(Gwu;&sHykqC7pJh^k*28-Q}cizPimXQ&k zD6I2L9$Cp}=f@-sxJ;`lyylzoZ*CkZ^lL^^|H%6WKxo#qx09N17fnrIQc zR~HD4af4a~ThB-;PB9WK!7vuO0iiK>;Zm(b``;sEf_sNZZ?>%iII0rIHF-jJg-gd?R=Z8vOGEuzxsG!S$>nj_=N75sW` zjHNe2*o-~{2+cp2x?P%ityvjbeb7lv^l1`D4jx_Od1~ve3?PWOaQMn`BM@3+6wml% zJ89C=`<>hEZFr~ASJ=mYwnjG2Il8GF&@^^J3vYS*Q7sN(5f1}U<-tH1bQ^suqf}dYP7~69(c>PK8%@$5y)3bv$}Oi-=1L2M<}* zr#5xhG(BGrBTLIO6bR{U;H~#JCjAJQrbCLolzA4sPB^+GV&67uk1T<>o)C42zXo4Y zZyUR5<&-qCUTBRpDjp?*H>Eh*ORlfv`85AC%X1wH7u~`%%3^=9UFX!b?oBCgP+B3h zG_AqW`w!bS9mPsx{$Jon(b_SY@;Kf8ykh$|(c2C)9-OYV$F(&X$?Is?Zs;cU(P#X8~VH{b$9T^t?7?Wy}#_El^9be>@Rcs+7Y+Iqx1 zSkL-W50me^xjvVL`bky+YmFYmp zs(^^kZBzpf#iN6JI#iev=Rs$j$wJV3jzGx!ubjK&RX&UUwAQ5g2X@dHNGTxU-7oZd z+A{)o*tJrJt0Dt!2C8E&YYzUr)}?+SE&+Ik1P0OdVCh`Q)X&Ks-?ijCs7H~9)pPy5 z?EM>?-ko3fV8LO!dTM`=Wh?x=XN5*fC)0|BkDnk7`T_Nv)jA2=cY@ z58dqDymFCwi(W8<)zcqcK(mb5sTqatj7eF~N@F|hl|RY#w4Qh1O0nUsY0X4AA^7VE zAceuBs`AzM#O)mv$5VFF0c+>LsL+9kQL@hWTsTnE+Y$)PSwLQahgMUYie~qETeiX? zAS?>_)5ucH{IDqC>}S~y3fr0tZ{4OVoms${SL$uCjryqAC2i@XiFt+8IqSO73XC0B zrW{v}-!i3x%$S^!OY>FJO^vIE3N(NEb@y!cW-B(&vD@IdVjp32aM!!9Ua+@#n$6Hs zeSaO#Vi#A1_o0A?+33YDa(g-?9&mkFcrtcUfUx&4`Kjd-l1@`onx?u1hckqYAN^a5 zd~&AWJB*CN*5>_kM?Q=mXn?uV?5k|))_77JGNj>a^`YSDw)CC_W(Fdu9i5~x-{jto z$T#rGv&PfE$a;gS6@HtQ4`9hBCX!ydC9OH-e5}LXCn1Igv|502q{Q#CB#qt}O{+1{ zX$9KD?7;00y`V1v)+H_!ZLCCTWQqIiAKW);TCfq<4#r$UL0O}g>2>;6>uZVAKxCpA za?)TGLRgmbjbsD8CpN*f7boBU&w?9tM>SKPkJO)brkn7npd%{J#ibLtN z2^EF^DgZG?b+;>LcD(4GbdXshh4Fu|#6Q@m-rLIJX>3Dr`g3qR_f@LUm=H4UFHv7d zcYir^2in7xjckM;-uV=6RcW4C1*J9`A(UXsN}J$MAC+@MuOgvBBH z5@V(SUoKJ zCAK%Q-|@%FjAo4Qhf0n+-al+HmBtqQxQT{4U2yWVuB>=u-!(HIA?(_e$X6kb4^c-3 zhWTlvN0*GJZ*u9E$)uL^i80}7B<3Vdzw8Rrzl_H`$NY}H8)hbCTlM`LhP}RbVFMV_ zPLmASjJ|!%gV++Tn?5kxVNt+*AT&-xjwQ!8%DB;)BgpD52SPJ??K9V2ZM;~j1$iVS zaZr!`EiAFO)b`ItUYc7A^>Uv)Wjy7(BIuq!_=DY?r^o#)r;ROb=a2*}2#}5fq4=O& z|MxRSdzQv(ib(*!bAclRJnQt?e_*-cB0a!1eek4;MrNDEiS(Dp$I)7U$+Z!7C2fc|cUTiyJ3laCW{x5)& zLxO?iYMjbDIq+GP$6n7YF#_2YnrPt;{xJWDN28xwgDb)@($vrye;tc?hrH*;!@pEVL zi5W$T7O;`+jqF-%y<(pj6&fBC4$n8W_shiS>NX4cXoRxG_9m7sH&F1eXY#4*y} z(E*u`Y`r2&j1>C#2-Of9pD@3eXeY1ugk9Dn$y>^^jCldsU!UIGaIast`WEC5a5w_p zof}IO_))ARLQoHR*ssN`c9=F^`o_>e#Xk{iN8b*#I>?RGf@mF0tzJ-`nS6S$9+C27 z8g7wbT4K6h0)(V4R{BeyHx}Zyj#RHU9j(Pi(-ri;fAC11&A?_ z!55}4Yv1we6gk2$2xaJpH22}_!?C*z$IJRuKNpP`e6l%sLlL>>yb9Ic zAMwVTGTWGhX$FdlqPqjwAL9wYQm$;}RXSDkgA$#__nx@1wg zv{sov-$j0&f0b@NQf!Bencj*8JFA%K>?8~DP;dXr)x@%+Dm}YbcSBALur)TIGdTTSCgs-UAP3` z8NzwmJu6C$X1QlW6p-AXL;=l%h6TgjP2y?OeGa!=E!}tdiO(9% zcA1B|M-rSP2BP2FSb;H96x0JA#g;PJ6k1Ap1CL@$S#Rs_NXL^GgB|Eg5KpC{rHWFs zmXZD;4WWxHF1jbEjko%OYYdIZ{G5Z6|}&#v_Iy=+xXf*nANP-yHylY1t{rexRDQV|bB z{>}*^8o?CWiO)vl<^)8}GZ>WHU`Z)SyvMJ6$^enH;{}{^pmC~y0z!PwAv`La(!J7~ zwm;VoEw`o`(;L&M!dqNO1<RD7@K4uyyu1hAqzQf z9)A5}L$l_b2eOUf$iD3L#*Lg-1n7`iK#af>P`9DSRZVtlAdrnrBpHY?kR>L?B8rb2 zOZ#Sgzhpa*l0YuL{?W3#_a};7xNIkYQ2!JgG_{%e!^vcCbn_9teG>>-VhOWMTj%*b z5%+?J&8N<0vIKT{rbNyNR?%J#l_r)NrC~#4F!lG(XI39RN17(GdYE<;G|I=q4s%(f zj-Ow6Z8lg_fY*Z=UE#(7?}fwQA&r*raec|k>$OaEJPNwzgW&>rXqNfqG{~d%`WHsv z;WjGh1++(@G_KL`sE}}KY0IsL^Nn2a`}=M)%gc69&0s~#*c}buG1Vo zO1HF`?YJWP#^znZxO_9Kr`JnQhXmX!_o^a$G5h+7KMl{%mY8fT2dU!7;ga<}_G>?r zRxAilC_)*)k?vPsRf!EV>J5Z;R$-$WAZ(At{a|y|pnb?1YI}Pa5bA||x4yRsNjaaw z5GLDrAmkH&1RJD;TQ$E0gzi?L7sTh^uJY1e`St03r~V=GiFED>65It+2BmEXv)>+^ zQOl7>^>tWD`h$dMps(QhPk=99eF5=BNpi`rnlHu&S(sNlCGej$5vUfrs~; z;yErhf(4Nfv=bD9Q)ciXt9vztreQ2}TlbsyYn80j zE*7QnMY?$RUvWQ}t>-=&$ooJ4^85Adgo?s%6JhO6_BIR>&|DJtC@5yS<+2$}2h0v8 z0ihLT#J?9cLGBe7h}n;m{szQaVT`P!0Lfs^gEYe{rV8b0BnH45LIKHOh;J zw;+4FwR7OcGBNR3iEE=8#rF-eu{{kuBz2&3zg2Z=XU+i+_XpzNq)~j^1x|>_ZxH_H ze(}n?h8!Q%bWP8{y})!C8*eiA%9;K zZB-2f>#RuWqj#stKQw2wb3OWWr7e%RRyREKWQ-5xyeZ;>-W28%K07PO#t{VxIHDl6 zjwh#Ve5MVzq0`EEn{v-uWmfI*_J?d784wi7mXs3~rS;6)qv#|WoNK=FaOH*%7D)BXW19l?OKjP8IW+w4y%;|T? zSJCwwXT`HP%&aB-@k3!RI$Pm15Cs7^7ND@d4GwCKw98(eH9vf~lCOnBedH-iSesYNno2PI9!~eXOeZfSud4>k>$y zFtYdvRv1~_Un`6s@u=tarZDO$LP4jBW+o@)nTc&43T7tgTHp7w=?@we`)hIRf*+L9 zgyFu*?MA~Ee;sp}vimSnWJ0kc?PsG79W41-cx?$E`!tjFDf9k$U1Tqor8+)sVe3Vo zfl&O0mg@I*3I5$iuCniS8`aF{(bdkEz{B$tIsE|;x^<2_0&T!U?-F&cv9({biP5wI zqoIX*0)bcnIWYEg?3`WgS^%N`fp*3NF$Hom@rLzQgP)Y+;_>KWAfQ;TPxf^qL|{pd83NC3Pl|-B&QD8-E!7aF`{tmoUb*-Jh^#Si&$#01d1B{ zH|-Hit+)zhBkQBP?005ed70G=?V- z8_TpK7^iTUe=ASH=X!-a1szR*#Vh0~XsrovDaca*QOHx!m;<8FKjcS&D6CJ(Mu8~g zDfllgeyJz-Y3~y*U0$^PN-GJza#gt7M^RcXB~Zvy@Oy{i_K4pGtZ)~O_kt+rVE>2v zX2>6~t!Mq;DpeEpvCf>d9eeIY&9Kkphzngm;N~4U~w&oS9t+_m$@^3s$6TfHsdv*DJ zD22LiuIaGq9rix7Ej2}ZXg1rDG5gnv`X8(5q+Wu02&tQv?mzW;+1onA2Bi@aFF9Lu zGj0H>weR!Z4;~93EfQY@x>$V2nQbkizu(v%rIf^Xw?PMm@ElsU-nXD}-TaLVw1~Lp za?a?`0bYP*re__>a z)+4r4%qKeW_!0Ml;5VHxfO6A6J1`o_x=y5>4=7RTB-Y#7-WKMgceag->VvPUx zYlD=3gMW((^$Viy^5N(F8x?dY*bu!9-$Fr!!aZ?{ATb9k+y>qn+&E#+~k!UAZ!?^nkEvunu@AKl&sNneX)gLjG<4OP`Nf^V;>0+e1?O03jbTx7XRa>q0x++G%Rb~yTtkzj11b~yOcGaizoTfDN%7D zuOcR3Y{T4WAug=}LSy@KRIfQ*ciwHFLsEgzYWHEI;|+^vrO($Pmw?b}_vPc+`J1J# zf2Kp8a%8Zj>510Ic9+*7KRA+E`JPwd)zh&XtCgTsYdI3S&|OOUV0_11ht%XqNQJxa zVs~t^)*(%Rl!XLa>wh1#+ocvx*J?}a4a5w{HTSoN8du-jMu$Xjr2hzUh!j zKK*;kA-rN4yxrmkqI^+?MDnO)- z$5z!^wCA)A5o=W33u0Z1+aoSb%p;af+;ig6a)XGa7VAK4Z(<2@Q;)c`+~_Sg?GZ~Y zM#Qq^Mgp-N1?aaqu+B{L|jj9kh+~^&4%>6m3=;bCsyKg z696HS)E)?VfAcvPD@QG!(o`p#{=D$-WmBUxYN_Y?3dxfe4}pbfdGx)%78wQ}OYnU3 zw7x1`oiRwqld~6e$P(V3s16UELrzuNLhX??ngXO0N~_eTal`)Go>b8x`ZKy#g8x*{ z{a-zjlpBlxKfV2*-pE<~vv!ah?=PN9oVpvZU%)$QJFZnv|5AVHW*IS0&N+*nt6_7N zI9nvn39auT``&UHt#DBas;jH3t7qZM zQ>!_Bg4O9^$~k@afBXBd_&0aIGL-YI&wHAB-TLs)ssHdbpZvc6J$!kLFCPocpFH@N zzw>u~>aToc_|lX%g0{6OZGQ`~S3c?f9Jr{UUw3o9}CRUGi7%{OXT< z?$N8oY62ak=(zr(bnE@P+rKCcE$=Eb>o^^H>qougvtRq!AEmOt>eBl4E>Hi5Mq~0# z-~S1p@$|_LeJe2b1gh;5MoxXjFrfX#oy%P0Jc~!i=F1U&cqYI26XW&Qa#H-q&?Ki- z{U-w3{Q{*KRzbi0lDB=^>wkU&)#AO7Ri=6J%@_a1^?bKPE%n1Mc`v{sLp~^8FwA@9w|w2am<7-=31biq@3-GB5e9-+ullzU$9ktuWZM-^iS`^>dg0 zw}AWCh5oagH$a~D zfAyKq_?rLl%6A1${+IdWuEV-X&LsLq6*}~uSJ@P%ecQ`v-TS$JKd*Y|ADJEU&%MvP zKkt>lxe*H@MlT1l5A~0?i;Sv^thCd`;lA*l-+1$HzW>XA{+rwx3#00Dp<2f1<_$0U zw8ziB_ZxL)iQ&jYcljdc!7qOMr~mH%`m#5DnH`B#=F9DukNb}=_=d+``mUeni@n3% zrtNj)eGXXKD~9{hdCL@g%j-A)+AGX?##eve7ySOWealxPJ<+173wSnPM2q|>-#z`R zU;Zcm_oezpb>3|Xc2-M00!DPI-}(Fx{k>m*&KJB}VRZfJhq=fXIV<6DkB9zz`m&de zf8#?R*K%~c{o)h$hRZ*mefz^7_-ohrV)f+j;EPzNzi9k{-}rxC`5}+-#hN?*XTC^H zANjoZKAVkZ($>QL>7QqQvEhmT`qme|^&Nlu(YF*v%b6Y-o1c&Q)DL;u!w>!JkJvBt zcDp_w3>N91FXmS$`10q!?>pb}=o>y$Ve~%J315W6zTjF! zoTtCz$uE2DC*Syl@a3=bMPOd`HE;jHzxDYqc_v?+-Qaf3rOf)FU-C0`!S=fE{edre*}V_{EsKrw%vaklZ+!lZKl|9P{^jS}FE?*JG}`HN)ek-AXK$aa zKXOe?UnQrCH}P9^WZLaDfBfb*zU4XZ^%cNav;LRZFCX+b-}>4Q`_3f7kJA`lqKC_|jo{Mc>GO-Bwh$xGeI!W7FH;@cI`WzvtQi;wn_j*kLxln=i5! z|FgHe-@Cr;O>g`lZ5=&x?SH{|v^!gkPv-ky`GNYzo2sAsT42B>qpI!OL{D&WA9ZhH z_}gcle*7D5{n`(?ad4aar+kq%c>g=!`tE0c$;&?+%1wfPR)w`x&QVH|DgVbpLtH8`tg|=@jv;tU$1|6b`7f* zMwPzFi97F!5chq*{y)C{e_#0wPI;hOXFd02PFE2ANpF3}lXu>$`sWrKJ-0j&zkR$8 z`lr*k-216Fd_P~Lri{_E(Lx>^dFVZ_{o%KN_$xp1J$#X|BQRW3*o=0&-7{YErQ_E< z?>=AbT#zph7W1R;_`};j@w9*N?vK-Qlv}mTBCGzVPAek3K9{&eqdUeE9am zyumVCt*6iA#*UuYKlDqV^1`?L>5IPbr{DRt#-8WrzxGG|>}Oy4+28YDi35D%3BlbIUIsK>q^jUA-e)DUdbu?dHm9!7|tv5aXhtGNP zEqh)J+}^9VulV;5fBDO%pZ-6;=;KVUzxwvAUwYd8_y6-ry|2gnhaURT*Zsub{(JxQ z8~?_Gk2iO}=AZSm-}S?veDbWve$3ol`kWX4mq$)N;YWY6`Mn8$|CX7JKld|_-+sZh z_xr9UeDnJ|Z7Y8MyPlz~`pm}G#voe8K5{eIy&YJLB#86rOo?yqJfu zNvlSic||(M(03;5@nJVQY!ADuJT+9uaq%c$^BBv5aX25xU-ri}&NX-SXgfZxMvK{c zF(2JoPVRGbeN|VoJG;}d;**<0Tu>QJ>g{IBCIV;lqw$`D>WU8R5-b7p&X1!od>cURWi+0~HgY86E)nY52y+0PzWdJZdw zp$r3S{Dcdd3|5;7lr~gx9CS?>s9+RNT)V60R#~+hb3xQ6?YFgy+}*8Le5JiccfdkR z*2|;C8SOOM?HehlBig5)%sbO{D&SCbyc+EP9gnz{KB2|2ufJE z?oK7{l6ULFc8tf&{_bw%j5^4|RwAR_ly1slaRm#!3s<5Be53#wwGFUQtm3dxyh-H? zP8(VLW-l?B5Eour6RB+5>YZ4c0`lzDZ@p`!&2_pze)$Xv7!JR3k zotYBbi8LcOShOAS4>e`LPMI7b-=Gpw%wphG>X@i3fTLK&8qMg)cdKs^V11Y|DNa-c zRJuWVK!$q#4!q$N__GzkAzy5F_cSXnn|47I=bqIo=}8$u8Iod%WYkea5~tIcxUEtw z^QsQpd5p?*CdF5559;wi0vb@hmL3m1#ak!mXtIbruthQWP`S_J8b!?srYNQjgNMO< zKe7(AX0Ft)Be@cTGaZgwrr>(1E*di}80C^W1{g-CNV5>O8%^uVjQ9+qD3_2HVBk`A zZOuXJQfihH0gs|EU(58l=vGbFTO4WcB#74<7~3SbqQu!i8%Jf)H}#vcWLJ~A-cKd&BrbdcRhSCUD7^b-cC#Z0xx=4@NE(bJ<>F_KuZ7aD&EeVn+R_Se_ z5=)4dPyr7MYIQ?yb{Vc_#Ksl;N}r&Tkx-A8cGcU#$apC{)5>W^ib)eH#+xZ9gF}3( zO&6mX&@RZ_DUX+!U|{2@j*wCx*;bai11>++4deq`u(5=%w0$zf$JxLVN9m>O!qxJl z-g>+M)`p;6wy$|8FV70)PPPS76cc&KAQJ-`B04T_mWGt(pBy>J$&sv0G8^+{CPF#D zNnH74X-4Sa@00n#nEkFTS}MW3G5{(QP?5b9 zWU3*PB6JYiNM&+tNeXJi10h{OX{jQpmrG5yaEc&FVT=gB$`6s|#!%2S_KMP^a(s|S z)ZTM~s-37SQfXrq?`6RfM`>2LsMbpK`1o=`)-YRNCx9BQ+O=!fu0M9``gpXOqd&j} z#=fo>=yA4e#M#{{W%I*Q+0T|QvWGrwCV0?r_;f4H(;+!7)CmB|-I%C6W_r?)oB4RH zJbowsVq|}EEmKU$4eAh4bjA6#8;=&~U4X1@kU3W79ZACgoWz;gNCJ-)hD29;3mF~V zKvfX?9=Tn>822Wa;;0U+o2J*bi6FvyT?#N9w1W4$Y(V1`C2D~8w3?>laxO0Dh7_;oB3Z=u8k(?>P~3uN{$H4(Uu=g0kD(k+xInN?h{$cU!4KK+nkHPH2#l|$d z^+vtp!LnoJoUd1n99jU{iLT`JrbB-%&PQp(I=8iHBlA$EPCgn{>zoY)ajty`UK|f~ zcX&ie6UOXtdTcA39spSqzYIq09NTXJZ=5<1yF1~K;|vgqq|9S8qFE>{*Zw3#T<#h9 zToHsQqR39f_LD|va?Eke3MGarGg3(sh~tiV%`j^@YH0A&f{YfO?U zS`!5*WRE{|6>mU%`DWl{8LB(Ys|@`Cfosradep+XF7jwJ+IjK$T87SdXgfZg7kgvOIn0gZ^I|oG>4ac}JEUpq#c{U!N(#C_Pnk-(Y3ry= zQ_o9fU=I#oNI3^C!_Lq`$vHCWeGUprTMIkI^%Psn){w%McImz6>)`4Aru)Skidu~T zR-+|08F&#lS~>&A2Kubpo${JjW~Mi@`ceZl)nIE`V&$Q9P=rVYKNr;}>&arhX4{X) zxcT%92i?do97OLhDJhaS-+8ide1s~I9Z89vqy)f|IQt1!n!=tYrWXWpl+h%5St_Nb z#@8NxJYe-0PRs+2DgDU=Yo-vwJVwNVRa@Md~yPXxejUy4KRVqFq^~b zOcW_VxgfNcxk)@OfQ_TT3$=7myz5l<;Ml*}hA_tt5p3?!#!Et$4a zK$pcEHIpM}YGzH~j6s~t>iPc6tdWA+BpVvzqICMl35)e?R&NtzXdOg-7w0mhh;<12 z^2mHo(N*`b+(DTwd-mv?fnhqVa1baTckx$ah{f3>J9PGILb5aP@yF?QZ~&J)QF-Tjpt`p(xh+$#8s7RI>ZHTpiBj=KU*WV|ecGvf`YZK{0jVp7dcr!WkBRYBpyy1W%nagrtz3QXf+vA`|LB6P&^%v5!|M!x_# zi&(YE$TVk?4?2=K!^Ih6j5!YBRVZwoGRQ(EFolS2F?3QOrEC@>RB2{cWIGRoa*${6 zCiy^}#8rGLO*#8s1F$xv)^4R~-XIs~MhbmxWv~qO^PQ=!g4^w&h+HL_Pv?sXM(-2g zTu{p^!C}cG>QMPn##|EO6Y&JVBrfc*JgK~8D&RgWqlaqdIVtY2f#I+02<5?K$$#gV zv!koW>-xlm_Uq01&Tc-bPe*50tuuKa7bCC3V&vmkp6c;Trbk+NA;E!Z6PKv=2yEfN z+t8rV=)rAW0JkBgikyGv+blE>fYM6Ub7{9C&DyBalt9VPp#F*1s-`>%o@NrQXC>fV z^GEE{1TqDl3+;_X!il8`Ejd(!mZf6 zcVdqEhA>w&6e)=giq0cBAUq)8+!z`3Ok%7`@EfnwAZ}Qn5GE|l_sh5q4z;d zXKJBJpe^(6?!NhA<9u6ZI z3};cK88W~WBEpEJ@kM|z8I7vMX+YqTh!E^irt_?_xeQFP8PrCGFD>F~dR5h;&Y&t;1U!nu%dBcrc5N^Sqt|dOPcAHE z5Xad-97l(a#!w~*5*lbDD>-A#xR86TxuNItfX0VKq%AJkt;uT$aWg{>O-gdLXCqp; zWhrp50is%igG$+YHIiw0Kkz`qxv<#Z>j{7uvl=!=3K+_^Ng)#@gop|e#kr_7b{7t| z?hg^|W`^qekr_)eUH5aY)iO(LkTEo1k&Ms-tHng~GM(a9s!%SNJB7+XNsWzJWr8eX zNtsHvS0K=tp0rDG_hMy+1Um;E7Kl{a`4M`*1f9vVMcvO8Y8gEPv(?KD8f&ioGJSWV zJJ#;DL^-7F<+)azU=?P2=psRe*W?UYZa%K)Q`DMmjFP8b^28d_h!nc($kP;JR%oxO z8lc(Cf?BjtC>mBd>DuGr^HGbG=Wct*OXM24iz9C58n(LN!>rjOot!n>%O|EB;uH2BD zqSpCB_L95FL*-3C8CFT3Tnax}?%-2pRc*Uf zfNdu#&nt=Voy`t9-vwYP9|t%35_oqi*~_8iKKN*nTj?B9J6;5-4H_P#i`5lQ?^cep zj1cp-d6RgH)Qm__nm|Nlj;WauYlptA065YFgR9u?2A7|Apz+~|8mZh}j&O4Ke)T)> z`a4V#h$|uk&rVlUaB-Q8q1~k%&%*+`_9uhi=)<~@7=dlTn6NEwxsL_&^>78-bSc#e z(Stj;gYgCQ9Un~@IwBX_1CBj7o3}$va-+87ymDkyEcNyj6B!;eU6zKy#5Dl}Wz8?= zs(M5y7^9f!wvzPk>kY6Et3s~CYONO@;A}_-aS3Yp+6ZDDZPpowTthail`OGg2@R55 zt|tK5_MtO6h_HP37u?Kw(XyoiiFna0vX$X7B_+a6S4l~Ri@`JPm8UT65h)aza zE8fAg5hC4cf@_5Pxycsi6MUolss|`7uAwA=LIgp~Zd8$%xg=SSPcSFIchDqnsuwbW zE<_Zaaw*cRzEO5%nF^&D4YmkUWvx=>Jnew{Fpy;{O!vYRfG%i++LAQ8UOH_!6>ti1 z+pDC|tJWn)ZmXGQGhc<~GbgyC5|$pH;{hkQc##b3w*&`5qjLpmE+KfG#Y{ zVNuy4#n?L~E=Uc_vi)+hQc-~dU62~0A1X;@sJ$_)0n7xLC)b&HdF3ON$uyN826MSm zUM&rf4~J=x8Td}@X6uc0Pf)Rg$m#<^S|o0y0+Ur3=>T*H&Ay$T+8*8@nt3Bv+N@!v zH=?5Wo>*d1cGvGr4SdKK$QV$YeqgCr|JU9cj#jJnUT$gQy<&5~Q(Yn@kC7VqrpC(E zlrTBO`anF4r8##ebL`he%wd1SOo_A})#;YKHJ1z1ma;8)f$Fy)L)}}Sq~hll#p7NF zwH2P@)Qeyp(n6uMA-OL?MXpCf>A76JLurW*J`4ndx=VDa)5A)yI=arcjVb#Nu|#Cw zvRFhQ>7a7L7H7qUyQ#^jO~FE~()5e8UcQQ-HN!W)hA6qTJX?>y^GPwU3Rqrb2?ml=5_Io=HpGi0$$5ad46J9>`}v+4YP zHO0-^bba3n1DGF*zJ`+$POrt4t@wj;1(hZgt+{xRv|uBbJJfQEaLN@A zD{Me820%`hD&eL!Eiz1Lj?>qtzR4TdqHGjDu7Yy8DFd{Iy}Gm&X~DzvQE;?agxsx;4b++*we8L+XG5!-*oqk+al+-3W)PVr$WdTju9_+WXatui2&AT!K^Ilf6wV4zsv})c<`wqkk6m zQmriIzM8!-Z7H)A%Sm62U6$P$j-{9V+g6wF(2wdOgJ@Ns+H>DN0#^rN|7g?J zBTP=mvLciQ1U_ld7meX?!u-RTb8F;S!*Yfu{xx*D=%d2s)SXFh9zA4{wMDEqD^Awr zwT*J_&Xp)ItgwLfp>m4}%iQsL(mQ@!w$hpt74251(m)etl%DUm+S)iomy8sUPyNSWAS_Pec5Ga}Na37qUbQg&ZjBnQ03JZM10#wcw6?B3l9 ziN1a4z7d#Z6QaX)x2qU1;ddwi(M_}|FSgm zszHVfn}c#}2vsw8gw3rzj3~7a%pg%KT6mT^gp`FD1)>Zh=CsTUj95>M(Qc2t9 zXdO_ksMG7ndx$6#{0&u;^Oa@EJ-yJon`2kOJeWXNq3gjk?(RP+g*X( z>35Zx=D2KW@*rE#KXjLu=DB={Rw>d~nEfo}4Deu~GH{zkc`lI~{jE%wt6RS=sjI5} zxt|&;tl}$Iw9RtK^88s+XHovEDW$ZB>{};VXH;En`&J$2l+8 zuCaEtvrOZGQnjy7Nl7pkr}52{7v(aoTQZUB>(S&~r>npu!{vIirTp$Hua)U?t(wu% zcbDF)(!V4f{xqSpSpW5srDP7vI?K)EzZ@mep-fl7(dVb89Ct{RE6nAQ5--k=9O;}~ zmjqXIuJy{Ca))z9U>T)XFL@4j8GuJP$<#O0NPq@1Z>&$rhvgQ77<1oIj^p31j{>3=~Rq8b$=pmvvzoDe0 z$?09i?M-ZB@X%FuY7%j|b{}S((Mg3j{>YukKULI;fk~bU$#KcjB9oWSvZC*oE6E$V z+5M7nqtMa{b!59_xnfhNE*siqnNNcM;(NrlHB(nRwsVnbkEU}{&ociP7f0xGN(+*;B(7rJv^uBL4xx~}TBb48`virG^Zy^wGG;wH9v<=tcf z0dy5|^wK0(Nqo}|CM1Chr6n}R6O|x2!Hw%2W_j@xN8ZNpVHLNo`dp|YcjGDRJ zmX;4$(^7Z3(RF~>n}zat`ts4j@lray`b=3v_4;yLqINCw+TPN<0d7=U&ir?9I|~CW zSOy2824oicO18=8>X^u|dWdOsAoiSqLU{ST)O659MHr2Eu$k*L`tBrd5MwOTG`MsG7K1vHZe*;l0m2p01U zqNOO{5Zgm6Ijx843}tCXFs2FNq#SE3^GU8OXAma&z?a0;tj8a`W1A>$CG*aIY$h<- zkT@DC-#W+fm7ePZ=YrZg9E)R`f&D6v^-Z~aoT*931dV)H6%rcyo+czhV5%05M=I<>Yk09;VaH>`I^F&rY^XOXGbmDo!X%611I4BVfKd<|@lx*pCb91Sy?F&R5gL ze0D7UNL*0MD{aQqcf%P_CNPLbnn)(1{E)vq7ut)YtOBJG;}%9ra=}5Y!q_tdWdgF| z=+>w_^Nyq)WbPfERam-P67|6oNmXaVV(gY3pHVKQTs*le48)f!?F$3ehnXhs&4(2i zIpr}irk~tYyc5MwM~f3>94z>#?=$06{eX)NwFzh+me%tKvuz}~Xe-y)#MgLnRPQQ5 z03Of3=hn7mJ?;2@kJ&=yAe#WJl`GeZM)JHC3oLL?3mkZI@ zZci%nETQh|XfFFq5In}YxW32j`TcSdySy&$0lTs*m2E6KCQJ2hk^`=0lH$=}Wc`S1 zhA7v37e%yEmgnU5MSUP$1Q-ssQ!%78Tq3;s;%ySwZB403;#zuY)Du^!Y}0$8uYqnR z=^CLFz$ zdqQrk$qX0)g(>)Gu1L&E@T2vhzR2`kDr=)mogqfV{`0Sb?OIr%)rVLeb?rAms|SJrwLYeYfC zJW>CaYi1AbEcNb6T1P7MqXj5!OA_Kbx~xfmN0x!)%Sd3OFBF4Reue?|jyACLep6MH za$7Te+haA;(tRKl*!L-v7cDzb$9n~tf?9c{VS<=o;9+=WPSrW=@xBDYbexMvCI&|N zj#+!!`|4}o!7r4hFvjf0+b*997}bJ9G@K2sS5cC?m^6tB(L36jF}LV-1EiEim_oM< z>jh6(+7UjP5i7hnzf+AW>gt}NbEzuUl!Ow4&9Z8b$Hs$%mZ@LdFTSNjXL`M~Z&^-I z3@eBzh-DNGT)6$>0kEB;K1pdV)w;1Jfu@myzQhkIxnmH!1mrv1Q@%D$NWm>x{JCt-Kv%M>OiO^#y z5SZgBQBjoS*0j9=O%rrNm)6L%3BZvi3=#?LBs4uLO&|mH7L~SImP{jtjsY%2wC8jl zan`aNIo~=cQ}^o=UNSMBm#oJfpBe^-QUH{A=U(TgOdp7)#=P2;VpAc##9g`x1Z(#P z?Wz*a?xp}|_Xp)^C6~#z>!cZ6mGzXW#KUxy0AWUp+=x|n!hY!JFrDIlLuVE)vUVsH zqD3R@9Nj{Z85~(S3eSEYw0tCF`s!G+6+>zM_!mHv~sVYM2cAQG^qC z*w*l~O!GZBopbO2P7~1aFo>wM1V>bw%7eD$6|=nr2(s3?Fo?1yckv5QrUjBsB1I>0 z?WEEoXcu@b90YMx-zd=iuK0``ZSXgIdW<7Be0y<(%UIyB?3icQ*=2J;xx>%o7!{j@ zG@D@rIEIvsBBw4S&MVbUrwoO!nqFZdT!&FhHnAg_uHjKk;Yh5AAc-iF6W{Vod z+)`X+&k-DEl|JGaO%p41pKtCpfM|w(jDs5WV2+s-ksdfH`zxsqI%)=nj#R}~nzsVy zz`c~88A@>*0~bei_?D3uWXy4bX?ybh4H2X(O$wEE&K@c zgQ=ZTE$Z25d=@_7ofX$4a^^N)spUqdsWMPdo%uSb;{v>!3zpafcjMayF?XXJ@(wC} zkhVIgT4_3PN&^)r+mi-`jSPj2nNUQ7WlKY`MB~XIi4q3kXmT^KG?ND5p*2!AX~;>_ z24fO--QdF(U&oh0Si6=2PNilH$W{4S?>HB!QH z>a9AJ=gM|5ey;F(js=)E(xZnC6_-Ao9wky85hL>ZQ18ff1C9`34}0s1UV0ZtHRdJ6 z3`Na169u-kzp|@6$~{UB5vazPMuAh+lx+Rfs=BRk%}_QN2SiwXSEeA-StYTC1suCt zx$J5~h;vr;&kV!FT%1=Q-OW%PX9G+xYXI&2R+X@(HHf(PHs5Q$HpV|LA*ZuRl`z{7?$E=tWC=V|Lo=>2wK3Exj-&r=qb@0Pip<_Ttm3l z-*0x$y9&RaVUw^uyRzCaOs}lBv#aOA!;BCizf_!R;dL3x%mf?(jb!!G-=Mc2&1O(3 z<4xa}&md^z1XUv?sN2n?g7onTE}_Ln%II7&*pqzVPU3;w42Gys;G-BEbik1^I|{&R zepEB9N~>-C8o_k}Oug=7RZalv`( zO7=lOoj-0>@0=bKZWsN|&n)-nJjhLFADnI?a$ad7(~s5)(8xAdxIm2QQf5db`6wZY zGpMc`;Z2`tVp*A(z#3-eJQ^E!;M|GkRWJix;a+_yr~S@^#3sv~?;(_y@$H zGh1&&)|MY_;nJW9a{;IjQQEaEKWi#uvtUdlc4834O#v?O?B=;Awv&89SPVxgb~H&c zJ;a>D=szIN^>+_pz8XyQlw_?_iAgug2U{ZrEafeSua2#;R!z&-@i2k)ApdA;W}L;@ zKomys$ZM=GS1p9f8)wU)34X1f%%KCui9 zaJnKgY@eVht&#c6f>EabuJ~C)6?9U|)t4w%-FPmmjm|nv6}dRmsy>gyqDCPB#~sOV zRS%LgSfX6u(cD7Eqs%V2g*|vX<95N$gXUZ@2Fe*W-@m82=;71 zIA6;VVUD{!wipbmI@5L6TT)Cl>9J(SIBk+{)0JyAVT2fy>6|q%Kyg_Cl@?dh#wRTf z9^3YD|Lo=~?hw8C8MR!$xQ`0x5OG2ODT$@n#>HII>KfKW$spPCR%t}1(vk0*vTD2 zQKt08dNmUjjLXYuCr3(?MqW}5ddj4a__@4}SW#uLrS+s)da=-*%sbMZ0f^5Zs$w?9 z4nImXG;ZEtq$9r^JJH1sARq!%9=LNKEd73k^r&1Fyr-?!7vbjHIoqGmZKgY>Yj*Kz zlZNss*jN@i3c{yw&fNY63pEGG*hja&y5}GJ3YGVDIbL>xN=_ndBX0sT`pcP^30A^$ zd6l-ZQCwH{sKgkH3K=EY+~Et&oHka3yDv+qONRTl%Zaz5jYH?3M{cvm`>^{&=p|ce6Ik%?Nk<4PY-TwDI~+VG!ioP7hI3@G?yp;6$PVcO#tX2gRu;M{53m%z;f#jtZH;7$S;gD2GkO z^N6za!=T!BZv?>E{Q*`dI{&<$)U{yXALfomXS!0U%qq#A88}HkC{5zZi-+<)%ZSWA zDQd?gT?y2^TZSfAH8*K>I~HL~($Ce|(Vj2D7p0zyKDVQcP`M=Vl>HjHddikH!XZ(m zV`$6E_BVo;D2BLVQji~7e#;K955sZGT)O|@98?T;W%_p89!wk3^wH#=I%n~%z^=LC z5$yS>V&A#tjBCIUk*#(L6g5QqBYe=#IQ=Hma%hR&0F>7KVNf$RTFSLZyA9nJGpux6 zxMq7GC)2#YZ45ZfQ0A@ENFm@>sU*?Op~H%WYBHduQ-G+I(+}qwxCvzu$|N0(<>T_M z`bP-kW>E@n+O=!f zAG>xVaORSqvPMqIYNQOZ0*L4ULlk2Y-82W)naai-LZv}#as#S3$~3XAHqcgI)yA|o zJ9&FDXW!B=^Z|R%7mP z@ySSB_hs;eOw!Qy66dwbpipzw4Deo@xO4mgs0*qnTAD0N)T;Wvg9&H_6h``!hb4Jq zOWx7V_o&H7(H7u3%~_II;~oMsjw%r)cs%u)t_IkLqpL;zcP>Q*QDa>PpbHL~RPNDd zfwS*F2jzXHYr^mZGDKMBd2PF}%y*7=(72%w;nr$6Lx4ze9R_!x>G?tjJhx1mG4^Q~ z_kpyLV$M>vqGAAuUx8|K$UZR}X9HgxWlRrvpuEc#5ky_dK}^=mRMmK7ZecDpw5=D+ z{rt4`d8FztKmBr}$Y)jD)^Y$15uLZCfiYR{9i$5mg2PHusz`x06rdLCQzpB7&5Wgx z2^1kRXv!W-vB%=(t}GOY9)QCYouxjkQ>G+Ydn;TD^I;Z!Ywwk*TNnWX%Ck2MZH=%2 z-|!YOHhqOAigJM`iqX_oJ(eM&!?YGG9jSw4p%|`-Mw*?zvl=6AGRaR#E^EV&wK z90=(bxgoWk&ur&cTz;*l=e=JW?k(@{>)h;o4? zifQ>Ji9xxjlhlj>jnE?I-)SlXRFovaIHZgJveDe{dFPwA7Pi-}+!q_u>sRjI*~&Gh z6J`CGxe^0ILmZ`1th+0&`N2j`=DCfM&jS`8R?ev021|KFU_A;JhZRe_#)=L84bcW~ zuvFjWRD~fE$U{U$6>V#QH}fr1)sP7+AwnCMM_fcPz)>tLewmV!$^)Oob)745WRa%D z8AE!_M>dD%RS?^;c`(*1ent0L5uuJ(O^8e6ZThTtGU4hn%rj< z@Jo!odz6E@`-2MQDj>w|o@uH$8(8D0_Et%B@mxkLYdMbDx|FKMG2T>~T7Ti?*8dSs z{JD$9eT@v&J`dnN483Jly&!F|60mfpYdyT0$bi{F67pxrY~@W0f?n=Tmu`l|_hx~Q zqk|T}KxwP=+vd2fz6YPLmvh#N?M-_<3XKA12~*sbtWS}o@LUX6&FxE?St+cUBprlO zur#C+3P6*@!C|F{OuHu)0z(p4F;*MhuQW!{ipVI-P6n?BQ0=WQOt3V!bQw+!3h{D0)!Z z%g3GBA5G_yaaEs+zn@G~bmXQ&9jSv>uY?frBylj5`E^_^5X4cP$R%c?ItUgMU|kTd zDJw<(FgR*isefo^<+&xE9d!}VQ4Gzkyt6{ty!Ud%Q$5N_(8}eyB+V)0q$!~*+y_-P z4M3^+B7_Ug4=rPj+lbr)jBnNTJ*ipNbc47o@cE$Zu?=0B@wg>Fh1MB{vFi zA%-S#vdXQ|Nj{+`hLb}DvnGH9HZnfRK0UNQKCDh;TA6^bU50jkQU%1og$T`PeOujG z)N(6vR-ekxRWw0jIG;05?12Ek1J>93@cz3cr1~`dJXItgGzVU=P z2Y$sfgFDIvt|&$umv3?>`*z@yIJ8(PJ5#=0VT~FA`L2FWnCHAys+RWm{CsV zhN_fdb7>`fj7G5c<6igz^qTC@9)A4c8*=YLuAz#wv7TlLj5A8@639WrSY$QKL}c&c zg20viCbG4Cc2YaL;11^fuCU)E86LChv0nTwPu4r;&nlm3^nDR5I9|KaLLPTLpH4e=WY=~&x zO9!EG#p23SPi<}9P=?Q&>BkBr^Doo0M`w6Y1C9Qw>{S}SK~D)-h)_101}R$Q5F9Yi zYRjuaLWYo5UTGPYmr60|SU30RGB`s14&cJ-=k>6F`Y@F$pWIr?ooNl@&kn&1r9AJ) z0nJEEGF*_xx7;5Yh&`{2!-58Wy3@V0^q&htaha8*1xSUH62W1m1xtpy>r!=erb?~6 z;BBQTd8OIGhH8RJLmck7U}&5S1*6p&ZUvN;xS)>c5(nR)Lc!4x#n}*h7yH_x?OXkx zDLKxjRD+Jm>?Df}q$^o}1*B|=+qGNA8c*jf9zK~fEGb4GFGmZ}?i((}PIHdXGBI{- zYHG-Kng@0F`Vxw6M6I8#Sl40RrJG_LLe}w`!7DFKv4h=X*`ipuROh?Ve6>( z#WGFMk()N`NTqqKLOz47MGUxFX|R*>xpT9cN>o~N#Z#8LNsrLZJPz%g(hDSX$4fGSUgDJPjCE$Xkbgi<-_NmF@?g$GFycI5|(%8Pl- zG=(rx=2;#Je3_viR-5@oR4gW-ZC6?&9eb256_9aM;Y(ZUi2qB$7%c3#U4YD{(4{dF zttmi9F`#c)&MI${-NXA^b~ha|fhR=hRxHd_5=M{}apVSa?9JT>C)W0Xg3Qc`vw=2_ zG7IfWnStjGvP$X%tP28Hw(ym{sPuV18=^H(ov1u+Zf;0=Zq7%!C_IYMAY~6>(b1^Q zyo1w-M|uvqb0;TpHfgX3iYi!H(7I~FHPuEAo8mlThn*zgEis9o)}s^BGHu?Ky-AA2 zq9e34=M#Js-NZ$b;wg>vwANrr6Qp^{M$HK^)@Z$zrsR~SeGuy)B}8;_QMEU_CCo1- z*;_Jxdjk$1rugz3s~$U$KFruGbL}PS%JoE*0wyFaXJppQs4yZJg;`nb8rBe{9_!MK z8CEhKo$v(gbk0dmzZ_dp$-t9I}>!@)%#Kg^ZK;QtIRxxb)qkceMfTzKNECxfCRHyAro zmG_h;R)ciujkGelN!MnU6Uo)=i)dV_a)!b*qcmXx30>u7Z*3Y%eg-j>V>vy+;EvK< zP{o4MKCV&Qj{1x4MOS;h!68Bw;s9KFjP0FXYnqQwDsdQ>X_2n%6xEfiT))(7X@hpP zurOlFw|dmAB0*WPOAv(Epd+@pF#wOFI_^s9nYPurNF=3|GMaM~8pX7)OVANJkQ(bd zWXc@0%}dbIz2am`IScSfoI01y?9BGT@F_tMv8_S9F89)alOMRW_+F%k(emN@9p{Qz zK#1@7#pnSlM!fW9hGR1;NSjH6n#7k40v`ra(oR_7%hUp`F z&SXV^%?zA0qbVbT)WxyXGf}x9h++y|95}1F6w6h>A!>}YVF64NLf^^ifzM84yLHZe zcAO1taTG%cdmM>H2VxhxVl=is%w6ka^Gsr<&Ln#t|k+??sg(J*K-@EqMz8h?4h#n#E)(!Gg=g}9wqh{P!8#CmoN-{ygJt}e>8 zJavO^ELYHrZREzl9lV)Nh;SNw*ugc&BOKGJ%qg~-a1YfZCt|1wYD>K$z)^_9@_+}P z#t%j(X897^nw%teXV;ORib>5Y1*SFaj*k@tJq~2R2jxCMrgfTG!Prbvyd_rBQA0)5 zsyD2qEOMp|4x%&xipqM{b}xXZov64<>s_mhLDfnVlX)XHxjvSs8OFHvtbMO*Zz&|V z957R4n~|ICUD+wRD_QwasUGRD22+|ah>@oil7>iXsO?!AE#W4Unbb*~ny_guNG)*_ zLqi-@3QF7NwBqfS7&5|w=^gMP0#_>QYc_|aK6t`USgPf=$9igw@-mY)$w%2qoa##h z=7m0NLhk`6KNN3=t@;39mk0C66dvUQLlo0`lty5ad4d8-hS^-cY?3f&;F5SK95#zo zKEaxOpA)>}Y#@uHgQh{ebO?O3lF$RTMKjG9#tYCP!r(8%`t=J?AC^We_B(AI3A=!& z3E(I*=SX%2K@@}b^1d+=!hw!rIu1+IK9c5z_@!u&%s$K8RAkyb+7Rb zRZVibm4}q{rDl0pCHrJVD=#Iq(sYz6bDS>^TmI+y5AN!zX#mzL+tHbvV3?4s-^Iz; zm7RjSlC^zHd?BGlS~#Xn8Ea{RM->zJP)!}5UW41C2}znC_#__Y<#>Cxk)@n%`+6z- z(yAMKuy$n!c~^2MBQuVcqmx>8Yv6D}ZQWAah+_@W2LR`SjJ)!UqZc?90m=jh(I^kg z$W#Z)1%WH`7BeG(vQzUhry9+)2V`+I!O$mn6!h+BVFdzatlI$j9aN*XyZs^iPF^NZ zRgL~anH7=cAw5aLQ6z_oQ+`jk99hY2CcV*w@1xo3lr1=W8hs>M$5=&5_Rh8$iYA-1 zVFaZDn$CS3c;2-a^l63ZVX;uOYVFO%GajhPw{;hUY5cA)%5zF1Ga?C0Q4H-?nWsnX z1auS|G%G@T0~{hscWFKFohIeF4%BNVr5gKw2hxY(Q5>(AWJf=C0QF&pa9P*3Ic(&X zll*k4##P&~iPI zhY_MTC3(A<F*@T6^Q77{!;fpxi#GguWa!NULViAj zYJhaE-Q(2)Zg=uxD=WEdM&}F8beQwTm<|KVt9v=-$sbS#0E!L~*h$$Tv3WYhyq*bk z9Hr~*t2>#d7_WCo9;(m;Jc{XkpVBbrelXp+l~Lz{=t1lXr_`#F~_oETC-&sIqP`oumM#2~@~3aGTCfhqquel}YjidJ#o?8Z4dLM3x zwU&9E*3XwXO5tT|ufV>bJw$}H(-Qe@v55NO?GZ>9)CI6~;}M~bS7M~+Y=~C3heBxd zxmYgCTBemkCQyWkPOXy2ej=(%!1PzUr!=h)I<{-oirNs=mIXtOv?kR-WLFysV%}mc zPWkoVLXRN0k&D4nroK@wX)`(SFffC*kWq0!N3lU1alaE;CpTY*wdQJmXr335gxthNL(U!tX_Ui!;I3R5YGsLmU)VPw)K>-c?b zgjIX=`Gm*<#`%s2-Pbc68%Y5mjACjsr0a}GHg~xikoT}8Ilv%4ve?)+XEP-mlXPo+ z3uF@4WmrqseuulrLz`LA0>MTvM?_Z{v_`E|CP~>sRErhGKt1CY2Z+)HT|Y`)oRaQv z__`=hF6|IvM>1fDqq?S-Xb_8PRSKy=pN}Y?HukQWE>hsh5#`ztMcyn=hUQJRGNUkW zBKvV2N7X1oXNK}1bK=1sAwzbW5$e+f?K^FEqjfbPVbNOwqA(nqO2W`}KBV3bD&EI&}Zmp8G6Ab5R|gL7P6=*aXMH-p0R+=YZ7nXIAdBOJ52gebo73kTe*o z2%ZpO_>{Z4S*+HogB(p~7!1(x*oqjFwl&Wst7p#$XX6X&|M}@`_D+P}HElD?AU4)) z4^kqVfT16vyt(TQE^CRKNq%Z2$v zTTIS$LwB@T&oZAkn0RJ6JC@Xk-RQ8z#IAu^K_R{?IaFd`gEWu`)os+08Zg_JShizs zgv-$fXU{5|W=f2+fj*87TB|rep)d5MaT5ySq5Wi^W^AMpn7OxZ_SX28Af+8e__?KyCA)ABl6^Sg59)>x z(d|Kr*_iSJA);$3u{XIoE?%F3a=}51x~;3Jr)}F%a*{k~X=wJH(!+h9s5^CWQ$}z5 z-N9r!t&tO~jTBw=ORGn?N(_P!Q4vl%CB9ZH47yB_8?%8TmojJ@poSn!5`BnWRCH+q z)3>}#q;m-zX#zOPt0TqgZEr(?x%fTAZMtmK%+^54^$~`7SrUlmF2GSto)Rlp`+zb< zZ81zhMrYahds^3WPf>n!YoU^kITK=S&g%>A<6K>3Qxkxh>5eroIP6CEDUZKoFE4sM z3lBR0|VV(M%U!P)uYoY+G@d0LxE=fr5q z^5~NIIdMf3g$hTpbK*(n2AGogIdO&Naf6W23(n5;3*+{)Cc*4e&xzOefuFx1Z6;j| zqv1gTo#nq5nJb>_2sXJc#KD;5L+7N;_pUNG(4`6I#O4~xaL`ay%TmvY%`XNZ^5Jvh z@DBG(0BCENonwIP6>Vp!ZIBi(cTR7*H@9RXYI7i3c}6C$t}>T-y-|(BwqdbIzHoqm zpHvKcbQu=Uk48Yi^P`Gac3{X^Cr%HtyIQv!9)%qUwvGG@vNgjioRv~MK;Q_|8kc~%-f?vfAbzTAPwAaG7D}Ir%abfsM336&XwBa{e|5RvUdS;qEs`~0tYv@Ydh__9m%`TDv!f&+%(>WVwK&X>UYdBCH1!lW ztm=&w72J&!QN>u7J-HT4mVK~@Ud0Oq1wgNTHmm=5fjgkN+~c?6fK3Q`;SO!L`t^>} zjSAm_#vg2R;mnn5!JCdRv-Nt0XQde@mi=G-4C~J#P8Yd&%$72z+8qQhZD9t3B`(4p znq_D+CzyOiT4nezmn=aVvV~j{FN)W8UBGD*2H^|94ob`dRHtTrAEWrnwWMB3P>0?S zppulTt{y2_4+reP8Rc5pdk!v^$jx7Ptemgr6?gGiO2$7pl6Yt-J+y_zY>r1P-Ybl% zXJQ$z4{I8eZhRXo=9{B6zW6fD(hWel-5*4IR;-Sv1~fiA=$LtfubHLlJ#7ePc+;w9 z#oPev9~e|#b!zfZv=DjQ0q-?BU!1XdPgeQ?0ILVP3O4QS;}#$37DGuzB)eGo^(NYD+P@s4tDUY};@YUGqAQpZDDZ-J$?F>uw>3G+o909}7n53iB*Oxj{T zt;c6P^Ub9tc7`MIBF9cr1|9pVQ6+1!+z@yo)(p!74^~Nhi~e||NM#G1r?&M4OG>$A z#1s?7wa~Q2Z4nl(Q;8cVI+^l9CW;6V8F@@yi*>$RqY~Zl)DZ~J)`xvnb6S}78zQLs zz-&o!oCKb-(}12{_3hp2Z{~pbWy-TOgEbvL9%Y)WM`GI2i}i%t z-dDJAv^}%oDQ+k>czCB@v2@BbN617mAriVV0~?hEa18h0ZxFgwv3b}qiu(0lo4l-aUltW?HHnz;r?fCgs8<9(p!9 zJP?yb{SAE6c#o;Z+wsjC8H&VPk~EfRTtzf1^;3)%xHzht0cLi7kwKCMj=yR!s*F#b zvBn|b1|3U=(kK@QqF6MU`aLMP0swVE+Dcx9%9DGB(@*2&(1w&xlv+uOc(9n8Ygi_z zRF?YEkrq=a@{X1#yTtKwk{_?j6K*ZZ= 1 < 3' - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - search-insights: 2.14.0 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - dev: false - - /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3): - resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - dev: false - - /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3): - resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - dependencies: - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 - dev: false - - /@algolia/cache-browser-local-storage@4.23.3: - resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} - dependencies: - '@algolia/cache-common': 4.23.3 - dev: false - - /@algolia/cache-common@4.23.3: - resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} - dev: false - - /@algolia/cache-in-memory@4.23.3: - resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} - dependencies: - '@algolia/cache-common': 4.23.3 - dev: false - - /@algolia/client-account@4.23.3: - resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/client-analytics@4.23.3: - resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/client-common@4.23.3: - resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - dependencies: - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/client-personalization@4.23.3: - resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/client-search@4.23.3: - resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/events@4.0.1: - resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - dev: false - - /@algolia/logger-common@4.23.3: - resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} - dev: false - - /@algolia/logger-console@4.23.3: - resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} - dependencies: - '@algolia/logger-common': 4.23.3 - dev: false - - /@algolia/recommend@4.23.3: - resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /@algolia/requester-browser-xhr@4.23.3: - resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - dependencies: - '@algolia/requester-common': 4.23.3 - dev: false - - /@algolia/requester-common@4.23.3: - resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} - dev: false - - /@algolia/requester-node-http@4.23.3: - resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - dependencies: - '@algolia/requester-common': 4.23.3 - dev: false - - /@algolia/transporter@4.23.3: - resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} - dependencies: - '@algolia/cache-common': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - dev: false - - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: false - - /@babel/code-frame@7.24.7: - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - dev: false - - /@babel/compat-data@7.24.7: - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/core@7.12.9: - resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.12.9) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 1.9.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - lodash: 4.17.21 - resolve: 1.22.8 - semver: 5.7.2 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/core@7.24.7: - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.5 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/generator@7.24.7: - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - dev: false - - /@babel/helper-annotate-as-pure@7.24.7: - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-compilation-targets@7.24.7: - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: false - - /@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 - semver: 6.3.1 - dev: false - - /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7): - resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.5 - lodash.debounce: 4.0.8 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-environment-visitor@7.24.7: - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-function-name@7.24.7: - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-hoist-variables@7.24.7: - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-member-expression-to-functions@7.24.7: - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-module-transforms@7.24.7(@babel/core@7.12.9): - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-optimise-call-expression@7.24.7: - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-plugin-utils@7.10.4: - resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} - dev: false - - /@babel/helper-plugin-utils@7.24.7: - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-skip-transparent-expression-wrappers@7.24.7: - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-split-export-declaration@7.24.7: - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/helper-string-parser@7.24.7: - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-identifier@7.24.7: - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-option@7.24.7: - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-wrap-function@7.24.7: - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helpers@7.24.7: - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - dev: false - - /@babel/highlight@7.24.7: - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - dev: false - - /@babel/parser@7.24.7: - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.7 - dev: false - - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-proposal-object-rest-spread@7.12.1(@babel/core@7.12.9): - resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.12.9) - dev: false - - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-jsx@7.12.1(@babel/core@7.12.9): - resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.12.9): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 - dev: false - - /@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - dev: false - - /@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.12.9): - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - regenerator-transform: 0.15.2 - dev: false - - /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-runtime@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - dev: false - - /@babel/preset-env@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 - esutils: 2.0.3 - dev: false - - /@babel/preset-react@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-typescript@7.24.7(@babel/core@7.24.7): - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: false - - /@babel/runtime-corejs3@7.24.7: - resolution: {integrity: sha512-eytSX6JLBY6PVAeQa2bFlDx/7Mmln/gaEpsit5a3WEvjGfiIytEsgAwuIXCPM0xvw0v0cJn3ilq0/TvXrW0kgA==} - engines: {node: '>=6.9.0'} - dependencies: - core-js-pure: 3.37.1 - regenerator-runtime: 0.14.1 - dev: false - - /@babel/runtime@7.24.7: - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - - /@babel/template@7.24.7: - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - dev: false - - /@babel/traverse@7.24.7: - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/types@7.24.7: - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - dev: false - - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: false - optional: true - - /@crowdin/cli@3.19.4: - resolution: {integrity: sha512-j0SiRGKOH/Pa/TdBeIxBBRrByHPqmVqWVo/LSjnri1lLPGywjcu9kB+pib7P4wmI00jgcVu+80yGdun5zRcDNQ==} - hasBin: true - dependencies: - command-exists-promise: 2.0.2 - node-fetch: 2.7.0 - shelljs: 0.8.5 - tar: 6.2.1 - yauzl: 3.1.3 - transitivePeerDependencies: - - encoding - dev: true - - /@crowdin/crowdin-api-client@1.33.1: - resolution: {integrity: sha512-OWlp796/Lc+o/ZBvr8ZTLfkz/ZgVNqj6LI2atRfTCTDFBXLW5zxJFYoIwoTh7z0gqsf8z8KNQzz2J5vvQgY9eA==} - engines: {node: '>=12.9.0'} - dependencies: - axios: 1.7.2 - transitivePeerDependencies: - - debug - dev: false - - /@discoveryjs/json-ext@0.5.7: - resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} - engines: {node: '>=10.0.0'} - dev: false - - /@docsearch/css@3.6.0: - resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} - dev: false - - /@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.14.0): - resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true - dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.14.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@docsearch/css': 3.6.0 - algoliasearch: 4.23.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - search-insights: 2.14.0 - transitivePeerDependencies: - - '@algolia/client-search' - dev: false - - /@docusaurus/core@2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA==} - engines: {node: '>=16.14'} - hasBin: true - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-runtime': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/runtime': 7.24.7 - '@babel/runtime-corejs3': 7.24.7 - '@babel/traverse': 7.24.7 - '@docusaurus/cssnano-preset': 2.4.0 - '@docusaurus/logger': 2.4.0 - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/react-loadable': 5.5.2(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-common': 2.4.0(@docusaurus/types@2.4.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@slorber/static-site-generator-webpack-plugin': 4.0.7 - '@svgr/webpack': 6.5.1 - autoprefixer: 10.4.19(postcss@8.4.38) - babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@5.92.0) - babel-plugin-dynamic-import-node: 2.3.3 - boxen: 6.2.1 - chalk: 4.1.2 - chokidar: 3.6.0 - clean-css: 5.3.3 - cli-table3: 0.6.5 - combine-promises: 1.2.0 - commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.92.0) - core-js: 3.37.1 - css-loader: 6.11.0(webpack@5.92.0) - css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.3)(webpack@5.92.0) - cssnano: 5.1.15(postcss@8.4.38) - del: 6.1.1 - detect-port: 1.6.1 - escape-html: 1.0.3 - eta: 2.2.0 - file-loader: 6.2.0(webpack@5.92.0) - fs-extra: 10.1.0 - html-minifier-terser: 6.1.0 - html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.92.0) - import-fresh: 3.3.0 - leven: 3.1.0 - lodash: 4.17.21 - mini-css-extract-plugin: 2.9.0(webpack@5.92.0) - postcss: 8.4.38 - postcss-loader: 7.3.4(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.0) - prompts: 2.4.2 - react: 17.0.2 - react-dev-utils: 12.0.1(typescript@5.4.5)(webpack@5.92.0) - react-dom: 17.0.2(react@17.0.2) - react-helmet-async: 1.3.0(react-dom@17.0.2)(react@17.0.2) - react-loadable: /@docusaurus/react-loadable@5.5.2(react@17.0.2) - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.92.0) - react-router: 5.3.4(react@17.0.2) - react-router-config: 5.1.1(react-router@5.3.4)(react@17.0.2) - react-router-dom: 5.3.4(react@17.0.2) - rtl-detect: 1.1.2 - semver: 7.6.2 - serve-handler: 6.1.5 - shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.0)(webpack@5.92.0) - tslib: 2.6.3 - update-notifier: 5.1.0 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.92.0) - wait-on: 6.0.1 - webpack: 5.92.0(@swc/core@1.6.0) - webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.92.0) - webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.92.0) - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/cssnano-preset@2.4.0: - resolution: {integrity: sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw==} - engines: {node: '>=16.14'} - dependencies: - cssnano-preset-advanced: 5.3.10(postcss@8.4.38) - postcss: 8.4.38 - postcss-sort-media-queries: 4.4.1(postcss@8.4.38) - tslib: 2.6.3 - dev: false - - /@docusaurus/logger@2.4.0: - resolution: {integrity: sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw==} - engines: {node: '>=16.14'} - dependencies: - chalk: 4.1.2 - tslib: 2.6.3 - dev: false - - /@docusaurus/mdx-loader@2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@babel/parser': 7.24.7 - '@babel/traverse': 7.24.7 - '@docusaurus/logger': 2.4.0 - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@mdx-js/mdx': 1.6.22 - escape-html: 1.0.3 - file-loader: 6.2.0(webpack@5.92.0) - fs-extra: 10.1.0 - image-size: 1.1.1 - mdast-util-to-string: 2.0.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - remark-emoji: 2.2.0 - stringify-object: 3.3.0 - tslib: 2.6.3 - unified: 9.2.2 - unist-util-visit: 2.0.3 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.92.0) - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: false - - /@docusaurus/module-type-aliases@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg==} - peerDependencies: - react: '*' - react-dom: '*' - dependencies: - '@docusaurus/react-loadable': 5.5.2(react@17.0.2) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@types/history': 4.7.11 - '@types/react': 18.3.3 - '@types/react-router-config': 5.0.11 - '@types/react-router-dom': 5.3.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-helmet-async: 2.0.5(react@17.0.2) - react-loadable: /@docusaurus/react-loadable@5.5.2(react@17.0.2) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - dev: false - - /@docusaurus/plugin-content-blog@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/logger': 2.4.0 - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-common': 2.4.0(@docusaurus/types@2.4.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - cheerio: 1.0.0-rc.12 - feed: 4.2.2 - fs-extra: 10.1.0 - lodash: 4.17.21 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - reading-time: 1.5.0 - tslib: 2.6.3 - unist-util-visit: 2.0.3 - utility-types: 3.11.0 - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-content-docs@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/logger': 2.4.0 - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/module-type-aliases': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@types/react-router-config': 5.0.11 - combine-promises: 1.2.0 - fs-extra: 10.1.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - lodash: 4.17.21 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - utility-types: 3.11.0 - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-content-pages@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - fs-extra: 10.1.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-debug@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - fs-extra: 10.1.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-json-view: 1.21.3(react-dom@17.0.2)(react@17.0.2) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - encoding - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-google-analytics@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-google-gtag@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-google-tag-manager@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/plugin-sitemap@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/logger': 2.4.0 - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-common': 2.4.0(@docusaurus/types@2.4.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - fs-extra: 10.1.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - sitemap: 7.1.2 - tslib: 2.6.3 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/preset-classic@2.4.0(@algolia/client-search@4.23.3)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.14.0)(typescript@5.4.5): - resolution: {integrity: sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-blog': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-docs': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-pages': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-debug': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-google-analytics': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-google-gtag': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-google-tag-manager': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-sitemap': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-classic': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-common': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-search-algolia': 2.4.0(@algolia/client-search@4.23.3)(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.14.0)(typescript@5.4.5) - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - transitivePeerDependencies: - - '@algolia/client-search' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - encoding - - esbuild - - eslint - - lightningcss - - search-insights - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/react-loadable@5.5.2(react@17.0.2): - resolution: {integrity: sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==} - peerDependencies: - react: '*' - dependencies: - '@types/react': 18.3.3 - prop-types: 15.8.1 - react: 17.0.2 - dev: false - - /@docusaurus/theme-classic@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/module-type-aliases': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/plugin-content-blog': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-docs': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-pages': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-common': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-translations': 2.4.0 - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-common': 2.4.0(@docusaurus/types@2.4.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@mdx-js/react': 1.6.22(react@17.0.2) - clsx: 1.2.1 - copy-text-to-clipboard: 3.2.0 - infima: 0.2.0-alpha.43 - lodash: 4.17.21 - nprogress: 0.2.0 - postcss: 8.4.38 - prism-react-renderer: 1.3.5(react@17.0.2) - prismjs: 1.29.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-router-dom: 5.3.4(react@17.0.2) - rtlcss: 3.5.0 - tslib: 2.6.3 - utility-types: 3.11.0 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-common@2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5): - resolution: {integrity: sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docusaurus/mdx-loader': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/module-type-aliases': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@docusaurus/plugin-content-blog': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-docs': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/plugin-content-pages': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-common': 2.4.0(@docusaurus/types@2.4.0) - '@types/history': 4.7.11 - '@types/react': 18.3.3 - '@types/react-router-config': 5.0.11 - clsx: 1.2.1 - parse-numeric-range: 1.3.0 - prism-react-renderer: 1.3.5(react@17.0.2) - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - use-sync-external-store: 1.2.2(react@17.0.2) - utility-types: 3.11.0 - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-search-algolia@2.4.0(@algolia/client-search@4.23.3)(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.14.0)(typescript@5.4.5): - resolution: {integrity: sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA==} - engines: {node: '>=16.14'} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(react-dom@17.0.2)(react@17.0.2)(search-insights@2.14.0) - '@docusaurus/core': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/logger': 2.4.0 - '@docusaurus/plugin-content-docs': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-common': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.4.5) - '@docusaurus/theme-translations': 2.4.0 - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - '@docusaurus/utils-validation': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - algoliasearch: 4.23.3 - algoliasearch-helper: 3.21.0(algoliasearch@4.23.3) - clsx: 1.2.1 - eta: 2.2.0 - fs-extra: 10.1.0 - lodash: 4.17.21 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - tslib: 2.6.3 - utility-types: 3.11.0 - transitivePeerDependencies: - - '@algolia/client-search' - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - '@types/react' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - search-insights - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - dev: false - - /@docusaurus/theme-translations@2.4.0: - resolution: {integrity: sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q==} - engines: {node: '>=16.14'} - dependencies: - fs-extra: 10.1.0 - tslib: 2.6.3 - dev: false - - /@docusaurus/types@2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw==} - peerDependencies: - react: ^16.8.4 || ^17.0.0 - react-dom: ^16.8.4 || ^17.0.0 - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.3.3 - commander: 5.1.0 - joi: 17.13.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-helmet-async: 1.3.0(react-dom@17.0.2)(react@17.0.2) - utility-types: 3.11.0 - webpack: 5.92.0(@swc/core@1.6.0) - webpack-merge: 5.10.0 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - - webpack-cli - dev: false - - /@docusaurus/utils-common@2.4.0(@docusaurus/types@2.4.0): - resolution: {integrity: sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A==} - engines: {node: '>=16.14'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - dependencies: - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - tslib: 2.6.3 - dev: false - - /@docusaurus/utils-validation@2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0): - resolution: {integrity: sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w==} - engines: {node: '>=16.14'} - dependencies: - '@docusaurus/logger': 2.4.0 - '@docusaurus/utils': 2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0) - joi: 17.13.1 - js-yaml: 4.1.0 - tslib: 2.6.3 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: false - - /@docusaurus/utils@2.4.0(@docusaurus/types@2.4.0)(@swc/core@1.6.0): - resolution: {integrity: sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg==} - engines: {node: '>=16.14'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - dependencies: - '@docusaurus/logger': 2.4.0 - '@docusaurus/types': 2.4.0(@swc/core@1.6.0)(react-dom@17.0.2)(react@17.0.2) - '@svgr/webpack': 6.5.1 - escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.92.0) - fs-extra: 10.1.0 - github-slugger: 1.5.0 - globby: 11.1.0 - gray-matter: 4.0.3 - js-yaml: 4.1.0 - lodash: 4.17.21 - micromatch: 4.0.7 - resolve-pathname: 3.0.0 - shelljs: 0.8.5 - tslib: 2.6.3 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.92.0) - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - dev: false - - /@hapi/hoek@9.3.0: - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - dev: false - - /@hapi/topo@5.1.0: - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - - /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@sinclair/typebox': 0.27.8 - dev: false - - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.2 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - dev: false - - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - dev: false - - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - dev: false - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false - - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - - /@leichtgewicht/ip-codec@2.0.5: - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - dev: false - - /@mdx-js/mdx@1.6.22: - resolution: {integrity: sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==} - dependencies: - '@babel/core': 7.12.9 - '@babel/plugin-syntax-jsx': 7.12.1(@babel/core@7.12.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.12.9) - '@mdx-js/util': 1.6.22 - babel-plugin-apply-mdx-type-prop: 1.6.22(@babel/core@7.12.9) - babel-plugin-extract-import-names: 1.6.22 - camelcase-css: 2.0.1 - detab: 2.0.4 - hast-util-raw: 6.0.1 - lodash.uniq: 4.5.0 - mdast-util-to-hast: 10.0.1 - remark-footnotes: 2.0.0 - remark-mdx: 1.6.22 - remark-parse: 8.0.3 - remark-squeeze-paragraphs: 4.0.0 - style-to-object: 0.3.0 - unified: 9.2.0 - unist-builder: 2.0.3 - unist-util-visit: 2.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@mdx-js/react@1.6.22(react@17.0.2): - resolution: {integrity: sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==} - peerDependencies: - react: ^16.13.1 || ^17.0.0 - dependencies: - react: 17.0.2 - dev: false - - /@mdx-js/util@1.6.22: - resolution: {integrity: sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==} - dev: false - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: false - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: false - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - dev: false - - /@polka/url@1.0.0-next.25: - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} - dev: false - - /@sideway/address@4.1.5: - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - dependencies: - '@hapi/hoek': 9.3.0 - dev: false - - /@sideway/formula@3.0.1: - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - dev: false - - /@sideway/pinpoint@2.0.0: - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - dev: false - - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: false - - /@sindresorhus/is@0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - dev: false - - /@slorber/static-site-generator-webpack-plugin@4.0.7: - resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} - engines: {node: '>=14'} - dependencies: - eval: 0.1.8 - p-map: 4.0.0 - webpack-sources: 3.2.3 - dev: false - - /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.7): - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.7): - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - dev: false - - /@svgr/babel-preset@6.5.1(@babel/core@7.24.7): - resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.24.7) - dev: false - - /@svgr/core@6.5.1: - resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 6.5.1(@babel/core@7.24.7) - '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) - camelcase: 6.3.0 - cosmiconfig: 7.1.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/hast-util-to-babel-ast@6.5.1: - resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.24.7 - entities: 4.5.0 - dev: false - - /@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1): - resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': ^6.0.0 - dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 6.5.1(@babel/core@7.24.7) - '@svgr/core': 6.5.1 - '@svgr/hast-util-to-babel-ast': 6.5.1 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1): - resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': '*' - dependencies: - '@svgr/core': 6.5.1 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - svgo: 2.8.0 - dev: false - - /@svgr/webpack@6.5.1: - resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-constant-elements': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@svgr/core': 6.5.1 - '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) - '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) - transitivePeerDependencies: - - supports-color - dev: false - - /@swc/core-darwin-arm64@1.6.0: - resolution: {integrity: sha512-W1Mwk0WRrJ5lAVkYRPxpxOmwu8p9ASXeOmiORhXvE7DYREyI30005xlqSOITU1pfSNKj7G9u3+9DjsOzPPPbBw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@swc/core-darwin-x64@1.6.0: - resolution: {integrity: sha512-EzxLnpPC1zgLb2Y0iVUG6b+/GUv43k6uJUIs52UzxOnBElYP/WeItI3RJ+LUMFzCpZMk/IxB10wofEoeQ1H/Xg==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@swc/core-linux-arm-gnueabihf@1.6.0: - resolution: {integrity: sha512-uP/STDjWZ5N6lc8mxJFsex4NXDaqhfzd8UOrI3LfdV97+4faE4/BC6bVqDNHFFzZi0PHuVBxD6md7IfPjugk6A==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@swc/core-linux-arm64-gnu@1.6.0: - resolution: {integrity: sha512-UgNz6anowcnYzJtZohzpii31FOgouBHJqluiq+p2geX/agbC+KfOKwVXdljn95+Qc4ygBuw/hjKjgF2msOLeVg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@swc/core-linux-arm64-musl@1.6.0: - resolution: {integrity: sha512-xPV6qrnj4nFwXQbIv70C1Kn5z5Th53sirIY76aEonr78qeC6+ywaBZR4uLFNHsljVjyuvVQfTTcl2qraGhu6oQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@swc/core-linux-x64-gnu@1.6.0: - resolution: {integrity: sha512-xTeWn4OT5uQ+DxT2cy94ngK8tF1U/5fMC49/V6FhCS2Wh+Xa/O+OWcOyKvYtk3b0eGYS4iNIRKgzog7fLSFtvQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@swc/core-linux-x64-musl@1.6.0: - resolution: {integrity: sha512-3P01mYD5XbyaVLT0MGZmZE+ZdgmGSvuvIhSejRDBlEXqkFnH79nWds+KsE+91hzVU8XsgzX57Yzv4eO5dlIuPw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@swc/core-win32-arm64-msvc@1.6.0: - resolution: {integrity: sha512-xFuook1efU0ctzMAEeol4eI7J6+k/c/pMJpp/NP/4JJDnhlHwAi2iyiZcID8YZS+ePHgXMLndGdIMHVv/wIPkQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@swc/core-win32-ia32-msvc@1.6.0: - resolution: {integrity: sha512-VCJa5vTywxzASqvf9OEUM5SZBcNrWbuIkSGM5T9guuBzyrh/tSqVHjzOWL9qpP69uPVj5G/I5bJObLiUKErhvQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@swc/core-win32-x64-msvc@1.6.0: - resolution: {integrity: sha512-L7i8WBSIJTQiMONJGHnznDydZmlJIqHjZ3VhBHeTTms8cEAuwkAVgzPwgr5cD9GhmcwdeBI9iYdOuKr1pUx19Q==} - engines: {node: '>=10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@swc/core@1.6.0: - resolution: {integrity: sha512-Wynbo79uIVBgmq3TPcTMdtXUkqk69IPSVuzo7/Jl1OhR4msC7cUaoRB1216ZanWttrAZ4/g6u17w9XZG4fzp1A==} - engines: {node: '>=10'} - requiresBuild: true - peerDependencies: - '@swc/helpers': '*' - peerDependenciesMeta: - '@swc/helpers': - optional: true - dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 - optionalDependencies: - '@swc/core-darwin-arm64': 1.6.0 - '@swc/core-darwin-x64': 1.6.0 - '@swc/core-linux-arm-gnueabihf': 1.6.0 - '@swc/core-linux-arm64-gnu': 1.6.0 - '@swc/core-linux-arm64-musl': 1.6.0 - '@swc/core-linux-x64-gnu': 1.6.0 - '@swc/core-linux-x64-musl': 1.6.0 - '@swc/core-win32-arm64-msvc': 1.6.0 - '@swc/core-win32-ia32-msvc': 1.6.0 - '@swc/core-win32-x64-msvc': 1.6.0 - dev: false - - /@swc/counter@0.1.3: - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - dev: false - - /@swc/types@0.1.8: - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} - dependencies: - '@swc/counter': 0.1.3 - dev: false - - /@szmarczak/http-timer@1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} - dependencies: - defer-to-connect: 1.1.3 - dev: false - - /@trysound/sax@0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: false - - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.14.2 - dev: false - - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - dependencies: - '@types/express-serve-static-core': 4.19.3 - '@types/node': 20.14.2 - dev: false - - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 - dev: false - - /@types/eslint@8.56.10: - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: false - - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: false - - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} - dependencies: - '@types/node': 20.14.2 - '@types/qs': 6.9.15 - '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 - dev: false - - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} - dependencies: - '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 - '@types/qs': 6.9.15 - '@types/serve-static': 1.15.7 - dev: false - - /@types/hast@2.3.10: - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - dependencies: - '@types/unist': 2.0.10 - dev: false - - /@types/history@4.7.11: - resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - dev: false - - /@types/html-minifier-terser@6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: false - - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: false - - /@types/http-proxy@1.17.14: - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: false - - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - dev: false - - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - dependencies: - '@types/istanbul-lib-report': 3.0.3 - dev: false - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: false - - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/mdast@3.0.15: - resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} - dependencies: - '@types/unist': 2.0.10 - dev: false - - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: false - - /@types/node-forge@1.3.11: - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/node@17.0.45: - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - dev: false - - /@types/node@20.14.2: - resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} - dependencies: - undici-types: 5.26.5 - dev: false - - /@types/parse-json@4.0.2: - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false - - /@types/parse5@5.0.3: - resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} - dev: false - - /@types/prop-types@15.7.12: - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: false - - /@types/qs@6.9.15: - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} - dev: false - - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: false - - /@types/react-router-config@5.0.11: - resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.3.3 - '@types/react-router': 5.1.20 - dev: false - - /@types/react-router-dom@5.3.3: - resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.3.3 - '@types/react-router': 5.1.20 - dev: false - - /@types/react-router@5.1.20: - resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - dependencies: - '@types/history': 4.7.11 - '@types/react': 18.3.3 - dev: false - - /@types/react@18.3.3: - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} - dependencies: - '@types/prop-types': 15.7.12 - csstype: 3.1.3 - dev: false - - /@types/responselike@1.0.3: - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/retry@0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: false - - /@types/sax@1.2.7: - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - dependencies: - '@types/node': 17.0.45 - dev: false - - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.14.2 - dev: false - - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - dependencies: - '@types/express': 4.17.21 - dev: false - - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} - dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.14.2 - '@types/send': 0.17.4 - dev: false - - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/unist@2.0.10: - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} - dev: false - - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 20.14.2 - dev: false - - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: false - - /@types/yargs@17.0.32: - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: false - - /@webassemblyjs/ast@1.12.1: - resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - dev: false - - /@webassemblyjs/floating-point-hex-parser@1.11.6: - resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} - dev: false - - /@webassemblyjs/helper-api-error@1.11.6: - resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} - dev: false - - /@webassemblyjs/helper-buffer@1.12.1: - resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} - dev: false - - /@webassemblyjs/helper-numbers@1.11.6: - resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.6 - '@webassemblyjs/helper-api-error': 1.11.6 - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/helper-wasm-bytecode@1.11.6: - resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} - dev: false - - /@webassemblyjs/helper-wasm-section@1.12.1: - resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/wasm-gen': 1.12.1 - dev: false - - /@webassemblyjs/ieee754@1.11.6: - resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: false - - /@webassemblyjs/leb128@1.11.6: - resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} - dependencies: - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/utf8@1.11.6: - resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} - dev: false - - /@webassemblyjs/wasm-edit@1.12.1: - resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/helper-wasm-section': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-opt': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - '@webassemblyjs/wast-printer': 1.12.1 - dev: false - - /@webassemblyjs/wasm-gen@1.12.1: - resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wasm-opt@1.12.1: - resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-buffer': 1.12.1 - '@webassemblyjs/wasm-gen': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - dev: false - - /@webassemblyjs/wasm-parser@1.12.1: - resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/helper-api-error': 1.11.6 - '@webassemblyjs/helper-wasm-bytecode': 1.11.6 - '@webassemblyjs/ieee754': 1.11.6 - '@webassemblyjs/leb128': 1.11.6 - '@webassemblyjs/utf8': 1.11.6 - dev: false - - /@webassemblyjs/wast-printer@1.12.1: - resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} - dependencies: - '@webassemblyjs/ast': 1.12.1 - '@xtuc/long': 4.2.2 - dev: false - - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false - - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false - - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - - /acorn-import-attributes@1.9.5(acorn@8.12.0): - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.12.0 - dev: false - - /acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} - engines: {node: '>=0.4.0'} - dependencies: - acorn: 8.12.0 - dev: false - - /acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - dev: false - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: false - - /ajv-formats@2.1.1(ajv@8.16.0): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.16.0 - dev: false - - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: false - - /ajv-keywords@5.1.0(ajv@8.16.0): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.16.0 - fast-deep-equal: 3.1.3 - dev: false - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: false - - /ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - - /algoliasearch-helper@3.21.0(algoliasearch@4.23.3): - resolution: {integrity: sha512-hjVOrL15I3Y3K8xG0icwG1/tWE+MocqBrhW6uVBWpU+/kVEMK0BnM2xdssj6mZM61eJ4iRxHR0djEI3ENOpR8w==} - peerDependencies: - algoliasearch: '>= 3.1 < 6' - dependencies: - '@algolia/events': 4.0.1 - algoliasearch: 4.23.3 - dev: false - - /algoliasearch@4.23.3: - resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-account': 4.23.3 - '@algolia/client-analytics': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-personalization': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/recommend': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 - dev: false - - /ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 - dev: false - - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: false - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false - - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: false - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: false - - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: false - - /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false - - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: false - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: false - - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: false - - /autoprefixer@10.4.19(postcss@8.4.38): - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001634 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /axios@0.25.0: - resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} - dependencies: - follow-redirects: 1.15.6 - transitivePeerDependencies: - - debug - dev: false - - /axios@1.7.2: - resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} - dependencies: - follow-redirects: 1.15.6 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false - - /babel-loader@8.3.0(@babel/core@7.24.7)(webpack@5.92.0): - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.24.7 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): - resolution: {integrity: sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==} - peerDependencies: - '@babel/core': ^7.11.6 - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 - '@mdx-js/util': 1.6.22 - dev: false - - /babel-plugin-dynamic-import-node@2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - dependencies: - object.assign: 4.1.5 - dev: false - - /babel-plugin-extract-import-names@1.6.22: - resolution: {integrity: sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==} - dependencies: - '@babel/helper-plugin-utils': 7.10.4 - dev: false - - /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): - resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - core-js-compat: 3.37.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): - resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) - transitivePeerDependencies: - - supports-color - dev: false - - /bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} - dev: false - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /base16@1.0.0: - resolution: {integrity: sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==} - dev: false - - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: false - - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: false - - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: false - - /body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /bonjour-service@1.2.1: - resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} - dependencies: - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: false - - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: false - - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 2.2.1 - string-width: 4.2.3 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: false - - /boxen@6.2.1: - resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - ansi-align: 3.0.1 - camelcase: 6.3.0 - chalk: 4.1.2 - cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 - dev: false - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.1.1 - dev: false - - /browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001634 - electron-to-chromium: 1.4.803 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) - dev: false - - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false - - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /cacheable-request@6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - dev: false - - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - dev: false - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: false - - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.6.3 - dev: false - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: false - - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: false - - /caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001634 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: false - - /caniuse-lite@1.0.30001634: - resolution: {integrity: sha512-fbBYXQ9q3+yp1q1gBk86tOFs4pyn/yxFm5ZNP18OXJDfA3txImOY9PhfxVggZ4vRHDqoU8NrKU81eN0OtzOgRA==} - dev: false - - /ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - dev: false - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: false - - /character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: false - - /character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - dev: false - - /cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - dependencies: - boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.1.0 - dev: false - - /cheerio@1.0.0-rc.12: - resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} - engines: {node: '>= 6'} - dependencies: - cheerio-select: 2.1.0 - dom-serializer: 2.0.0 - domhandler: 5.0.3 - domutils: 3.1.0 - htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 - dev: false - - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: false - - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true - - /chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - dev: false - - /ci-info@2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: false - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: false - - /classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - dev: false - - /clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: false - - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: false - - /cli-boxes@2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: false - - /cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - dev: false - - /cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: false - - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - dependencies: - is-plain-object: 2.0.4 - kind-of: 6.0.3 - shallow-clone: 3.0.1 - dev: false - - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - dependencies: - mimic-response: 1.0.1 - dev: false - - /clsx@1.2.1: - resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} - engines: {node: '>=6'} - dev: false - - /collapse-white-space@1.0.6: - resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} - dev: false - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: false - - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: false - - /combine-promises@1.2.0: - resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} - engines: {node: '>=10'} - dev: false - - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - dev: false - - /command-exists-promise@2.0.2: - resolution: {integrity: sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA==} - engines: {node: '>=6'} - dev: true - - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - dev: false - - /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: false - - /commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false - - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false - - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /configstore@5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.11 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: false - - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: false - - /consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} - dev: false - - /content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - dev: false - - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: false - - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: false - - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false - - /cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - dev: false - - /copy-text-to-clipboard@3.2.0: - resolution: {integrity: sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==} - engines: {node: '>=12'} - dev: false - - /copy-webpack-plugin@11.0.0(webpack@5.92.0): - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.2 - glob-parent: 6.0.2 - globby: 13.2.2 - normalize-path: 3.0.0 - schema-utils: 4.2.0 - serialize-javascript: 6.0.2 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} - dependencies: - browserslist: 4.23.1 - dev: false - - /core-js-pure@3.37.1: - resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} - requiresBuild: true - dev: false - - /core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} - requiresBuild: true - dev: false - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cosmiconfig@8.3.6(typescript@5.4.5): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - typescript: 5.4.5 - dev: false - - /cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: false - - /crypto-random-string@2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - - /css-declaration-sorter@6.4.1(postcss@8.4.38): - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.38 - dev: false - - /css-loader@6.11.0(webpack@5.92.0): - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) - postcss-value-parser: 4.2.0 - semver: 7.6.2 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.3)(webpack@5.92.0): - resolution: {integrity: sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@parcel/css': '*' - '@swc/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - lightningcss: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - '@swc/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - lightningcss: - optional: true - dependencies: - clean-css: 5.3.3 - cssnano: 5.1.15(postcss@8.4.38) - jest-worker: 29.7.0 - postcss: 8.4.38 - schema-utils: 4.2.0 - serialize-javascript: 6.0.2 - source-map: 0.6.1 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: false - - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 5.0.3 - domutils: 3.1.0 - nth-check: 2.1.1 - dev: false - - /css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false - - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: false - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /cssnano-preset-advanced@5.3.10(postcss@8.4.38): - resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - autoprefixer: 10.4.19(postcss@8.4.38) - cssnano-preset-default: 5.2.14(postcss@8.4.38) - postcss: 8.4.38 - postcss-discard-unused: 5.1.0(postcss@8.4.38) - postcss-merge-idents: 5.1.1(postcss@8.4.38) - postcss-reduce-idents: 5.2.0(postcss@8.4.38) - postcss-zindex: 5.1.0(postcss@8.4.38) - dev: false - - /cssnano-preset-default@5.2.14(postcss@8.4.38): - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.38) - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-calc: 8.2.4(postcss@8.4.38) - postcss-colormin: 5.3.1(postcss@8.4.38) - postcss-convert-values: 5.1.3(postcss@8.4.38) - postcss-discard-comments: 5.1.2(postcss@8.4.38) - postcss-discard-duplicates: 5.1.0(postcss@8.4.38) - postcss-discard-empty: 5.1.1(postcss@8.4.38) - postcss-discard-overridden: 5.1.0(postcss@8.4.38) - postcss-merge-longhand: 5.1.7(postcss@8.4.38) - postcss-merge-rules: 5.1.4(postcss@8.4.38) - postcss-minify-font-values: 5.1.0(postcss@8.4.38) - postcss-minify-gradients: 5.1.1(postcss@8.4.38) - postcss-minify-params: 5.1.4(postcss@8.4.38) - postcss-minify-selectors: 5.2.1(postcss@8.4.38) - postcss-normalize-charset: 5.1.0(postcss@8.4.38) - postcss-normalize-display-values: 5.1.0(postcss@8.4.38) - postcss-normalize-positions: 5.1.1(postcss@8.4.38) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.38) - postcss-normalize-string: 5.1.0(postcss@8.4.38) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.38) - postcss-normalize-unicode: 5.1.1(postcss@8.4.38) - postcss-normalize-url: 5.1.0(postcss@8.4.38) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.38) - postcss-ordered-values: 5.1.3(postcss@8.4.38) - postcss-reduce-initial: 5.1.2(postcss@8.4.38) - postcss-reduce-transforms: 5.1.0(postcss@8.4.38) - postcss-svgo: 5.1.0(postcss@8.4.38) - postcss-unique-selectors: 5.1.1(postcss@8.4.38) - dev: false - - /cssnano-utils@3.1.0(postcss@8.4.38): - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /cssnano@5.1.15(postcss@8.4.38): - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.38) - lilconfig: 2.1.0 - postcss: 8.4.38 - yaml: 1.10.2 - dev: false - - /csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: false - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: false - - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: false - - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - - /debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: false - - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: false - - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false - - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: false - - /defer-to-connect@1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} - dev: false - - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - dev: false - - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: false - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: false - - /del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.11 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: false - - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: false - - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: false - - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false - - /detab@2.0.4: - resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} - dependencies: - repeat-string: 1.6.1 - dev: false - - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false - - /detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: false - - /detect-port@1.6.1: - resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} - engines: {node: '>= 4.0.0'} - hasBin: true - dependencies: - address: 1.2.2 - debug: 4.3.5 - transitivePeerDependencies: - - supports-color - dev: false - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: false - - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - dev: false - - /dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: false - - /dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: false - - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - entities: 4.5.0 - dev: false - - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false - - /domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: false - - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: false - - /domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: false - - /domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - dependencies: - dom-serializer: 2.0.0 - domelementtype: 2.3.0 - domhandler: 5.0.3 - dev: false - - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - dev: false - - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: false - - /duplexer3@0.1.5: - resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} - dev: false - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: false - - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: false - - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false - - /electron-to-chromium@1.4.803: - resolution: {integrity: sha512-61H9mLzGOCLLVsnLiRzCbc63uldP0AniRYPV3hbGVtONA1pI7qSGILdbofR7A8TMbOypDocEAjH/e+9k1QIe3g==} - dev: false - - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: false - - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: false - - /emoticon@3.2.0: - resolution: {integrity: sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==} - dev: false - - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: false - - /enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - dev: false - - /entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: false - - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: false - - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - dev: false - - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: false - - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} - dev: false - - /escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} - engines: {node: '>=6'} - dev: false - - /escape-goat@2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} - dev: false - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: false - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: false - - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: false - - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: false - - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: false - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: false - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: false - - /eta@2.2.0: - resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==} - engines: {node: '>=6.0.0'} - dev: false - - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - - /eval@0.1.8: - resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} - engines: {node: '>= 0.8'} - dependencies: - '@types/node': 20.14.2 - require-like: 0.1.2 - dev: false - - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false - - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: false - - /express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 - dev: false - - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.7 - dev: false - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: false - - /fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} - dependencies: - punycode: 1.4.1 - dev: false - - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - dependencies: - reusify: 1.0.4 - dev: false - - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /fbemitter@3.0.0: - resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} - dependencies: - fbjs: 3.0.5 - transitivePeerDependencies: - - encoding - dev: false - - /fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - dev: false - - /fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} - dependencies: - cross-fetch: 3.1.8 - fbjs-css-vars: 1.0.2 - loose-envify: 1.4.0 - object-assign: 4.1.1 - promise: 7.3.1 - setimmediate: 1.0.5 - ua-parser-js: 1.0.38 - transitivePeerDependencies: - - encoding - dev: false - - /feed@4.2.2: - resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} - engines: {node: '>=0.4.0'} - dependencies: - xml-js: 1.6.11 - dev: false - - /file-loader@6.2.0(webpack@5.92.0): - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.3.0 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: false - - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: false - - /finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: false - - /find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: false - - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: false - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: false - - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: false - - /flux@4.0.4(react@17.0.2): - resolution: {integrity: sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==} - peerDependencies: - react: ^15.0.2 || ^16.0.0 || ^17.0.0 - dependencies: - fbemitter: 3.0.0 - fbjs: 3.0.5 - react: 17.0.2 - transitivePeerDependencies: - - encoding - dev: false - - /follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /fork-ts-checker-webpack-plugin@6.5.3(typescript@5.4.5)(webpack@5.92.0): - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.24.7 - '@types/json-schema': 7.0.15 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 6.0.0 - deepmerge: 4.3.1 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.5.3 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.6.2 - tapable: 1.1.3 - typescript: 5.4.5 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false - - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: false - - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: false - - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: false - - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - dev: true - - /fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} - dev: false - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: false - - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - dev: false - - /get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: false - - /get-stream@4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: false - - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: false - - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: false - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: false - - /global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: false - - /global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: false - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: false - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 - dev: false - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.4 - dev: false - - /got@9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.3 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.5 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 - dev: false - - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false - - /gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 - dev: false - - /gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: false - - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: false - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: false - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - dependencies: - es-define-property: 1.0.0 - dev: false - - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: false - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: false - - /has-yarn@2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} - dev: false - - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - - /hast-to-hyperscript@9.0.1: - resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} - dependencies: - '@types/unist': 2.0.10 - comma-separated-tokens: 1.0.8 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - style-to-object: 0.3.0 - unist-util-is: 4.1.0 - web-namespaces: 1.1.4 - dev: false - - /hast-util-from-parse5@6.0.1: - resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} - dependencies: - '@types/parse5': 5.0.3 - hastscript: 6.0.0 - property-information: 5.6.0 - vfile: 4.2.1 - vfile-location: 3.2.0 - web-namespaces: 1.1.4 - dev: false - - /hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - dev: false - - /hast-util-raw@6.0.1: - resolution: {integrity: sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==} - dependencies: - '@types/hast': 2.3.10 - hast-util-from-parse5: 6.0.1 - hast-util-to-parse5: 6.0.0 - html-void-elements: 1.0.5 - parse5: 6.0.1 - unist-util-position: 3.1.0 - vfile: 4.2.1 - web-namespaces: 1.1.4 - xtend: 4.0.2 - zwitch: 1.0.5 - dev: false - - /hast-util-to-parse5@6.0.0: - resolution: {integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==} - dependencies: - hast-to-hyperscript: 9.0.1 - property-information: 5.6.0 - web-namespaces: 1.1.4 - xtend: 4.0.2 - zwitch: 1.0.5 - dev: false - - /hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - dev: false - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: false - - /history@4.10.1: - resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} - dependencies: - '@babel/runtime': 7.24.7 - loose-envify: 1.4.0 - resolve-pathname: 3.0.0 - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - value-equal: 1.0.1 - dev: false - - /hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false - - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.8 - wbuf: 1.7.3 - dev: false - - /html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - dev: false - - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: false - - /html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.3 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.31.1 - dev: false - - /html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - dev: false - - /html-void-elements@1.0.5: - resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} - dev: false - - /html-webpack-plugin@5.6.0(webpack@5.92.0): - resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: false - - /htmlparser2@8.0.2: - resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.1.0 - entities: 4.5.0 - dev: false - - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: false - - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: false - - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: false - - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: false - - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: false - - /http-proxy-middleware@2.0.6(@types/express@4.17.21): - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.14 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.7 - transitivePeerDependencies: - - debug - dev: false - - /http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.6 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: false - - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: false - - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /icss-utils@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: false - - /ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - dev: false - - /image-size@1.1.1: - resolution: {integrity: sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==} - engines: {node: '>=16.x'} - hasBin: true - dependencies: - queue: 6.0.2 - dev: false - - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: false - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: false - - /import-lazy@2.1.0: - resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} - engines: {node: '>=4'} - dev: false - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: false - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: false - - /infima@0.2.0-alpha.43: - resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==} - engines: {node: '>=12'} - dev: false - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: false - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: false - - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - dev: false - - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - dev: false - - /is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: false - - /is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - dev: false - - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.3.0 - dev: false - - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - - /is-ci@2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - dependencies: - ci-info: 2.0.0 - dev: false - - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.2 - - /is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: false - - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: false - - /is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - dev: false - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: false - - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: false - - /is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: false - - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - dev: false - - /is-npm@5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} - dev: false - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: false - - /is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false - - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: false - - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: false - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: false - - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: false - - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: false - - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: false - - /is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: false - - /is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: false - - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false - - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: false - - /is-whitespace-character@1.0.4: - resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} - dev: false - - /is-word-character@1.0.4: - resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} - dev: false - - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: false - - /is-yarn-global@0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - dev: false - - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: false - - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false - - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: false - - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.14.2 - chalk: 4.1.2 - ci-info: 3.9.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - dev: false - - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 20.14.2 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@types/node': 20.14.2 - jest-util: 29.7.0 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jiti@1.21.6: - resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} - hasBin: true - dev: false - - /joi@17.13.1: - resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} - dependencies: - '@hapi/hoek': 9.3.0 - '@hapi/topo': 5.1.0 - '@sideway/address': 4.1.5 - '@sideway/formula': 3.0.1 - '@sideway/pinpoint': 2.0.0 - dev: false - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: false - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: false - - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: false - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /json-buffer@3.0.0: - resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} - dev: false - - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: false - - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: false - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - dev: false - - /keyv@3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - dependencies: - json-buffer: 3.0.0 - dev: false - - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: false - - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false - - /latest-version@5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} - dependencies: - package-json: 6.5.0 - dev: false - - /launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} - dependencies: - picocolors: 1.0.1 - shell-quote: 1.8.1 - dev: false - - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: false - - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - dev: false - - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: false - - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - dev: false - - /loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - dev: false - - /locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: false - - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: false - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: false - - /lodash.curry@4.1.1: - resolution: {integrity: sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==} - dev: false - - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: false - - /lodash.flow@3.5.0: - resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==} - dev: false - - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: false - - /lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: false - - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.6.3 - dev: false - - /lowercase-keys@1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - dev: false - - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: false - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: false - - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: false - - /markdown-escapes@1.0.4: - resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} - dev: false - - /mdast-squeeze-paragraphs@4.0.0: - resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} - dependencies: - unist-util-remove: 2.1.0 - dev: false - - /mdast-util-definitions@4.0.0: - resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} - dependencies: - unist-util-visit: 2.0.3 - dev: false - - /mdast-util-to-hast@10.0.1: - resolution: {integrity: sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==} - dependencies: - '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 - mdast-util-definitions: 4.0.0 - mdurl: 1.0.1 - unist-builder: 2.0.3 - unist-util-generated: 1.1.6 - unist-util-position: 3.1.0 - unist-util-visit: 2.0.3 - dev: false - - /mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - dev: false - - /mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false - - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: false - - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: false - - /memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} - dependencies: - fs-monkey: 1.0.6 - dev: false - - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false - - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: false - - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: false - - /micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.3 - picomatch: 2.3.1 - dev: false - - /mime-db@1.33.0: - resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} - engines: {node: '>= 0.6'} - dev: false - - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types@2.1.18: - resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.33.0 - dev: false - - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: false - - /mini-css-extract-plugin@2.9.0(webpack@5.92.0): - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.2.0 - tapable: 2.2.1 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: false - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: false - - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - dependencies: - yallist: 4.0.0 - dev: true - - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true - - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - dev: true - - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true - - /mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - dev: false - - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.6.1 - thunky: 1.1.0 - dev: false - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false - - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.6.3 - dev: false - - /node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - dependencies: - lodash: 4.17.21 - dev: false - - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: false - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: false - - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-url@4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - dev: false - - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false - - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: false - - /nprogress@0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - dev: false - - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: false - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: false - - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: false - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: false - - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: false - - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: false - - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false - - /opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - dev: false - - /p-cancelable@1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - dev: false - - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: false - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: false - - /p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: false - - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - dev: false - - /p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: false - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: false - - /package-json@6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} - dependencies: - got: 9.6.0 - registry-auth-token: 4.2.2 - registry-url: 5.1.0 - semver: 6.3.1 - dev: false - - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.6.3 - dev: false - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: false - - /parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - dev: false - - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.24.7 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - - /parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - dev: false - - /parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} - dependencies: - domhandler: 5.0.3 - parse5: 7.1.2 - dev: false - - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false - - /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - dependencies: - entities: 4.5.0 - dev: false - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.6.3 - dev: false - - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: false - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - /path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - dev: false - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: false - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - /path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false - - /path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} - dependencies: - isarray: 0.0.1 - dev: false - - /path-to-regexp@2.2.1: - resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} - dev: false - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: false - - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true - - /picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - dev: false - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: false - - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: false - - /pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: false - - /postcss-calc@8.2.4(postcss@8.4.38): - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-colormin@5.3.1(postcss@8.4.38): - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-convert-values@5.1.3(postcss@8.4.38): - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-discard-comments@5.1.2(postcss@8.4.38): - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-discard-duplicates@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-discard-empty@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-discard-overridden@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-discard-unused@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /postcss-loader@7.3.4(postcss@8.4.38)(typescript@5.4.5)(webpack@5.92.0): - resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 8.3.6(typescript@5.4.5) - jiti: 1.21.6 - postcss: 8.4.38 - semver: 7.6.2 - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - typescript - dev: false - - /postcss-merge-idents@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-merge-longhand@5.1.7(postcss@8.4.38): - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.38) - dev: false - - /postcss-merge-rules@5.1.4(postcss@8.4.38): - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /postcss-minify-font-values@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-gradients@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-params@5.1.4(postcss@8.4.38): - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-selectors@5.2.1(postcss@8.4.38): - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): - resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-modules-scope@3.2.0(postcss@8.4.38): - resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /postcss-modules-values@4.0.0(postcss@8.4.38): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - dev: false - - /postcss-normalize-charset@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss-normalize-display-values@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-positions@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-string@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-unicode@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-url@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-whitespace@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-ordered-values@5.1.3(postcss@8.4.38): - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-reduce-idents@5.2.0(postcss@8.4.38): - resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-reduce-initial@5.1.2(postcss@8.4.38): - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - caniuse-api: 3.0.0 - postcss: 8.4.38 - dev: false - - /postcss-reduce-transforms@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: false - - /postcss-sort-media-queries@4.4.1(postcss@8.4.38): - resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.4.16 - dependencies: - postcss: 8.4.38 - sort-css-media-queries: 2.1.0 - dev: false - - /postcss-svgo@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: false - - /postcss-unique-selectors@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false - - /postcss-zindex@5.1.0(postcss@8.4.38): - resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.38 - dev: false - - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - dev: false - - /prepend-http@2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} - engines: {node: '>=4'} - dev: false - - /prettier@2.8.7: - resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true - - /pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: false - - /pretty-time@1.1.0: - resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} - engines: {node: '>=4'} - dev: false - - /prism-react-renderer@1.3.5(react@17.0.2): - resolution: {integrity: sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==} - peerDependencies: - react: '>=0.14.9' - dependencies: - react: 17.0.2 - dev: false - - /prismjs@1.29.0: - resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} - engines: {node: '>=6'} - dev: false - - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - - /promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - dependencies: - asap: 2.0.6 - dev: false - - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - - /property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - dependencies: - xtend: 4.0.2 - dev: false - - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false - - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: false - - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: false - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: false - - /pupa@2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 - dev: false - - /pure-color@1.3.0: - resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==} - dev: false - - /qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: false - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false - - /queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - dependencies: - inherits: 2.0.4 - dev: false - - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /range-parser@1.2.0: - resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} - engines: {node: '>= 0.6'} - dev: false - - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: false - - /react-base16-styling@0.6.0: - resolution: {integrity: sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==} - dependencies: - base16: 1.0.0 - lodash.curry: 4.1.1 - lodash.flow: 3.5.0 - pure-color: 1.3.0 - dev: false - - /react-dev-utils@12.0.1(typescript@5.4.5)(webpack@5.92.0): - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.24.7 - address: 1.2.2 - browserslist: 4.23.1 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.4.5)(webpack@5.92.0) - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.21 - is-root: 2.1.0 - loader-utils: 3.3.1 - open: 8.4.2 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.8.1 - strip-ansi: 6.0.1 - text-table: 0.2.0 - typescript: 5.4.5 - webpack: 5.92.0(@swc/core@1.6.0) - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - dev: false - - /react-dom@17.0.2(react@17.0.2): - resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} - peerDependencies: - react: 17.0.2 - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react: 17.0.2 - scheduler: 0.20.2 - dev: false - - /react-easy-swipe@0.0.21: - resolution: {integrity: sha512-OeR2jAxdoqUMHIn/nS9fgreI5hSpgGoL5ezdal4+oO7YSSgJR8ga+PkYGJrSrJ9MKlPcQjMQXnketrD7WNmNsg==} - engines: {node: '>= 6'} - dependencies: - prop-types: 15.8.1 - dev: false - - /react-error-overlay@6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: false - - /react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - dev: false - - /react-helmet-async@1.3.0(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/runtime': 7.24.7 - invariant: 2.2.4 - prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-fast-compare: 3.2.2 - shallowequal: 1.1.0 - dev: false - - /react-helmet-async@2.0.5(react@17.0.2): - resolution: {integrity: sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - dependencies: - invariant: 2.2.4 - react: 17.0.2 - react-fast-compare: 3.2.2 - shallowequal: 1.1.0 - dev: false - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - - /react-json-view@1.21.3(react-dom@17.0.2)(react@17.0.2): - resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} - peerDependencies: - react: ^17.0.0 || ^16.3.0 || ^15.5.4 - react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 - dependencies: - flux: 4.0.4(react@17.0.2) - react: 17.0.2 - react-base16-styling: 0.6.0 - react-dom: 17.0.2(react@17.0.2) - react-lifecycles-compat: 3.0.4 - react-textarea-autosize: 8.5.3(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - - encoding - dev: false - - /react-lifecycles-compat@3.0.4: - resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} - dev: false - - /react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.92.0): - resolution: {integrity: sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==} - engines: {node: '>=10.13.0'} - peerDependencies: - react-loadable: '*' - webpack: '>=4.41.1 || 5.x' - dependencies: - '@babel/runtime': 7.24.7 - react-loadable: /@docusaurus/react-loadable@5.5.2(react@17.0.2) - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /react-responsive-carousel@3.2.23: - resolution: {integrity: sha512-pqJLsBaKHWJhw/ItODgbVoziR2z4lpcJg+YwmRlSk4rKH32VE633mAtZZ9kDXjy4wFO+pgUZmDKPsPe1fPmHCg==} - dependencies: - classnames: 2.5.1 - prop-types: 15.8.1 - react-easy-swipe: 0.0.21 - dev: false - - /react-router-config@5.1.1(react-router@5.3.4)(react@17.0.2): - resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} - peerDependencies: - react: '>=15' - react-router: '>=5' - dependencies: - '@babel/runtime': 7.24.7 - react: 17.0.2 - react-router: 5.3.4(react@17.0.2) - dev: false - - /react-router-dom@5.3.4(react@17.0.2): - resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} - peerDependencies: - react: '>=15' - dependencies: - '@babel/runtime': 7.24.7 - history: 4.10.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 17.0.2 - react-router: 5.3.4(react@17.0.2) - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - dev: false - - /react-router@5.3.4(react@17.0.2): - resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} - peerDependencies: - react: '>=15' - dependencies: - '@babel/runtime': 7.24.7 - history: 4.10.1 - hoist-non-react-statics: 3.3.2 - loose-envify: 1.4.0 - path-to-regexp: 1.8.0 - prop-types: 15.8.1 - react: 17.0.2 - react-is: 16.13.1 - tiny-invariant: 1.3.3 - tiny-warning: 1.0.3 - dev: false - - /react-textarea-autosize@8.5.3(react@17.0.2): - resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} - engines: {node: '>=10'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/runtime': 7.24.7 - react: 17.0.2 - use-composed-ref: 1.3.0(react@17.0.2) - use-latest: 1.2.1(react@17.0.2) - transitivePeerDependencies: - - '@types/react' - dev: false - - /react@17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - dev: false - - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: false - - /reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} - dev: false - - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - dependencies: - resolve: 1.22.8 - - /recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: false - - /regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false - - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - dependencies: - '@babel/runtime': 7.24.7 - dev: false - - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} - dependencies: - '@babel/regjsgen': 0.8.0 - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 - dev: false - - /registry-auth-token@4.2.2: - resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} - engines: {node: '>=6.0.0'} - dependencies: - rc: 1.2.8 - dev: false - - /registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - dependencies: - rc: 1.2.8 - dev: false - - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - - /relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: false - - /remark-emoji@2.2.0: - resolution: {integrity: sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==} - dependencies: - emoticon: 3.2.0 - node-emoji: 1.11.0 - unist-util-visit: 2.0.3 - dev: false - - /remark-footnotes@2.0.0: - resolution: {integrity: sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==} - dev: false - - /remark-mdx@1.6.22: - resolution: {integrity: sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==} - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 - '@babel/plugin-proposal-object-rest-spread': 7.12.1(@babel/core@7.12.9) - '@babel/plugin-syntax-jsx': 7.12.1(@babel/core@7.12.9) - '@mdx-js/util': 1.6.22 - is-alphabetical: 1.0.4 - remark-parse: 8.0.3 - unified: 9.2.0 - transitivePeerDependencies: - - supports-color - dev: false - - /remark-parse@8.0.3: - resolution: {integrity: sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==} - dependencies: - ccount: 1.1.0 - collapse-white-space: 1.0.6 - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-whitespace-character: 1.0.4 - is-word-character: 1.0.4 - markdown-escapes: 1.0.4 - parse-entities: 2.0.0 - repeat-string: 1.6.1 - state-toggle: 1.0.3 - trim: 0.0.1 - trim-trailing-lines: 1.1.4 - unherit: 1.1.3 - unist-util-remove-position: 2.0.1 - vfile-location: 3.2.0 - xtend: 4.0.2 - dev: false - - /remark-squeeze-paragraphs@4.0.0: - resolution: {integrity: sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==} - dependencies: - mdast-squeeze-paragraphs: 4.0.0 - dev: false - - /renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: false - - /repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - dev: false - - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - - /require-like@0.1.2: - resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} - dev: false - - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: false - - /resolve-pathname@3.0.0: - resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - dev: false - - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - /responselike@1.0.2: - resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} - dependencies: - lowercase-keys: 1.0.1 - dev: false - - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: false - - /rtl-detect@1.1.2: - resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} - dev: false - - /rtlcss@3.5.0: - resolution: {integrity: sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==} - hasBin: true - dependencies: - find-up: 5.0.0 - picocolors: 1.0.1 - postcss: 8.4.38 - strip-json-comments: 3.1.1 - dev: false - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: false - - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.3 - dev: false - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - dev: false - - /scheduler@0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - dev: false - - /schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: false - - /schema-utils@4.2.0: - resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) - ajv-keywords: 5.1.0(ajv@8.16.0) - dev: false - - /search-insights@2.14.0: - resolution: {integrity: sha512-OLN6MsPMCghDOqlCtsIsYgtsC0pnwVTyT9Mu6A3ewOj1DxvzZF6COrn2g86E/c05xbktB0XN04m/t1Z+n+fTGw==} - dev: false - - /section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - dev: false - - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: false - - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - dependencies: - '@types/node-forge': 1.3.11 - node-forge: 1.3.1 - dev: false - - /semver-diff@3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: false - - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: false - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: false - - /semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} - engines: {node: '>=10'} - hasBin: true - dev: false - - /send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serve-handler@6.1.5: - resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} - dependencies: - bytes: 3.0.0 - content-disposition: 0.5.2 - fast-url-parser: 1.1.3 - mime-types: 2.1.18 - minimatch: 3.1.2 - path-is-inside: 1.0.2 - path-to-regexp: 2.2.1 - range-parser: 1.2.0 - dev: false - - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false - - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - dev: false - - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: false - - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: false - - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false - - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - dependencies: - kind-of: 6.0.3 - dev: false - - /shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - dev: false - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: false - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: false - - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: false - - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - dev: false - - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false - - /sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - dependencies: - '@polka/url': 1.0.0-next.25 - mrmime: 2.0.0 - totalist: 3.0.1 - dev: false - - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false - - /sitemap@7.1.2: - resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} - engines: {node: '>=12.0.0', npm: '>=5.6.0'} - hasBin: true - dependencies: - '@types/node': 17.0.45 - '@types/sax': 1.2.7 - arg: 5.0.2 - sax: 1.4.1 - dev: false - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: false - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: false - - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: false - - /sort-css-media-queries@2.1.0: - resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==} - engines: {node: '>= 6.3.0'} - dev: false - - /source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - dev: false - - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.5 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.2 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: false - - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.5 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false - - /stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: false - - /state-toggle@1.0.3: - resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} - dev: false - - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false - - /std-env@3.7.0: - resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} - dev: false - - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: false - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: false - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: false - - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: false - - /strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - dev: false - - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: false - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: false - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: false - - /style-to-object@0.3.0: - resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} - dependencies: - inline-style-parser: 0.1.1 - dev: false - - /stylehacks@5.1.1(postcss@8.4.38): - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.23.1 - postcss: 8.4.38 - postcss-selector-parser: 6.1.0 - dev: false - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - /svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: false - - /svgo@2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.1 - stable: 0.1.8 - dev: false - - /swc-loader@0.2.3(@swc/core@1.6.0)(webpack@5.92.0): - resolution: {integrity: sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==} - peerDependencies: - '@swc/core': ^1.2.147 - webpack: '>=2' - dependencies: - '@swc/core': 1.6.0 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: false - - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: false - - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: true - - /terser-webpack-plugin@5.3.10(@swc/core@1.6.0)(webpack@5.92.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.6.0 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.31.1 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /terser@5.31.1: - resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: false - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: false - - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: false - - /tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - dev: false - - /tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - dev: false - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: false - - /to-readable-stream@1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} - dev: false - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: false - - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - dev: false - - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - /trim-trailing-lines@1.1.4: - resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} - dev: false - - /trim@0.0.1: - resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} - deprecated: Use String.prototype.trim() instead - dev: false - - /trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} - dev: false - - /tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - dev: false - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: false - - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: false - - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false - - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - dev: false - - /ua-parser-js@1.0.38: - resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} - dev: false - - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: false - - /unherit@1.1.3: - resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} - dependencies: - inherits: 2.0.4 - xtend: 4.0.2 - dev: false - - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false - - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false - - /unified@9.2.0: - resolution: {integrity: sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==} - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - dev: false - - /unified@9.2.2: - resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 - extend: 3.0.2 - is-buffer: 2.0.5 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 - dev: false - - /unique-string@2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - - /unist-builder@2.0.3: - resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} - dev: false - - /unist-util-generated@1.1.6: - resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} - dev: false - - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: false - - /unist-util-position@3.1.0: - resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} - dev: false - - /unist-util-remove-position@2.0.1: - resolution: {integrity: sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==} - dependencies: - unist-util-visit: 2.0.3 - dev: false - - /unist-util-remove@2.1.0: - resolution: {integrity: sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==} - dependencies: - unist-util-is: 4.1.0 - dev: false - - /unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - dependencies: - '@types/unist': 2.0.10 - dev: false - - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - dev: false - - /unist-util-visit@2.0.3: - resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 - dev: false - - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: false - - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false - - /update-browserslist-db@1.0.16(browserslist@4.23.1): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 - dev: false - - /update-notifier@5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} - dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.6.2 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - dev: false - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: false - - /url-loader@4.1.1(file-loader@6.2.0)(webpack@5.92.0): - resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - file-loader: '*' - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - file-loader: - optional: true - dependencies: - file-loader: 6.2.0(webpack@5.92.0) - loader-utils: 2.0.4 - mime-types: 2.1.35 - schema-utils: 3.3.0 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /url-parse-lax@3.0.0: - resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 - dev: false - - /use-composed-ref@1.3.0(react@17.0.2): - resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 17.0.2 - dev: false - - /use-isomorphic-layout-effect@1.1.2(react@17.0.2): - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - react: 17.0.2 - dev: false - - /use-latest@1.2.1(react@17.0.2): - resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - react: 17.0.2 - use-isomorphic-layout-effect: 1.1.2(react@17.0.2) - dev: false - - /use-sync-external-store@1.2.2(react@17.0.2): - resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 17.0.2 - dev: false - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false - - /utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: false - - /utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - dev: false - - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - - /value-equal@1.0.1: - resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} - dev: false - - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /vfile-location@3.2.0: - resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} - dev: false - - /vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 - dev: false - - /vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 - dev: false - - /wait-on@6.0.1: - resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} - engines: {node: '>=10.0.0'} - hasBin: true - dependencies: - axios: 0.25.0 - joi: 17.13.1 - lodash: 4.17.21 - minimist: 1.2.8 - rxjs: 7.8.1 - transitivePeerDependencies: - - debug - dev: false - - /watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: false - - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: false - - /web-namespaces@1.1.4: - resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} - dev: false - - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - /webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - dependencies: - '@discoveryjs/json-ext': 0.5.7 - acorn: 8.12.0 - acorn-walk: 8.3.3 - commander: 7.2.0 - debounce: 1.2.1 - escape-string-regexp: 4.0.0 - gzip-size: 6.0.0 - html-escaper: 2.0.2 - opener: 1.5.2 - picocolors: 1.0.1 - sirv: 2.0.4 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - - /webpack-dev-middleware@5.3.4(webpack@5.92.0): - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.20 - memfs: 3.5.3 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.2.0 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /webpack-dev-server@4.15.2(webpack@5.92.0): - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.13 - '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.21 - '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.7 - '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 - ansi-html-community: 0.0.8 - bonjour-service: 1.2.1 - chokidar: 3.6.0 - colorette: 2.0.20 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.19.2 - graceful-fs: 4.2.11 - html-entities: 2.5.2 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) - ipaddr.js: 2.2.0 - launch-editor: 2.6.1 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.2.0 - selfsigned: 2.4.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.92.0(@swc/core@1.6.0) - webpack-dev-middleware: 5.3.4(webpack@5.92.0) - ws: 8.17.1 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: false - - /webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} - dependencies: - clone-deep: 4.0.1 - flat: 5.0.2 - wildcard: 2.0.1 - dev: false - - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - - /webpack@5.92.0(@swc/core@1.6.0): - resolution: {integrity: sha512-Bsw2X39MYIgxouNATyVpCNVWBCuUwDgWtN78g6lSdPJRLaQ/PUVm/oXcaRAyY/sMFoKFQrsPeqvTizWtq7QPCA==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.0 - acorn-import-attributes: 1.9.5(acorn@8.12.0) - browserslist: 4.23.1 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.3 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.0)(webpack@5.92.0) - watchpack: 2.4.1 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: false - - /webpackbar@5.0.2(webpack@5.92.0): - resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} - engines: {node: '>=12'} - peerDependencies: - webpack: 3 || 4 || 5 - dependencies: - chalk: 4.1.2 - consola: 2.15.3 - pretty-time: 1.1.0 - std-env: 3.7.0 - webpack: 5.92.0(@swc/core@1.6.0) - dev: false - - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: false - - /widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - dev: false - - /wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - dev: false - - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false - - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: false - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: false - - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /xdg-basedir@4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: false - - /xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true - dependencies: - sax: 1.4.1 - dev: false - - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: false - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: false - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false - - /yauzl@3.1.3: - resolution: {integrity: sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==} - engines: {node: '>=12'} - dependencies: - buffer-crc32: 0.2.13 - pend: 1.2.0 - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: false - - /zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} - dev: false From ac867f658730618b79b4fbea194ccbbbddac28ee Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sat, 8 Nov 2025 13:36:09 +1100 Subject: [PATCH 278/344] v2.11.0 --- v2/cmd/wails/internal/version.txt | 2 +- .../version-v2.11.0.json | 38 + .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 0 .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 0 .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 0 .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 0 .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 76 + .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 92 + .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 243 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 191 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0}/guides/nixos-font.mdx | 2 +- .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0/guides/routing.mdx | 68 + .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../version-v2.11.0/reference/cli.mdx | 252 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 964 ++ .../reference/project-config.mdx | 129 + .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + .../version-v2.11.0}/appendix/_category_.json | 0 .../community/_category_.json | 0 .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/_category_.json | 0 .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 0 .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 76 + .../gettingstarted/_category_.json | 0 .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 91 + .../version-v2.11.0}/guides/_category_.json | 0 .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 244 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 191 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0/guides/routing.mdx | 68 + .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../reference/_category_.json | 0 .../version-v2.11.0/reference/cli.mdx | 251 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 964 ++ .../reference/project-config.mdx | 129 + .../reference/runtime/_category_.json | 0 .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../tutorials/_category_.json | 0 .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 0 .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 0 .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 0 .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 0 .../community/showcase/riftshare.mdx | 0 .../community/showcase/scriptbar.mdx | 0 .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 0 .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 0 .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 0 .../version-v2.11.0}/community/templates.mdx | 11 +- .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 91 + .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 244 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 191 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0}/guides/routing.mdx | 0 .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../version-v2.11.0/reference/cli.mdx | 251 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 964 ++ .../reference/project-config.mdx | 0 .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 76 + .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 92 + .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 244 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 191 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0/guides/routing.mdx | 68 + .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../version-v2.11.0/reference/cli.mdx | 251 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 964 ++ .../reference/project-config.mdx | 130 + .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 76 + .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 92 + .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 244 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 191 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0/guides/routing.mdx | 68 + .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../version-v2.11.0/reference/cli.mdx | 251 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 964 ++ .../reference/project-config.mdx | 130 + .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + .../version-v2.11.0/appendix/_category_.json | 4 + .../version-v2.11.0/community/_category_.json | 4 + .../version-v2.11.0/community/links.mdx | 26 + .../community/showcase/_category_.json | 4 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 12 + .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 16 + .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 10 + .../community/showcase/kafka-king.mdx | 23 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 14 + .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 14 + .../community/showcase/mollywallet.mdx | 10 + .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 10 + .../community/showcase/portfall.mdx | 10 + .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 19 + .../community/showcase/wombat.mdx | 10 + .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 76 + .../contributing/developing-new-features.mdx | 34 + .../contributing/documenting.mdx | 34 + .../contributing/fixing-bugs.mdx | 29 + .../setting-up-a-dev-environment.mdx | 30 + .../contributing/ways-of-contributing.mdx | 18 + .../gettingstarted/_category_.json | 4 + .../gettingstarted/building.mdx | 26 + .../gettingstarted/development.mdx | 16 + .../gettingstarted/firstproject.mdx | 128 + .../gettingstarted/installation.mdx | 91 + .../version-v2.11.0/guides/_category_.json | 4 + .../version-v2.11.0/guides/angular.mdx | 14 + .../guides/application-development.mdx | 273 + .../guides/crossplatform-build.mdx | 66 + .../guides/custom-protocol-schemes.mdx | 204 + .../version-v2.11.0/guides/dynamic-assets.mdx | 142 + .../guides/file-association.mdx | 244 + .../version-v2.11.0/guides/frameless.mdx | 87 + .../version-v2.11.0/guides/frontend.mdx | 72 + .../version-v2.11.0/guides/ides.mdx | 127 + .../guides/linux-distro-support.mdx | 103 + .../version-v2.11.0/guides/linux.mdx | 70 + .../guides/local-development.mdx | 55 + .../version-v2.11.0/guides/mac-appstore.mdx | 97 + .../version-v2.11.0/guides/manual-builds.mdx | 95 + .../version-v2.11.0/guides/migrating.mdx | 193 + .../version-v2.11.0/guides/mouse-buttons.mdx | 25 + .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../version-v2.11.0/guides/obfuscated.mdx | 40 + .../version-v2.11.0/guides/overscroll.mdx | 10 + .../version-v2.11.0/guides/routing.mdx | 68 + .../version-v2.11.0/guides/signing.mdx | 401 + .../guides/single-instance-lock.mdx | 81 + .../version-v2.11.0/guides/sveltekit.mdx | 157 + .../version-v2.11.0/guides/templates.mdx | 97 + .../guides/troubleshooting.mdx | 368 + .../version-v2.11.0/guides/vscode.mdx | 82 + .../guides/windows-installer.mdx | 71 + .../version-v2.11.0/guides/windows.mdx | 67 + .../version-v2.11.0/howdoesitwork.mdx | 419 + .../version-v2.11.0/introduction.mdx | 73 + .../version-v2.11.0/reference/_category_.json | 4 + .../version-v2.11.0/reference/cli.mdx | 251 + .../version-v2.11.0/reference/menus.mdx | 236 + .../version-v2.11.0/reference/options.mdx | 980 ++ .../reference/project-config.mdx | 129 + .../reference/runtime/_category_.json | 4 + .../reference/runtime/browser.mdx | 13 + .../reference/runtime/clipboard.mdx | 23 + .../reference/runtime/dialog.mdx | 302 + .../reference/runtime/draganddrop.mdx | 37 + .../reference/runtime/events.mdx | 37 + .../reference/runtime/intro.mdx | 85 + .../version-v2.11.0/reference/runtime/log.mdx | 130 + .../reference/runtime/menu.mdx | 25 + .../reference/runtime/screen.mdx | 38 + .../reference/runtime/window.mdx | 227 + .../version-v2.11.0/tutorials/_category_.json | 4 + .../version-v2.11.0/tutorials/dogsapi.mdx | 245 + .../version-v2.11.0/tutorials/helloworld.mdx | 123 + website/pnpm-lock.yaml | 10220 ++++++++++++++++ website/src/pages/changelog.mdx | 2 + .../version-v2.11.0/appendix/_category_.json | 4 + .../version-v2.11.0/community/_category_.json | 4 + .../community/links.mdx | 0 .../community/showcase/_category_.json | 4 + .../community/showcase/bulletinboard.mdx | 10 + .../community/showcase/cfntracker.mdx | 39 + .../community/showcase/clustta.mdx | 27 + .../community/showcase/emailit.mdx | 10 + .../community/showcase/encrypteasy.mdx | 0 .../community/showcase/espstudio.mdx | 13 + .../community/showcase/filehound.mdx | 0 .../community/showcase/grpcmd-gui.mdx | 10 + .../community/showcase/hiposter.mdx | 0 .../community/showcase/kafka-king.mdx | 22 + .../community/showcase/marasi.mdx | 22 + .../community/showcase/mchat.mdx | 10 + .../community/showcase/minecraftupdater.mdx | 0 .../community/showcase/minesweeper-xp.mdx | 10 + .../community/showcase/modalfilemanager.mdx | 0 .../community/showcase/mollywallet.mdx | 0 .../community/showcase/october.mdx | 14 + .../community/showcase/optimus.mdx | 0 .../community/showcase/portfall.mdx | 0 .../community/showcase/resizem.mdx | 10 + .../community/showcase/restic-browser.mdx | 12 + .../community/showcase/riftshare.mdx | 21 + .../community/showcase/scriptbar.mdx | 10 + .../community/showcase/snippetexpander.mdx | 27 + .../community/showcase/surge.mdx | 10 + .../community/showcase/tinyrdm.mdx | 11 + .../community/showcase/wailsterm.mdx | 10 + .../community/showcase/wally.mdx | 10 + .../community/showcase/warmine.mdx | 0 .../community/showcase/wombat.mdx | 0 .../community/showcase/ytd.mdx | 10 + .../version-v2.11.0/community/templates.mdx | 82 + .../gettingstarted/_category_.json | 4 + .../gettingstarted/building.mdx | 0 .../gettingstarted/development.mdx | 0 .../gettingstarted/firstproject.mdx | 0 .../gettingstarted/installation.mdx | 12 +- .../version-v2.11.0/guides/_category_.json | 4 + .../guides/angular.mdx | 0 .../guides/application-development.mdx | 2 +- .../guides/crossplatform-build.mdx | 2 +- .../guides/custom-protocol-schemes.mdx | 0 .../guides/dynamic-assets.mdx | 0 .../guides/file-association.mdx | 0 .../guides/frameless.mdx | 0 .../guides/frontend.mdx | 2 +- .../guides/ides.mdx | 0 .../guides/linux-distro-support.mdx | 0 .../guides/linux.mdx | 0 .../guides/local-development.mdx | 0 .../guides/mac-appstore.mdx | 6 +- .../guides/manual-builds.mdx | 0 .../guides/migrating.mdx | 0 .../guides/mouse-buttons.mdx | 0 .../version-v2.11.0/guides/nixos-font.mdx | 10 + .../guides/obfuscated.mdx | 0 .../guides/overscroll.mdx | 0 .../version-v2.11.0/guides/routing.mdx | 68 + .../guides/signing.mdx | 6 +- .../guides/single-instance-lock.mdx | 0 .../guides/sveltekit.mdx | 8 +- .../guides/templates.mdx | 0 .../guides/troubleshooting.mdx | 0 .../guides/vscode.mdx | 0 .../guides/windows-installer.mdx | 0 .../guides/windows.mdx | 6 + .../howdoesitwork.mdx | 0 .../introduction.mdx | 0 .../version-v2.11.0/reference/_category_.json | 4 + .../reference/cli.mdx | 14 +- .../reference/menus.mdx | 12 +- .../reference/options.mdx | 76 +- .../reference/project-config.mdx | 134 + .../reference/runtime/_category_.json | 4 + .../reference/runtime/browser.mdx | 0 .../reference/runtime/clipboard.mdx | 0 .../reference/runtime/dialog.mdx | 0 .../reference/runtime/draganddrop.mdx | 0 .../reference/runtime/events.mdx | 2 +- .../reference/runtime/intro.mdx | 0 .../reference/runtime/log.mdx | 0 .../reference/runtime/menu.mdx | 0 .../reference/runtime/screen.mdx | 0 .../reference/runtime/window.mdx | 2 +- .../version-v2.11.0/tutorials/_category_.json | 4 + .../tutorials/dogsapi.mdx | 0 .../tutorials/helloworld.mdx | 0 ...ars.json => version-v2.11.0-sidebars.json} | 0 website/versions.json | 2 +- 604 files changed, 55328 insertions(+), 45 deletions(-) create mode 100644 website/i18n/en/docusaurus-plugin-content-docs/version-v2.11.0.json create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/cfntracker.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/espstudio.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/mchat.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/snippetexpander.mdx (100%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0}/guides/nixos-font.mdx (82%) create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/routing.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/project-config.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/appendix/_category_.json (100%) rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/community/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/tinyrdm.mdx (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/gettingstarted/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/guides/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/nixos-font.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/routing.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/reference/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/project-config.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/reference/runtime/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0}/tutorials/_category_.json (100%) create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/ja/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/bulletinboard.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/emailit.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/october.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/restic-browser.mdx (100%) rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/riftshare.mdx (100%) rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/scriptbar.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/surge.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/wally.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/showcase/ytd.mdx (100%) rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/community/templates.mdx (85%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/nixos-font.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/guides/routing.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx rename website/{versioned_docs/version-v2.9.0 => i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0}/reference/project-config.mdx (100%) create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/ko/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/nixos-font.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/routing.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/project-config.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/pt/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/nixos-font.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/routing.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/project-config.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/ru/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/appendix/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/contributing/developing-new-features.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/contributing/documenting.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/contributing/fixing-bugs.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/contributing/setting-up-a-dev-environment.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/contributing/ways-of-contributing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/local-development.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/mac-appstore.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/manual-builds.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/migrating.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/mouse-buttons.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/nixos-font.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/obfuscated.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/overscroll.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/routing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/signing.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/single-instance-lock.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/sveltekit.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/templates.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/troubleshooting.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/vscode.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows-installer.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/guides/windows.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/howdoesitwork.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/introduction.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/cli.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/menus.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/options.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/project-config.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/browser.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/clipboard.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/dialog.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/draganddrop.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/events.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/intro.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/log.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/menu.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/screen.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/reference/runtime/window.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/_category_.json create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/dogsapi.mdx create mode 100644 website/i18n/zh-Hans/docusaurus-plugin-content-docs/version-v2.11.0/tutorials/helloworld.mdx create mode 100644 website/pnpm-lock.yaml create mode 100644 website/versioned_docs/version-v2.11.0/appendix/_category_.json create mode 100644 website/versioned_docs/version-v2.11.0/community/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/links.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/_category_.json create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/bulletinboard.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/cfntracker.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/clustta.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/emailit.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/encrypteasy.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/espstudio.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/filehound.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/hiposter.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/kafka-king.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/marasi.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/mchat.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/minecraftupdater.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/modalfilemanager.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/mollywallet.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/october.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/optimus.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/portfall.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/resizem.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/restic-browser.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/riftshare.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/scriptbar.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/snippetexpander.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/surge.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/tinyrdm.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/wailsterm.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/wally.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/warmine.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/community/showcase/wombat.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/community/showcase/ytd.mdx create mode 100644 website/versioned_docs/version-v2.11.0/community/templates.mdx create mode 100644 website/versioned_docs/version-v2.11.0/gettingstarted/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/gettingstarted/building.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/gettingstarted/development.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/gettingstarted/firstproject.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/gettingstarted/installation.mdx (91%) create mode 100644 website/versioned_docs/version-v2.11.0/guides/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/angular.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/application-development.mdx (99%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/crossplatform-build.mdx (97%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/custom-protocol-schemes.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/dynamic-assets.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/file-association.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/frameless.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/frontend.mdx (97%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/ides.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/linux-distro-support.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/linux.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/local-development.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/mac-appstore.mdx (95%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/manual-builds.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/migrating.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/mouse-buttons.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/guides/nixos-font.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/obfuscated.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/overscroll.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/guides/routing.mdx rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/signing.mdx (98%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/single-instance-lock.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/sveltekit.mdx (94%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/templates.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/troubleshooting.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/vscode.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/windows-installer.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/guides/windows.mdx (86%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/howdoesitwork.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/introduction.mdx (100%) create mode 100644 website/versioned_docs/version-v2.11.0/reference/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/cli.mdx (94%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/menus.mdx (94%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/options.mdx (95%) create mode 100644 website/versioned_docs/version-v2.11.0/reference/project-config.mdx create mode 100644 website/versioned_docs/version-v2.11.0/reference/runtime/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/browser.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/clipboard.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/dialog.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/draganddrop.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/events.mdx (96%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/intro.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/log.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/menu.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/screen.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/reference/runtime/window.mdx (99%) create mode 100644 website/versioned_docs/version-v2.11.0/tutorials/_category_.json rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/tutorials/dogsapi.mdx (100%) rename website/versioned_docs/{version-v2.9.0 => version-v2.11.0}/tutorials/helloworld.mdx (100%) rename website/versioned_sidebars/{version-v2.9.0-sidebars.json => version-v2.11.0-sidebars.json} (100%) diff --git a/v2/cmd/wails/internal/version.txt b/v2/cmd/wails/internal/version.txt index 2df320e9d..805579f30 100644 --- a/v2/cmd/wails/internal/version.txt +++ b/v2/cmd/wails/internal/version.txt @@ -1 +1 @@ -v2.10.2 \ No newline at end of file +v2.11.0 \ No newline at end of file diff --git a/website/i18n/en/docusaurus-plugin-content-docs/version-v2.11.0.json b/website/i18n/en/docusaurus-plugin-content-docs/version-v2.11.0.json new file mode 100644 index 000000000..cc03bd63d --- /dev/null +++ b/website/i18n/en/docusaurus-plugin-content-docs/version-v2.11.0.json @@ -0,0 +1,38 @@ +{ + "version.label": { + "message": "v2.11.0", + "description": "The label for version v2.11.0" + }, + "sidebar.docs.category.Getting Started": { + "message": "Getting Started", + "description": "The label for category Getting Started in sidebar docs" + }, + "sidebar.docs.category.Reference": { + "message": "Reference", + "description": "The label for category Reference in sidebar docs" + }, + "sidebar.docs.category.Runtime": { + "message": "Runtime", + "description": "The label for category Runtime in sidebar docs" + }, + "sidebar.docs.category.Community": { + "message": "Community", + "description": "The label for category Community in sidebar docs" + }, + "sidebar.docs.category.Showcase": { + "message": "Showcase", + "description": "The label for category Showcase in sidebar docs" + }, + "sidebar.docs.category.Guides": { + "message": "Guides", + "description": "The label for category Guides in sidebar docs" + }, + "sidebar.docs.category.Tutorials": { + "message": "Tutorials", + "description": "The label for category Tutorials in sidebar docs" + }, + "sidebar.docs.link.Contributing": { + "message": "Contributing", + "description": "The label for link Contributing in sidebar docs, linking to /community-guide#ways-of-contributing" + } +} diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx new file mode 100644 index 000000000..d6b742435 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/links.mdx @@ -0,0 +1,26 @@ +--- +sidebar_position: 2 +--- + +# Liens + +Cette page sert de liste pour les liens liés à la communauté. Veuillez soumettre une PR (cliquez sur `Modifier cette page` en bas) pour soumettre des liens. + +## Awesome Wails + +La [liste définitive](https://github.com/wailsapp/awesome-wails) de liens relatifs à Wails. + +## Canaux de support + +- [Serveur Discord Wails](https://discord.gg/JDdSxwjhGf) +- [Github Issues](https://github.com/wailsapp/wails/issues) +- [canal de discussion sur la bêta v2](https://github.com/wailsapp/wails/discussions/828) + +## Réseaux sociaux + +- [Twitter](https://twitter.com/wailsapp) +- [Groupe QQ pour la communauté chinoise de Wails](https://qm.qq.com/cgi-bin/qm/qr?k=PmIURne5hFGNd7QWzW5qd6FV-INEjNJv&jump_from=webapi) - Numéro de groupe : 1067173054 + +## Autres tutoriels et articles + +- [Construction d'un Panneau d'Affichage](https://blog.customct.com/building-bulletin-board) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx new file mode 100644 index 000000000..2c56a2e83 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/bulletinboard.mdx @@ -0,0 +1,10 @@ +# BulletinBoard + +```mdx-code-block +

+ +
+

+``` + +L'application [BulletinBoard](https://github.com/raguay/BulletinBoard) est un panneau de messages versitaux pour les messages statiques ou les boîtes de dialogue pour obtenir des informations de l'utilisateur pour un script. Il a une TUI pour créer de nouvelles boîtes de dialogue qui peuvent être utilisées pour obtenir des informations de l'utilisateur. Son design est de rester en fonctionnement sur votre système et de montrer les informations au besoin, puis de se cacher. J'ai un processus pour surveiller un fichier sur mon système et pour envoyer le contenu à BulletinBoard une fois modifié. Cela fonctionne très bien avec mes workflows. Il y a auss un [workflow Alfred](https://github.com/raguay/MyAlfred/blob/master/Alfred%205/EmailIt.alfredworkflow) pour envoyer les informations au programme. Le workflow fonctionne aussi avec [EmailIt](https://github.com/raguay/EmailIt). diff --git a/website/versioned_docs/version-v2.9.0/community/showcase/cfntracker.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx similarity index 100% rename from website/versioned_docs/version-v2.9.0/community/showcase/cfntracker.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/cfntracker.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx new file mode 100644 index 000000000..ac64e25ac --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/emailit.mdx @@ -0,0 +1,10 @@ +# EmailIt + +```mdx-code-block +

+ +
+

+``` + +[EmailIt](https://github.com/raguay/EmailIt/) est un programme Wails 2 qui est un expéditeur de courrier électronique basé sur le markdown uniquement avec neuf blocs-notes, pour manipuler le texte et les modèles. Il a également un terminal pour exécuter des scripts dans EmailIt sur les fichiers de votre système. Les scripts et modèles peuvent être utilisés depuis la ligne de commande elle-même ou avec les extensions Alfred, Keyboard Maestro, Dropzone ou PopClip. Il supporte également les scripts et thèmes téléchargés sous GitHub. La documentation n'est pas complète, mais le programme fonctionne. Il est construit en utilisant Wails2 et Svelte, et le téléchargement est une application macOS universelle. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx new file mode 100644 index 000000000..7f4bd7a63 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/encrypteasy.mdx @@ -0,0 +1,12 @@ +# EncryptEasy + +```mdx-code-block +

+ +
+

+``` + +**[EncryptEasy](https://www.encrypteasy.app) est un outil de chiffrement PGP simple et facile à utiliser, qui gère toutes vos clés et celles de vos contacts. Le chiffrement devrait être simple. Développé avec Wails.** + +Chiffrer les messages à l'aide de PGP est la norme de l'industrie. Tout le monde a une clé privée et publique. Votre clé privée, eh bien, doit être privée afin que vous seul puissiez lire les messages. Votre clé publique est distribuée à toute personne qui veut vous envoyer des messages secrets, chiffrés. Gérer les clés, chiffrer les messages et déchiffrer les messages devrait être une expérience agréable. EncryptEasy a pour but de vous simplifier la tâche. diff --git a/website/versioned_docs/version-v2.9.0/community/showcase/espstudio.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx similarity index 100% rename from website/versioned_docs/version-v2.9.0/community/showcase/espstudio.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/espstudio.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx new file mode 100644 index 000000000..7522afa6e --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/filehound.mdx @@ -0,0 +1,16 @@ +# Utilitaire d'exportation FileHound + +```mdx-code-block +

+ +
+

+``` + +[L'utilitaire d'exportation FileHound](https://www.filehound.co.uk/) est une plate-forme de gestion de documents cloud conçue pour la conservation sécurisée de fichiers, l'automatisation des processus métier et les capacités de SmartCapture. + +L'utilitaire d'exportation FileHound permet aux administrateurs FileHound d'exécuter des tâches sécurisées d'extraction de documents et de données à des fins alternatives de sauvegarde et de récupération. Cette application téléchargera tous les documents et/ou métadonnées enregistrés dans FileHound en fonction des filtres que vous avez choisis. Les métadonnées seront exportées dans les formats JSON et XML. + +Backend construit avec: Go 1.15 Wails 1.11.0 go-sqlite3 1.14.6 go-linq 3.2 + +Frontend avec: Vue 2.6.11 Vuex 3.4.0 TypeScript Tailwind 1.9.6 diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx new file mode 100644 index 000000000..891350290 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/grpcmd-gui.mdx @@ -0,0 +1,10 @@ +# grpcmd-gui + +```mdx-code-block +

+ +
+

+``` + +[grpcmd-gui](https://grpc.md/gui) is a modern cross-platform desktop app and API client for gRPC development and testing. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx new file mode 100644 index 000000000..21fd4b117 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/hiposter.mdx @@ -0,0 +1,10 @@ +# hiposter + +```mdx-code-block +

+ +
+

+``` + +[hiposter](https://github.com/obity/hiposter) est un outil client de test d'API http simple et efficace. Basé sur les Wails, Go et sveltejs. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx new file mode 100644 index 000000000..9876cd9a0 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/kafka-king.mdx @@ -0,0 +1,23 @@ +# Kafka-King + +```mdx-code-block +

+ +
+

+``` + +[Kafka-King](https://github.com/Bronya0/Kafka-King) is a kafka GUI client that supports various systems and is compact and easy to use. +This is made of Wails+vue3 + +# Kafka-King function list + +- [x] View the cluster node list, support dynamic configuration of broker and topic configuration items +- [x] Supports consumer clients, consumes the specified topic, size, and timeout according to the specified group, and displays the message information in various dimensions in a table +- [x] Supports PLAIN, SSL, SASL, kerberos, sasl_plaintext, etc. etc. +- [x] Create topics (support batches), delete topics, specify replicas, partitions +- [x] Support statistics of the total number of messages, total number of submissions, and backlog for each topic based on consumer groups +- [x] Support viewing topics Detailed information (offset) of the partition, and support adding additional partitions +- [x] Support simulated producers, batch sending messages, specify headers, partitions +- [x] Health check +- [x] Support viewing consumer groups , Consumer- …… diff --git a/website/versioned_docs/version-v2.9.0/community/showcase/mchat.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx similarity index 100% rename from website/versioned_docs/version-v2.9.0/community/showcase/mchat.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mchat.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx new file mode 100644 index 000000000..5966e75fa --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minecraftupdater.mdx @@ -0,0 +1,14 @@ +# Minecraft Updater + +```mdx-code-block +

+ +
+

+``` + +[Minecraft Updater](https://github.com/Gurkengewuerz/MinecraftModUpdater) est un outil utilitaire pour mettre à jour et synchroniser les mods Minecraft pour votre base d'utilisateurs. Il a été conçu en utilisant Wails2 et React avec [antd](https://ant.design/) comme framework frontend. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx new file mode 100644 index 000000000..f127a005f --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/minesweeper-xp.mdx @@ -0,0 +1,10 @@ +# Minesweeper XP + +```mdx-code-block +

+ +
+

+``` + +[Minesweeper-XP](https://git.new/Minesweeper-XP) allows you to experience the classic Minesweeper XP (+ 98 and 3.1) on macOS, Windows, and Linux! diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx new file mode 100644 index 000000000..fe644bd7b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/modalfilemanager.mdx @@ -0,0 +1,14 @@ +# Modal File Manager + +```mdx-code-block +

+ +
+

+``` + +[Modal File Manager](https://github.com/raguay/ModalFileManager) est un gestionnaire de fichiers à double volet utilisant des technologies web. Mon design original était basé sur NW.js et peut être trouvé [ici](https://github.com/raguay/ModalFileManager-NWjs). Cette version utilise le même code frontend basé sur Svelte (mais il a été grandement modifié depuis le départ de NW.js), mais le backend est une implémentation de [Wails 2](https://wails.io/). En utilisant cette implémentation, je n'utilise plus la ligne de commande `rm`, `cp`, etc. , mais une installation de git doit être présente sur le système pour télécharger des thèmes et des extensions. Il est entièrement codé en utilisant Go et fonctionne beaucoup plus rapidement que les versions précédentes. + +Ce gestionnaire de fichiers est conçu autour du même principe que Vim: l'état est contrôlé par des actions via le clavier. Le nombre d'états n'est pas fixe, mais très programmable. Par conséquent, un nombre infini de configurations de clavier qui peuvent être créées et utilisées. C'est la principale différence par rapport aux autres gestionnaires de fichiers. Il y a des thèmes et des extensions disponibles à télécharger à partir de GitHub. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx new file mode 100644 index 000000000..70a6cd1f4 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/mollywallet.mdx @@ -0,0 +1,10 @@ +# Molley Wallet + +```mdx-code-block +

+ +
+

+``` + +[Molly Wallet](https://github.com/grvlle/constellation_wallet/) le portefeuille officiel $DAG du Constellation Network. Cela permettra aux utilisateurs d'interagir avec le réseau Hypergraph de différentes manières, sans se limiter à la production de transactions en $DAG. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx new file mode 100644 index 000000000..5a9789d87 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/october.mdx @@ -0,0 +1,14 @@ +# October + +```mdx-code-block +

+ +
+

+``` + +[Octobre](https://october.utf9k.net) est une petite application Wails qui rend vraiment facile d'extraire les surlignements de [Kobo eReaders](https://en.wikipedia.org/wiki/Kobo_eReader) puis de les transférer vers [Readwise](https://readwise.io). + +Il a une taille relativement petite avec toutes les versions de la plate-forme pesant en moins de 10 Mo, et c'est sans activer la [compression UPX](https://upx.github.io/)! + +En revanche, les précédentes tentatives de l'auteur avec Electron ont rapidement gonflé à plusieurs centaines de mégaoctets. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx new file mode 100644 index 000000000..41744234d --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/optimus.mdx @@ -0,0 +1,10 @@ +# Optimus + +```mdx-code-block +

+ +
+

+``` + +[Optimus](https://github.com/splode/optimus) est une application d'optimisation d'image de bureau. Il supporte la conversion et la compression entre les formats d’images WebP, JPEG et PNG. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx new file mode 100644 index 000000000..acdc682be --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/portfall.mdx @@ -0,0 +1,10 @@ +# Portfall + +```mdx-code-block +

+ +
+

+``` + +[Portfall](https://github.com/rekon-oss/portfall) - Un portail de redirection de port k8 pour un accès facile à toutes les interfaces de votre instance diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx new file mode 100644 index 000000000..27f168f48 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/resizem.mdx @@ -0,0 +1,10 @@ +# Resizem + +```mdx-code-block +

+ +
+

+``` + +[Resizem](https://github.com/barats/resizem) - is an app designed for bulk image process. It is particularly useful for users who need to resize, convert, and manage large numbers of image files at once. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx new file mode 100644 index 000000000..b65971668 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/restic-browser.mdx @@ -0,0 +1,12 @@ +# Restic Browser + +```mdx-code-block +

+ +
+

+``` + +[Restic-Browser](https://github.com/emuell/restic-browser) - Une interface de sauvegarde simple et multiplateforme [restic](https://github.com/restic/restic) pour la navigation et la restauration de dépôts restic. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx new file mode 100644 index 000000000..e47b2397e --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/riftshare.mdx @@ -0,0 +1,21 @@ +# RiftShare + +```mdx-code-block +

+ +
+

+``` + +Partage de fichiers facile, sécurisé et gratuit pour tout le monde. Apprenez-en plus sur [Riftshare.app](https://riftshare.app) + +## Fonctionnalités + +- Partage facile et sécurisé de fichiers entre ordinateurs à la fois sur le réseau local et via Internet +- Supporte l'envoi de fichiers ou de répertoires de manière sécurisée par le protocole [magic wormhole](https://magic-wormhole.readthedocs.io/en/latest/) +- Compatible avec toutes les autres applications utilisant magic wormhole (magic-wormhole or wormhole-william CLI, wormhole-gui, etc.) +- Compression automatique de plusieurs fichiers sélectionnés à envoyer en même temps +- Animations complètes, barre de progression et support d'annulation pour l'envoi et la réception +- Sélection de fichier natif au système d'exploitation +- Ouvrir les fichiers en un seul clic une fois reçus +- Mise à jour automatique - ne vous inquiétez pas d'avoir la dernière version! diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx new file mode 100644 index 000000000..d7215d661 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/scriptbar.mdx @@ -0,0 +1,10 @@ +# ScriptBar + +```mdx-code-block +

+ +
+

+``` + +[ScriptBar](https://GitHub.com/raguay/ScriptBarApp) est un programme pour afficher la sortie de scripts ou d'un serveur [Node-Red](https://nodered.org). Il exécute des scripts définis dans le programme EmailIt et affiche la sortie. Des scripts de xBar ou TextBar peuvent être utilisés. Actuellement sur les scripts TextBar fonctionnent bien. Il affiche également la sortie des scripts sur votre système. ScriptBar ne les met pas dans la barre de menus, mais les a tous dans une fenêtre convenable pour une visualisation facile. Vous pouvez avoir plusieurs onglets pour voir plusieurs choses différentes. Vous pouvez également conserver les liens vers vos sites Web les plus visités. diff --git a/website/versioned_docs/version-v2.9.0/community/showcase/snippetexpander.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx similarity index 100% rename from website/versioned_docs/version-v2.9.0/community/showcase/snippetexpander.mdx rename to website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/snippetexpander.mdx diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx new file mode 100644 index 000000000..b59174843 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/surge.mdx @@ -0,0 +1,10 @@ +# Surge + +```mdx-code-block +

+ +
+

+``` + +[Surge](https://getsurge.io/) est une application de partage de fichiers p2p conçue pour utiliser les technologies blockchain afin d'activer les transferts de fichiers 100 % anonymes. Surge est chiffré de bout en bout, décentralisé et open source. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx new file mode 100644 index 000000000..5390d57fb --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/tinyrdm.mdx @@ -0,0 +1,11 @@ +# Tiny RDM + +```mdx-code-block +

+ + +
+

+``` + +L'application [Tiny RDM](https://redis.tinycraft.cc/) est une interface Redis moderne et open-source. Il possède une interface utilisateur magnifique, une gestion de base de données Redis intuitive et compatible avec Windows, Mac et Linux. Il fournit des opérations visuelles de données de clé-valeur, supporte diverses options de décodage et de visualisation des données, possède une console intégrée pour exécuter des commandes, des requêtes de log lentes et plus encore. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx new file mode 100644 index 000000000..9924dace5 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wailsterm.mdx @@ -0,0 +1,10 @@ +# WailsTerm + +```mdx-code-block +

+ +
+

+``` + +[WailsTerm](https://github.com/rlshukhov/wailsterm) is a simple translucent terminal app powered by Wails and Xterm.js. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx new file mode 100644 index 000000000..ba2a7fccc --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wally.mdx @@ -0,0 +1,10 @@ +# Wally + +```mdx-code-block +

+ +
+

+``` + +[Wally](https://ergodox-ez.com/pages/wally) est le flasheur officiel du firmware pour les claviers [Ergodox](https://ergodox-ez.com/). C'est un excellent exemple de ce que vous pouvez réaliser avec Wails : la capacité de combiner la puissance de Go et les riches outils graphiques du monde du développement web. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx new file mode 100644 index 000000000..2e4274330 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/warmine.mdx @@ -0,0 +1,19 @@ +# Lanceur Minecraft pour WarMine + +```mdx-code-block +

+ + +
+

+``` + +[Lanceur Minecraft pour WarMine](https://warmine.ru/) est une application Wails qui vous permet facilement de rejoindre le serveur de jeu contenant les mods, ainsi que la gestion de vos comptes de jeu. + +Le Launcher télécharge les fichiers du jeu, vérifie leur intégrité et lance le jeu avec une large gamme d'options de personnalisation. + +Le frontend est écrit en Svelte, le lanceur entier tient dans 9Mo et prend en charge Windows 7-11. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx new file mode 100644 index 000000000..c431f6919 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/wombat.mdx @@ -0,0 +1,10 @@ +# Wombat + +```mdx-code-block +

+ +
+

+``` + +[Wombat](https://github.com/rogchap/wombat) est un client gRPC multi-plateforme. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx new file mode 100644 index 000000000..4f5bd993c --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/showcase/ytd.mdx @@ -0,0 +1,10 @@ +# Ytd + +```mdx-code-block +

+ +
+

+``` + +[Ytd](https://github.com/marcio199226/ytd/tree/v2-wails) est une application pour télécharger des pistes depuis youtube, créer des listes de lecture hors ligne et les partager avec vos amis, vos amis seront en mesure de lire vos playlists ou de les télécharger pour l'écoute hors ligne, a un lecteur intégré. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx new file mode 100644 index 000000000..648555579 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/community/templates.mdx @@ -0,0 +1,76 @@ +--- +sidebar_position: 1 +--- + +# Modèles + +Cette page sert de liste pour les modèles supportés par la communauté. Veuillez soumettre une PR (cliquez sur `Modifier cette page` en bas) pour inclure vos modèles. Pour construire votre propre modèle, veuillez consulter le guide [Modèles](../guides/templates.mdx). + +Pour utiliser ces modèles, exécutez `wails init -n "Votre nom de projet" -t [le lien ci-dessous[@version]]` + +S'il n'y a pas de suffixe de version, la branche principale du modèle de code sera alors utilisé par défaut. S'il y a un suffixe de version, le modèle de code correspondant au tag de cette version sera utilisé. + +Exemple : `wails init -n "Votre nom de projet" -t https://github.com/misitebao/wails-template-vue` + +:::warning Attention + +**Le projet Wails n'entretient pas, et n'est pas responsable des modèles de tierces parties!** + +Si vous n'êtes pas sûr d'un modèle, inspectez `package.json` et `wails.json` pour savoir quels scripts sont exécutés et quels paquets sont installés. + +::: + +## Vue + +- [wails-template-vue](https://github.com/misitebao/wails-template-vue) - Modèle de Wails basé sur Vue (TypeScript intégré, thème sombre, internationalisation, routage de page unique, TailwindCSS) +- [wails-template-quasar-js](https://github.com/sgosiaco/wails-template-quasar-js) - Un modèle utilisant JavaScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier) +- [wails-template-quasar-ts](https://github.com/sgosiaco/wails-template-quasar-ts) - Un modèle utilisant TypeScript + Quasar V2 (Vue 3, Vite, Sass, Pinia, ESLint, Prettier, Composition API avec <script setup>) +- [wails-template-naive](https://github.com/tk103331/wails-template-naive) - Modèle Wails basé sur Naive UI (Librairie de composants Vue 3) +- [wails-template-tdesign-js](https://github.com/tongque0/wails-template-tdesign-js) - Wails template based on TDesign UI (a Vue 3 UI library by Tencent), using Vite, Pinia, Vue Router, ESLint, and Prettier. + +## Angular + +- [wails-template-angular](https://github.com/mateothegreat/wails-template-angular) - Modèle Angular 15+ prêt à être utilisé en production. +- [wails-angular-template](https://github.com/TAINCER/wails-angular-template) - Angular avec TypeScript, Sass, rechargement à chaud, découpage dynamique de code et i18n + +## React + +- [wails-react-template](https://github.com/AlienRecall/wails-react-template) - Un modèle utilisant reactjs +- [wails-react-template](https://github.com/flin7/wails-react-template) - Un modèle minimal pour React qui supporte le développement en direct +- [wails-template-nextjs](https://github.com/LGiki/wails-template-nextjs) - Un modèle utilisant Next.js et TypeScript +- [wails-template-nextjs-app-router](https://github.com/thisisvk-in/wails-template-nextjs-app-router) - A template using Next.js and TypeScript with App router +- [wails-vite-react-ts-tailwind-template](https://github.com/hotafrika/wails-vite-react-ts-tailwind-template) - Un modèle pour React + TypeScript + Vite + TailwindCSS +- [wails-vite-react-ts-tailwind-shadcnui-template](https://github.com/Mahcks/wails-vite-react-tailwind-shadcnui-ts) - Un modèle avec Vite, React, TypeScript, TailwindCSS, et shadcn/ui +- [wails-nextjs-tailwind-template](https://github.com/kairo913/wails-nextjs-tailwind-template) - A template using Next.js and Typescript with TailwindCSS + +## Svelte + +- [wails-svelte-template](https://github.com/raitonoberu/wails-svelte-template) - Un modèle utilisant Svelte +- [wails-vite-svelte-template](https://github.com/BillBuilt/wails-vite-svelte-template) - Un modèle utilisant Svelte et Vite +- [wails-vite-svelte-ts-tailwind-template](https://github.com/xvertile/wails-vite-svelte-tailwind-template) - A template using Wails, Svelte, Vite, TypeScript, and TailwindCSS v3 +- [wails-vite-svelte-tailwind-template](https://github.com/BillBuilt/wails-vite-svelte-tailwind-template) - Un modèle utilisant Svelte et Vite avec TailwindCSS v3 +- [wails-svelte-tailwind-vite-template](https://github.com/PylotLight/wails-vite-svelte-tailwind-template/tree/master) - Un modèle mis à jour en utilisant Svelte v4.2.0 et Vite avec TailwindCSS v3.3.3 +- [wails-sveltekit-template](https://github.com/h8gi/wails-sveltekit-template) - Un modèle utilisant SvelteKit + +## Solid + +- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-ts) - Un modèle utilisant Solid + Ts + Vite +- [wails-template-vite-solid-ts](https://github.com/xijaja/wails-template-solid-js) - Un modèle utilisant Solid + Js + Vite + +## Elm + +- [wails-elm-template](https://github.com/benjamin-thomas/wails-elm-template) - Développez votre application GUI avec de la programmation fonctionnelle et une configuration de développement en direct :tada: :rocket: +- [wails-template-elm-tailwind](https://github.com/rnice01/wails-template-elm-tailwind) - Combine les puissances :muscle: d'Elm + Tailwind CSS + Wails ! Rechargement automatique pris en charge. + +## HTMX + +- [wails-htmx-templ-chi-tailwind](https://github.com/PylotLight/wails-hmtx-templ-template) - Utilisez une combinaison unique de htmx pour interactivité, et de templ pour créer des composants et des formes + +## Pure JavaScript (Vanilla) + +- [wails-pure-js-template](https://github.com/KiddoV/wails-pure-js-template) - Un modèle avec rien que du JavaScript, du HTML et du CSS de base + + +## Lit (web components) + +- [wails-lit-shoelace-esbuild-template](https://github.com/Braincompiler/wails-lit-shoelace-esbuild-template) - Wails template providing frontend with lit, Shoelace component library + pre-configured prettier and typescript. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx new file mode 100644 index 000000000..c9cedbcd8 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/building.mdx @@ -0,0 +1,26 @@ +--- +sidebar_position: 6 +--- + +# Compiler votre projet + +À partir du répertoire du projet, exécutez `wails build`. Cela compilera votre projet et sauvegardera le binaire prêt à la production dans le répertoire `build/bin`. + +:::info Linux +If you are using a Linux distribution that does not have webkit2gtk-4.0 (such as Ubuntu 24.04), you will need to add `-tags webkit2_41`. +::: + +Si vous exécutez le binaire, vous devriez voir l'application par défaut : + +```mdx-code-block +
+ +
+
+``` + +Pour plus de détails sur les options de compilation, veuillez vous référer à la [documentation du CLI](../reference/cli.mdx#build). diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx new file mode 100644 index 000000000..307029141 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/development.mdx @@ -0,0 +1,16 @@ +--- +sidebar_position: 5 +--- + +# Développez votre application + +Vous pouvez exécuter votre application en mode développement en exécutant `wails dev` à partir du répertoire de votre projet. Cela fera les choses suivantes : + +- Construire votre application et l'exécuter +- Lier votre code Go au frontend pour qu'il puisse être appelé à partir de JavaScript +- En utilisant la puissance de [Vite](https://vitejs.dev/), surveillera les modifications dans vos fichiers Go et reconstruira / ré-exécutera en cas de changement +- Mettra en place un [serveur web](http://localhost:34115) qui servira votre application via un navigateur. Cela vous permet d'utiliser les extensions de votre navigateur préféré. Vous pouvez même appeler votre code Go depuis la console + +Pour commencer, exécutez `wails dev` dans le répertoire du projet. Plus d'informations à ce sujet peuvent être trouvées [ici](../reference/cli.mdx#dev). + +Prochainement : Tutoriel diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx new file mode 100644 index 000000000..02e9f955b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/firstproject.mdx @@ -0,0 +1,128 @@ +--- +sidebar_position: 2 +--- + +# Créer un projet + +## Génération de projet + +Maintenant que le CLI est installé, vous pouvez générer un nouveau projet en utilisant la commande `wails init`. + +Choisissez votre framework favori : + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Générer un projet
Svelte utilisant JavaScript avec:

+ + wails init -n myproject -t svelte + +Si vous préférez utiliser TypeScript:
+ + wails init -n myproject -t svelte-ts + + + + Générer un projet React utilisant JavaScript avec :

+ + wails init -n myproject -t react + +Si vous préférez utiliser TypeScript:
+ + wails init -n myproject -t react-ts + +
+ + Générer un projet Vue utilisant JavaScript avec:

+ + wails init -n myproject -t vue + +Si vous préférez TypeScript:
+ + wails init -n myproject -t vue-ts + +
+ + Générer un projet Preact utilisant JavaScript avec:

+ + wails init -n myproject -t preact + +Si vous préférez TypeScript:
+ + wails init -n myproject -t preact-ts + +
+ + Générer un projet Lit utilisant JavaScript avec:

+ + wails init -n myproject -t lit + +Si vous préférez TypeScript:
+ + wails init -n myproject -t lit-ts + +
+ + Générer un projet Vanilla utilisant JavaScript avec :

+ + wails init -n myproject -t vanilla + +Si vous préférez TypeScript:
+ + wails init -n myproject -t vanilla-ts + +
+ +``` + +
+ +Il y a aussi [des modèles créés par la communauté](../community/templates.mdx) qui sont disponibles et qui offrent différentes possibilités. + +Pour voir les autres options disponibles, vous pouvez exécuter `wails init -help`. Plus de détails peuvent être trouvés dans la [documentation du CLI](../reference/cli.mdx#init). + +## Structure du projet + +Les projets Wails ont la structure suivante: + +``` +. +├── build/ +│ ├── appicon.png +│ ├── darwin/ +│ └── windows/ +├── frontend/ +├── go.mod +├── go.sum +├── main.go +└── wails.json +``` + +### Récapitulatif de la structure du projet + +- `/main.go` - L'application principale +- `/frontend/` - Fichiers de la partie frontend +- `/build/` - Répertoire de construction du projet +- `/build/appicon.png` - L'icône de l'application +- `/build/darwin/` - Fichiers spécifiques pour Mac +- `/build/windows/` - Fichiers spécifiques pour Windows +- `/wails.json` - La configuration du projet +- `/go.mod` - Le fichier du module Go +- `/go.sum` - Le checksum du fichier du module Go + +Le répertoire `frontend` n'a rien de spécifique à Wails et n'importe quel outil de frontend peut être utilisé. + +Le répertoire `build` est utilisé pendant le processus de compilation. Ces fichiers peuvent être mis à jour pour personnaliser vos builds. Si fichiers sont supprimés du répertoire de compilation, les versions par défaut seront régénérées. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx new file mode 100644 index 000000000..1e66a6202 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/gettingstarted/installation.mdx @@ -0,0 +1,92 @@ +--- +sidebar_position: 1 +--- + +# Installation + +## Plates-formes Prises en charge + +- Windows 10/11 AMD64/ARM64 +- MacOS 10.15+ AMD64 for development, MacOS 10.13+ for release +- MacOS 11.0+ ARM64 +- Linux AMD64/ARM64 + +## Dépendances + +Wails a un certain nombre de dépendances communes qui sont nécessaires avant l'installation : + +- Go 1.21+ (macOS 15+ requires Go 1.23.3+) +- NPM (Node 15+) + +### Go + +Télécharger Go à partir de la [Page de téléchargement](https://go.dev/dl/). + +Assurez-vous que vous suivez les instructions officielles de [l'installation de Go](https://go.dev/doc/install). Vous devrez également vous assurer que votre variable d'environnement `PATH` inclut également le chemin vers votre répertoire `~/go/bin`. Redémarrez votre terminal et effectuez les vérifications suivantes : + +- Vérifiez que Go est installé correctement : `go version` +- Vérifiez que "~/go/bin" est dans votre variable PATH : `echo $PATH | grep go/bin` + +### NPM + +Téléchargez le NPM à partir de la [page de téléchargement de Node](https://nodejs.org/en/download/). Il est préférable d'utiliser la dernière version car c'est avec celle-là que nous effectuons nos tests. + +Exécutez `npm --version` pour vérifier. + +## Dépendances spécifiques aux plateformes + +Vous devrez également installer des dépendances spécifiques liés à la plateforme que vous utilisez : + +```mdx-code-block +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; + + + + Wails a besoin que les outils de command line xocde soient installés. Cela peut être fait + en exécutant xcode-select --install. + + + Wails a besoin que WebView2 runtime soit installé. Certaines installations de Windows auront déjà installé cette fonctionnalité. Vous pouvez vérifier en utilisant la commande wails doctor. + + + Linux a besoin de gcc comme outil de compilation en plus de libgtk3 et libwebkit. Plutôt que de lister une tonne de commandes pour différentes distributions, Wails peut essayer de déterminer ce que sont les commandes d'installation pour votre distribution. Exécutez wails doctor après l'installation pour voir de quelles dépendances vous avez besoin. Si votre gestionnaire de distribution/paquet n'est pas pris en charge, veuillez consulter le guide Ajouter une distribution Linux. +
Note:
+ If you are using latest Linux version (example: Ubuntu 24.04) and it is not supporting libwebkit2gtk-4.0-dev, then you might encounter an issue in wails doctor: libwebkit not found. To resolve this issue you can install libwebkit2gtk-4.1-dev and during your build use the tag -tags webkit2_41. +
+
+``` + +## Dépendances optionnelles + +- [UPX](https://upx.github.io/) pour compresser vos applications. +- [NSIS](https://wails.io/docs/guides/windows-installer/) pour générer des installateurs Windows. + +## Installer Wails + +Exécutez `go go install github.com/wailsapp/wails/v2/cmd/wails@latest` pour installer le CLI. + +Note: Si vous obtenez une erreur similaire à ceci: + +```shell +....\Go\pkg\mod\github.com\wailsapp\wails\v2@v2.1.0\pkg\templates\templates.go:28:12: pattern all:ides/*: no matching files found +``` +vérifiez que vous avez installé Go 1.18+ : +```shell +go version +``` + +## Vérification du système + +Exécuter `wails doctor` qui vérifiera si vous avez les bonnes dépendances installées. Si ce n'est pas le cas, il vous conseillera sur ce qui manque et vous aidera à corriger tout problème. + +## La commande `wails` semble manquer ? + +Si votre système signale que la commande `wails` est manquante, assurez-vous que vous avez suivi le guide d'installation correctement. Normalement, cela signifie que le répertoire `go/bin` du répertoire racine de votre utilisateur n'est pas dans la variable d'environnement `PATH` . Vous devrez également normalement fermer et réouvrir toutes les commandes ouvertes afin que les modifications apportées à l'environnement par l'installateur soient reflétées dans l'invite de commande. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx new file mode 100644 index 000000000..1fe2f199f --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/angular.mdx @@ -0,0 +1,14 @@ +# Angular + +Bien que Wails n'ait pas de modèle Angular, il est possible d'utiliser Angular avec Wails. + +## Dev Mode + +Pour que le mode développeur fonctionne avec Angular, vous devez ajouter ce qui suit à votre fichier `wails.json`: + +```json + "frontend:build": "npx ng build", + "frontend:install": "npm install", + "frontend:dev:watcher": "npx ng serve", + "frontend:dev:serverUrl": "http://localhost:4200", +``` \ No newline at end of file diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx new file mode 100644 index 000000000..7ca2ff95b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/application-development.mdx @@ -0,0 +1,273 @@ +# Développement d'applications + +Il n'y a pas de règles gravées dans le marbre pour le développement d'applications avec Wails, mais il y a quelques lignes directrices de base. + +## Configuration de l'application + +Le modèle utilisé par défaut défini que `main.go` est utilisé pour configurer et démarrer l'application, tandis que `app.go` est utilisé pour définir la logique de l'application. + +Le fichier `app.go` va définir une structure qui a 2 méthodes qui agissent comme crochets dans l'application principale: + +```go title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +func (a *App) shutdown(ctx context.Context) { +} +``` + +- La méthode startup est appelée d-s que Wails a donné les ressources nécessaires et qu'il est dans un bon état pour créer les ressources, mettre en place les event listeners et tout ce dont l'application peut avoir besoin pour démarrer. Il est donné un `context.Context` qui est généralement sauvegardé dans un champ struct. Ce contexte est nécessaire pour appeler le [runtime](../reference/runtime/intro.mdx). Si cette méthode renvoie une erreur, l'application se fermera. En mode développement, l'erreur sera affichée dans la console. + +- La méthode d'arrêt sera appelée par Wails à la fin du processus d'arrêt. C'est un bon endroit pour vider la mémoire et effectuer toutes les tâches d'arrêt. + +Le fichier `main.go` consiste généralement en un seul appel à `wails.Run()`, qui accepte la configuration de l'application. Le modèle utilisé par les templates fait qu'avant l'appel à `wails.Run()`, une instance du struct que l'on a définie dans `app.go` est créée et instanciée dans une variable appelée `app`. Cette configuration est l'endroit où nous ajoutons nos callbacks : + +```go {3,9,10} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +Plus d'informations sur les crochets du cycle de vie des applications peuvent être trouvées [ici](../howdoesitwork.mdx#application-lifecycle-callbacks). + +## Méthodes de liaison + +Il est probable que vous vouliez appeler les méthodes Go depuis le frontend. Cela se fait normalement en ajoutant des méthodes publiques à le struct déjà défini dans `app.go`: + +```go {16-18} title="app.go" +type App struct { + ctx context.Context +} + +func NewApp() *App { + return &App{} +} + +func (a *App) startup(ctx context.Context) { + a.ctx = ctx +} + +func (a *App) shutdown(ctx context.Context) { +} + +func (a *App) Greet(name string) string { + return fmt.Sprintf("Hello %s!", name) +} +``` + +Dans la configuration principale de l'application, le paramètre `Bind` est l'endroit où nous pouvons dire à Wails ce que nous voulons lier : + +```go {11-13} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +Cela liera toutes les méthodes publiques de notre structure `App` (cela ne liera jamais les méthodes de démarrage et d'arrêt du système). + +### Traiter avec le contexte lors de la liaison de plusieurs structures + +Si vous voulez lier des méthodes pour des structures multiples, mais que vous voulez que chaque struct conserve une référence au contexte pour que vous puissiez utiliser les fonctions d'exécution... Un bon choix est de passer le contexte de la méthode `OnStartup` à vos instances struct : + +```go +func main() { + + app := NewApp() + otherStruct := NewOtherStruct() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: func(ctx context.Context){ + app.SetContext(ctx) + otherStruct.SetContext(ctx) + }, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + otherStruct + }, + }) + if err != nil { + log.Fatal(err) + } +} +``` + +Also you might want to use Enums in your structs and have models for them on frontend. In that case you should create array that will contain all possible enum values, instrument enum type and bind it to the app: + +```go {16-18} title="app.go" +type Weekday string + +const ( + Sunday Weekday = "Sunday" + Monday Weekday = "Monday" + Tuesday Weekday = "Tuesday" + Wednesday Weekday = "Wednesday" + Thursday Weekday = "Thursday" + Friday Weekday = "Friday" + Saturday Weekday = "Saturday" +) + +var AllWeekdays = []struct { + Value Weekday + TSName string +}{ + {Sunday, "SUNDAY"}, + {Monday, "MONDAY"}, + {Tuesday, "TUESDAY"}, + {Wednesday, "WEDNESDAY"}, + {Thursday, "THURSDAY"}, + {Friday, "FRIDAY"}, + {Saturday, "SATURDAY"}, +} +``` + +In the main application configuration, the `EnumBind` key is where we can tell Wails what we want to bind enums as well: + +```go {11-13} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Bind: []interface{}{ + app, + }, + EnumBind: []interface{}{ + AllWeekdays, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +This will add missing enums to your `model.ts` file. + +Plus d'informations à sur Binding peuvent être trouvées [ici](../howdoesitwork.mdx#method-binding). + +## Menu de l’application + +Wails prend en charge l'ajout d'un menu à votre application. Ceci est fait en passant un [Menu](../reference/menus.mdx#menu) structuré à la configuration de l'application. Il est courant d'utiliser une méthode qui renvoie un Menu, et encore plus courant pour que cela soit une méthode sur la struct de l'`app` qui soit utilisée pour les hooks du cycle de vie. + +```go {11} title="main.go" +func main() { + + app := NewApp() + + err := wails.Run(&options.App{ + Title: "My App", + Width: 800, + Height: 600, + OnStartup: app.startup, + OnShutdown: app.shutdown, + Menu: app.menu(), + Bind: []interface{}{ + app, + }, + }) + if err != nil { + log.Fatal(err) + } +} + +``` + +## Ressources + +La grande chose à propos de la façon dont Wails v2 gère les ressources pour le frontend, est que ce n'est pas le cas! La seule chose que vous devez donner à Wails est un `embed.FS`. C'est à vous de décider comment vous y arrivez. Vous pouvez utiliser les fichiers html/css/js vanilla comme dans le modèle vanilla. Vous pourriez avoir un système de compilation compliqué, peu importe. + +Quand la commande `wails dev` est exécutée, elle vérifiera le fichier de projet `wails.json` à la racine du projet. Il y a 2 clés dans le fichier du projet qui sont lues : + +- "frontend:install" +- "frontend:build" + +Le premier, si fourni, sera exécuté dans le répertoire `frontend` pour installer les modules. Le second, si fourni, sera exécuté dans le répertoire `frontend` pour construire le projet frontend. + +Si ces 2 clés ne sont pas fournies, alors Wails ne fait absolument rien avec le frontend. Il n'attend que `embed.FS`. + +### AssetsHandler + +Une application Wails v2 peut éventuellement définir un `http.Handler` dans `options.app`, qui permet de se connecter à l'AssetServer pour créer des fichiers à la volée ou traiter les requêtes POST/PUT. Les requêtes GET sont toujours traitées d'abord par le `assets` FS. Si le FS ne trouve pas le fichier demandé, la requête sera transmise au `http.Handler`. Toute requête autre que GET sera traitée directement par le `AssetsHandler` si spécifié. It's also possible to only use the `AssetsHandler` by specifying `nil` as the `Assets` option. + +## Serveur de développement embarqué + +Exécuter `wails dev` démarrera le serveur de développement intégré qui démarrera un observateur de fichiers dans votre répertoire de projet. Par par défaut, si un fichier change, wails vérifie s'il s'agit d'un fichier d'application (par défaut: `.go`, configurable avec l'option `-e`). Si c'est le cas, il reconstruira votre application et la relancera. Si le fichier modifié se trouvait dans les actifs, il lancera un rechargement après un court laps de temps. + +Le serveur de développement utilise une technique appelée "debouncing", ce qui signifie qu'il ne se recharge pas tout de suite, comme il peut y avoir plusieurs fichiers modifiés en un court laps de temps. Lorsqu'un déclencheur se produit, il attend un temps défini avant d'émettre un rechargement. Si un autre déclencheur se produit, le temps d'attente se réinitialise avant un prochain rechargement. Par défaut, cette période est définie à `100ms`. Si cette valeur ne fonctionne pas pour votre projet, elle peut être configurée en utilisant l'option `-debounce`. Si elle est utilisée, cette valeur sera enregistrée dans la configuration de votre projet et deviendra la valeur par défaut. + +## Serveur de développement externe + +Certains frameworks sont fournis avec leur propre serveur de rechargement en direct, cependant ils ne seront pas en mesure de tirer parti des liaisons Wails Go. Dans ce scénario, il est préférable d'exécuter un script qui va surveiller le projet dans dossier build, dossier que Wails surveille aussi. Pour un exemple, voir le modèle svelte par défaut qui utilise [rollup](https://rollupjs.org/guide/en/). + +### Créer une application React + +Le processus pour créer un projet Reactest un peu plus compliqué. Afin de prendre en charge le rechargement du frontend en direct, la configuration suivante doit être ajoutée à votre `wails.json`: + +```json + "frontend:dev:watcher": "yarn start", + "frontend:dev:serverUrl": "http://localhost:3000", +``` + +La commande `frontend:dev:watcher` démarrera le serveur de développement React (hébergé sur le port `3000` typiquement). La commande `frontend:dev:serverUrl` demande ensuite à Wails d'exposer les ressources depuis le serveur de développement lors du chargement du frontend, plutôt que depuis le dossier de construction. En plus de ce qui précède, le fichier `index.html` doit être mis à jour avec les éléments suivants : + +```html + + + + + +``` + +Ceci est nécessaire, car la commande watcher qui reconstruit le frontend empêche Wails de les injecter. Ça contourne le problème en assurant les scripts sont toujours injectés. Avec cette configuration, `wails dev` peut être exécuté, ce qui construira le frontend et le backend de manière appropriée avec le rechargement à chaud activé. De plus, lorsque vous accédez à l'application à partir d'un navigateur, les outils de développement de React peuvent maintenant être utilisés sur une version non minifiée de l'application pour le débogage. Enfin, pour des compilations plus rapides, `wails dev -s` peut être exécuté pour passer la construction par défaut du frontend par Wails car c'est une étape inutile. + +## Module Go + +Les modèles Wails par défaut génèrent un fichier `go.mod` qui contient le nom de module "changeme". Vous devriez changer ceci pour quelque chose de plus approprié après la génération du projet. diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx new file mode 100644 index 000000000..7cacec2cc --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/crossplatform-build.mdx @@ -0,0 +1,66 @@ +# Construction cross-plateforme avec Github Actions + +Pour construire un projet Wails pour toutes les plateformes disponibles, vous devez créer un build de l'application pour chaque système d'exploitation. Une méthode efficace pour y parvenir est d'utiliser GitHub Actions. + +Une action qui facilite la création d'une application Wails est disponible sur : +https://github.com/dAppServer/wails-build-action + +Dans le cas où l'action existante ne répond pas à vos exigences, vous ne pouvez sélectionner que les étapes nécessaires à partir de la source : +https://github.com/dAppServer/wails-build-action/blob/main/action.yml + +Voici un exemple complet qui démontre la construction d'une application lors de la création d'une nouvelle balise Git et qui la téléversera ensuite sur les artefacts Actions : + +```yaml +name: Wails build + +on: + push: + tags: + # Matche n'importe quel nouveau tag + - '*' + +env: + # Nécessaire pour la plupart des environnement, car des soucis de build peuvent arriver à cause de soucis de mémoire + NODE_OPTIONS: "--max-old-space-size=4096" + +jobs: + build: + strategy: + # Afin d'éviter que l'échec du build d'une plateforme n'impacte les autres + fail-fast: false + matrix: + build: + - name: 'App' + platform: 'linux/amd64' + os: 'ubuntu-latest' + - name: 'App' + platform: 'windows/amd64' + os: 'windows-latest' + - name: 'App' + platform: 'darwin/universal' + os: 'macos-latest' + + runs-on: ${{ matrix.build.os }} + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Build wails + uses: dAppServer/wails-build-action@v2.2 + id: build + with: + build-name: ${{ matrix.build.name }} + build-platform: ${{ matrix.build.platform }} + package: false + go-version: '1.20' +``` + +Cet exemple offre des opportunités pour diverses améliorations, comprenant : + +- Mise en cache des dépendances +- Signature de code +- Uploading to platforms like S3, Supabase, etc. +- Injection de secrets en tant que variables d'environnement +- Utiliser des variables d'environnement comme variables de compilation (telles que la variable de version extraite de la balise Git actuelle) diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx new file mode 100644 index 000000000..e4cd373ae --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/custom-protocol-schemes.mdx @@ -0,0 +1,204 @@ +# Custom Protocol Scheme association + +Custom Protocols feature allows you to associate specific custom protocol with your app so that when users open links with this protocol, +your app is launched to handle them. This can be particularly useful to connect your desktop app with your web app. +In this guide, we'll walk through the steps to implement custom protocols in Wails app. + +## Set Up Custom Protocol Schemes Association: + +To set up custom protocol, you need to modify your application's wails.json file. +In "info" section add a "protocols" section specifying the protocols your app should be associated with. + +For example: + +```json +{ + "info": { + "protocols": [ + { + "scheme": "myapp", + "description": "My App Protocol", + "role": "Editor" + } + ] + } +} +``` + +| Propriété | Description | +| :----------- | :------------------------------------------------------------------------------------------ | +| scheme | Custom Protocol scheme. e.g. myapp | +| description | Windows seulement. La description. | +| role | macOS uniquement. The app’s role with respect to the type. Corresponds to CFBundleTypeRole. | + +## Spécificités par platefome : + +### MacOS + +When you open custom protocol with your app, the system will launch your app and call the `OnUrlOpen` function in your Wails app. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnUrlOpen: func(url string) { println(url) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +On Windows Custom Protocol Schemes is supported only with NSIS installer. During installation, the installer will create a +registry entry for your schemes. When you open url with your app, new instance of app is launched and url is passed +as argument to your app. To handle this you should parse command line arguments in your app. Example: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### Linux + +Currently, Wails doesn't support bundling for Linux. So, you need to create file associations manually. +For example if you distribute your app as a .deb package, you can create file associations by adding required files in you bundle. +You can use [nfpm](https://nfpm.goreleaser.com/) to create .deb package for your app. + +1. Create a .desktop file for your app and specify file associations there (note that `%u` is important in Exec). Example: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=x-scheme-handler/myapp; +``` + +2. Prepare postInstall/postRemove scripts for your package. Example: + +```sh +# reload desktop database to load app in list of available +update-desktop-database /usr/share/applications +``` + +3. Configure nfpm to use your scripts and files. Example: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +# copy icons to Yaru theme as well. For some reason Ubuntu didn't pick up fileicons from hicolor theme +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Build your .deb package using nfpm: + +```sh +nfpm pkg --packager deb --target . +``` + +7. Now when your package is installed, your app will be associated with custom protocol scheme. When you open url with your app, + new instance of app is launched and file path is passed as argument to your app. + To handle this you should parse command line arguments in your app. Example: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +You also can enable single instance lock for your app. In this case, when you open url with your app, new instance of app is not launched +and arguments are passed to already running instance. Check single instance lock guide for details. Example: + +```go title="main.go" +func main() { + // Create application with options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx new file mode 100644 index 000000000..14a2ebe5b --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/dynamic-assets.mdx @@ -0,0 +1,142 @@ +# Ressources dynamiques + +:::info + +This does not work with vite v5.0.0+ and wails v2 due to changes in vite. Changes are planned in v3 to support similar functionality under vite v5.0.0+. If you need this feature, stay with vite v4.0.0+. See [issue 3240](https://github.com/wailsapp/wails/issues/3240) for details + +::: + +Si vous voulez charger ou générer des ressources pour votre frontend de manière dynamique, vous pouvez y parvenir en utilisant l'option [AssetsHandler](../reference/options#assetshandler). Le AssetsHandler est un générique`http.Handler` qui sera appelé pour toute requête non GET sur le serveur d'assets et pour les requêtes GET qui ne peuvent pas être servies car l'asset n'est pas trouvé. + +En installant un AssetsHandler personnalisé, vous pouvez servir vos propres ressources en utilisant un serveur de ressources personnalisé. + +## Exemple + +Dans notre exemple de projet, nous allons créer un gestionnaire de ressources simple qui chargera les fichiers à partir du disque: + +```go title=main.go {17-36,49} +package main + +import ( + "embed" + "fmt" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "net/http" + "os" + "strings" +) + +//go:embed all:frontend/dist +var assets embed.FS + +type FileLoader struct { + http.Handler +} + +func NewFileLoader() *FileLoader { + return &FileLoader{} +} + +func (h *FileLoader) ServeHTTP(res http.ResponseWriter, req *http.Request) { + var err error + requestedFilename := strings.TrimPrefix(req.URL.Path, "/") + println("Requesting file:", requestedFilename) + fileData, err := os.ReadFile(requestedFilename) + if err != nil { + res.WriteHeader(http.StatusBadRequest) + res.Write([]byte(fmt.Sprintf("Could not load file %s", requestedFilename))) + } + + res.Write(fileData) +} + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "helloworld", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + Handler: NewFileLoader(), + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 255}, + OnStartup: app.startup, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +Lorsque nous exécutons l'application en mode dev en utilisant `wails dev`, nous verrons la sortie suivante : + +``` +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' +DEB | [ExternalAssetHandler] Loading 'http://localhost:3001/favicon.ico' failed, using AssetHandler +Requesting file: favicon.ico +``` + +Comme vous pouvez le voir, le gestionnaire d'actifs est appelé lorsque le serveur d'assets par défaut est incapable de servir le fichier `favicon.ico`. + +Si vous faites un clic droit sur l'application principale et sélectionnez "inspecter" pour afficher les devtools, vous pouvez tester cette fonctionnalité en tapant ce qui suit dans la console : + +``` +let response = await fetch('does-not-exist.txt'); +``` + +Cela générera une erreur dans les devtools. Nous pouvons voir que l'erreur est ce que nous attendons est retourné par notre gestionnaire de ressources personnalisées : + +```mdx-code-block +

+ +

+``` + +Cependant, si nous demandons `go.mod`, nous verrons la sortie suivante : + +```mdx-code-block +

+ +

+``` + +Cette technique peut être utilisée pour charger des images directement dans la page. Si nous avons mis à jour notre modèle vanilla par défaut et a remplacé l'image du logo : + +```html + +``` + +avec : + +```html + +``` + +Nous verrions ensuite ce qui suit: + +```mdx-code-block +

+ +

+``` + +:::warning + +Exposer votre système de fichiers de cette manière est un risque de sécurité. Il est recommandé de gérer correctement l'accès à votre système de fichiers. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx new file mode 100644 index 000000000..973a4d217 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/file-association.mdx @@ -0,0 +1,243 @@ +# Associations de fichiers + +La fonction d'association de fichiers vous permet d'associer des types de fichiers spécifiques à votre application afin que lorsque les utilisateurs ouvrent ces fichiers, +votre application est lancée pour les gérer. Cela peut être particulièrement utile pour les éditeurs de texte, les visualisateurs d'images ou n'importe quelle application +qui fonctionne avec des formats de fichiers spécifiques. Dans ce guide, nous allons parcourir les étapes pour implémenter l'association de fichiers dans l'application Wails. + +## Configurer l'association de fichiers : + +Pour configurer l'association de fichiers, vous devez modifier le fichier wails.json de votre application. +Dans la section "info", ajoutez une section "fileAssociations" spécifiant les types de fichiers auxquels votre application doit être associée. + +Par exemple : + +```json +{ + "info": { + "fileAssociations": [ + { + "ext": "wails", + "name": "Wails", + "description": "Wails Application File", + "iconName": "wailsFileIcon", + "role": "Editor" + }, + { + "ext": "jpg", + "name": "JPEG", + "description": "Image File", + "iconName": "jpegFileIcon", + "role": "Editor" + } + ] + } +} +``` + +| Propriété | Description | +| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ext | L'extension. ex: png | +| name | Le nom de l'extension. ex: PNG File | +| iconName | Le nom de l'icône sans extension. Les icônes doivent être situées dans le dossier de build. Des icônes appropriées seront générées à partir du fichier .png pour macOS et Windows | +| description | Windows seulement. La description. Il est affiché dans la colonne `Type` dans l'explorateur Windows. | +| role | macOS uniquement. Rôle de l'application par rapport au type. Correspond au rôle CFBundleTypeRole. | + +## Spécificités par platefome : + +### MacOS + +Lorsque vous ouvrez un fichier (ou des fichiers) avec votre application, le système lancera votre application et appellera la fonction `OnFileOpen` dans votre application Wails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + Mac: &mac.Options{ + OnFileOpen: func(filePaths []string) { println(filestring) }, + }, + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err.Error()) + } +} +``` + +### Windows + +L'association de fichiers dans Windows n'est prise en charge qu'avec l'installateur NSS. Pendant l'installation, l'installateur créera une entrée de registre +pour vos associations de fichiers. Lorsque vous ouvrez un fichier avec votre application, une nouvelle instance d'application est lancée et le chemin d'accès est passé à +comme argument à votre application. Pour gérer cela, vous devez analyser les arguments de la ligne de commande dans votre application. Exemple: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +Vous pouvez également activer le verrouillage par instance unique pour votre application. Dans ce cas, lorsque vous ouvrez un fichier avec votre application, la nouvelle instance d'application n'est pas lancée +et les arguments sont passés à l'instance déjà en cours d'exécution. Consultez le guide de verrouillage de l'instance unique pour plus de détails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` + +### Linux + +Actuellement, Wails ne prend pas en charge l'association de fichiers pour Linux. Vous devez donc créer des associations de fichiers manuellement. +Par exemple, si vous distribuez votre application en tant que package .deb, vous pouvez créer des associations de fichiers en ajoutant les fichiers requis dans votre bundle. +Vous pouvez utiliser [nfpm](https://nfpm.goreleaser.com/) pour créer un package .deb pour votre application. + +1. Créez un fichier .desktop pour votre application et spécifiez des associations de fichiers là-bas. Exemple: + +```ini +[Desktop Entry] +Categories=Office +Exec=/usr/bin/wails-open-file %u +Icon=wails-open-file.png +Name=wails-open-file +Terminal=false +Type=Application +MimeType=application/x-wails;application/x-test +``` + +2. Créer un fichier de type MIME. Exemple: + +```xml + + + + Wails Application File + + + +``` + +3. Créez des icônes pour vos types de fichiers. Les icônes SVG sont recommandées. +4. Préparez les scripts postInstall/postRemove pour votre paquet. Exemple: + +```sh +# Recharge les types MIME pour enregistrer votre association de fichiers +update-mime-database /usr/share/mime +# Recharge la base de données du bureau afin de rendre disponible votre application dans les choix possibles +update-desktop-database /usr/share/applications +# Mise à jour des icônes +update-icon-caches /usr/share/icons/* +``` + +5. Configurez nfpm pour utiliser vos scripts et fichiers. Exemple: + +```yaml +name: "wails-open-file" +arch: "arm64" +platform: "linux" +version: "1.0.0" +section: "default" +priority: "extra" +maintainer: "FooBarCorp " +description: "Sample Package" +vendor: "FooBarCorp" +homepage: "http://example.com" +license: "MIT" +contents: +- src: ../bin/wails-open-file + dst: /usr/bin/wails-open-file +- src: ./main.desktop + dst: /usr/share/applications/wails-open-file.desktop +- src: ./application-wails-mime.xml + dst: /usr/share/mime/packages/application-x-wails.xml +- src: ./application-test-mime.xml + dst: /usr/share/mime/packages/application-x-test.xml +- src: ../appicon.svg + dst: /usr/share/icons/hicolor/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/hicolor/scalable/mimetypes/application-x-test.svg +# copy icons to Yaru theme as well. For some reason Ubuntu didn't pick up fileicons from hicolor theme +- src: ../appicon.svg + dst: /usr/share/icons/Yaru/scalable/apps/wails-open-file.svg +- src: ../wailsFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-wails.svg +- src: ../testFileIcon.svg + dst: /usr/share/icons/Yaru/scalable/mimetypes/application-x-test.svg +scripts: + postinstall: ./postInstall.sh + postremove: ./postRemove.sh +``` + +6. Construisez votre paquet .deb en utilisant nfpm: + +```sh +nfpm pkg --packager deb --target . +``` + +7. Maintenant que votre paquet est installé, votre application sera associée aux types de fichiers qui ont été spécifiés. Lorsque vous ouvrez un fichier avec votre application, une nouvelle instance est lancée et le chemin du fichier est passé en argument à votre application. + Pour gérer cela, vous devez analyser les arguments de la ligne de commande dans votre application. Exemple: + +```go title="main.go" +func main() { + argsWithoutProg := os.Args[1:] + + if len(argsWithoutProg) != 0 { + println("launchArgs", argsWithoutProg) + } +} +``` + +Vous pouvez également activer le verrouillage par instance unique pour votre application. Dans ce cas, lorsque vous ouvrez un fichier avec votre application, la nouvelle instance d'application n'est pas lancée +et les arguments sont passés à l'instance déjà en cours d'exécution. Consultez le guide de verrouillage de l'instance unique pour plus de détails. Exemple: + +```go title="main.go" +func main() { + // Création d'une application avec des options + err := wails.Run(&options.App{ + Title: "wails-open-file", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + BackgroundColour: &options.RGBA{R: 27, G: 38, B: 54, A: 1}, + SingleInstanceLock: &options.SingleInstanceLock{ + UniqueId: "e3984e08-28dc-4e3d-b70a-45e961589cdc", + OnSecondInstanceLaunch: app.onSecondInstanceLaunch, + }, + Bind: []interface{}{ + app, + }, + }) +} +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx new file mode 100644 index 000000000..bbeb338f1 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frameless.mdx @@ -0,0 +1,87 @@ +# Applications sans cadre + +Wails prend en charge la création d'applications qui n'ont pas de cadres. Ceci peut être réalisé en utilisant le champ [frameless](../reference/options.mdx#frameless) dans [Application Options](../reference/options.mdx#application-options). + +Wails offre une solution simple pour faire glisser la fenêtre: N'importe quel élément HTML qui a le style CSS `--wails-draggable:drag` agira comme une "poignée de glisser". Cette propriété s'applique à tous les éléments enfants. Si vous devez indiquer qu'un élément imbriqué ne doit pas glisser, alors utilisez l'attribut '--wails-draggable:no-drag' sur cet élément. + +```html + + + + + + + +
+ + +
+
+ + + + +``` + +Pour certains projets, l'utilisation d'une variable CSS peut ne pas être possible en raison du style dynamique. Dans ce cas, vous pouvez utiliser les options `CSSDragProperty` et `CSSDragValue` pour définir une propriété et une valeur qui seront utilisées pour indiquer régions glissables : + +```go title=main.go +package main + +import ( + "embed" + + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" +) + +//go:embed all:frontend/dist +var assets embed.FS + +func main() { + // Create an instance of the app structure + app := NewApp() + + // Create application with options + err := wails.Run(&options.App{ + Title: "alwaysontop", + Width: 1024, + Height: 768, + AssetServer: &assetserver.Options{ + Assets: assets, + }, + Frameless: true, + CSSDragProperty: "widows", + CSSDragValue: "1", + Bind: []interface{}{ + app, + }, + }) + + if err != nil { + println("Error:", err) + } +} +``` + +```html title=index.html + + + + + + alwaysontop + + +
+ + + +``` + +:::info Plein écran + +Si vous autorisez votre application à être en plein écran, cette fonctionnalité de glissement sera désactivée. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx new file mode 100644 index 000000000..ef0dbed76 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/frontend.mdx @@ -0,0 +1,72 @@ +# Frontend + +## Injection de script + +Quand Wails sert votre fichier `index.html`, par défaut, il injectera 2 entrées de script dans la balise `` pour charger `/wails/ipc.js` et `/wails/runtime.js`. Ces fichiers installent respectivement les bindings et les runtime. + +Le code ci-dessous montre où ils sont injectés par défaut : + +```html + + + injection example + + + + + + + +
Please enter your name below 👇
+
+ + +
+ + + + +``` + +### Remplacer l'injection de script par défaut + +Pour fournir plus de flexibilité aux développeurs, il y a une balise meta qui peut être utilisée pour personnaliser ce comportement: + +```html + +``` + +Les options sont les suivantes : + +| Valeur | Description | +| ------------------- | -------------------------------------------------------------- | +| noautoinjectruntime | Pour désactiver l'injection automatique de `/wails/runtime.js` | +| noautoinjectipc | Pour désactiver l'injection automatique de `/wails/ipc.js` | +| noautoinject | Pour désactiver l'injection automatique de tous les scripts | + +Multiple options may be used provided they are comma separated. + +Ce code est parfaitement valide et fonctionne de la même manière que la version avec l'auto-injection : + +```html + + + injection example + + + + + + +
Please enter your name below 👇
+
+ + +
+ + + + + + +``` diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx new file mode 100644 index 000000000..bd732e283 --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/ides.mdx @@ -0,0 +1,127 @@ +# IDEs + +Wails vise à fournir une grande expérience de développement. À cet effet, nous supportons maintenant la génération d'une configuration spécifique IDE pour fournir une configuration plus souple du projet. + +Currently, we support [Visual Studio Code](https://code.visualstudio.com/) and [Goland](https://www.jetbrains.com/go/). + +## Visual Studio Code + +```mdx-code-block +

+ +

+``` + +Lors de la génération d'un projet en utilisant l'option `-ide vscode` , les fichiers IDE seront créés à côté des autres fichiers du projet. Ces fichiers sont placés dans le répertoire `.vscode` et fournissent la configuration correcte pour déboguer votre application. + +Les 2 fichiers générés sont `tasks.json` et `launch.json`. Ci-dessous se trouvent les fichiers générés par défaut : + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/myproject.exe" + ] + } + ] +} +``` + +```json title="launch.json" +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Wails: Debug myproject", + "type": "go", + "request": "launch", + "mode": "exec", + "program": "${workspaceFolder}/build/bin/myproject.exe", + "preLaunchTask": "build", + "cwd": "${workspaceFolder}", + "env": {} + } + ] +} +``` + +### Configuration des étapes d'installation et de construction + +Le fichier `tasks.json` est simple pour le projet par défaut car il n'y a pas d'étapes `npm install` ou `npm build` nécessaire. Pour les projets qui ont une étape de construction en frontend comme avec Svelte, nous devrions modifier `tasks.json` pour ajouter les étapes d'installation et de construction suivantes : + +```json title="tasks.json" +{ + "version": "2.0.0", + "tasks": [ + { + "label": "npm install", + "type": "npm", + "script": "install", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "npm run build", + "type": "npm", + "script": "build", + "options": { + "cwd": "${workspaceFolder}/frontend" + }, + "presentation": { + "clear": true, + "panel": "shared", + "showReuseMessage": false + }, + "problemMatcher": [] + }, + { + "label": "build", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "command": "go", + "args": [ + "build", + "-tags", + "dev", + "-gcflags", + "all=-N -l", + "-o", + "build/bin/vscode.exe" + ], + "dependsOn": ["npm install", "npm run build"] + } + ] +} +``` + +:::info Améliorations futures + +Dans le futur, nous espérons générer un `tasks.json` qui inclut les étapes d'installation et de construction automatiquement. + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx new file mode 100644 index 000000000..6bd2002fc --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux-distro-support.mdx @@ -0,0 +1,103 @@ +# Prise en charge des distributions Linux + +## Vue d'ensemble + +Wails offre le support de Linux, mais fournir des instructions d'installation pour toutes les distributions disponibles est une tâche impossible. À la place, Wails essaie de déterminer si les paquets dont vous avez besoin pour développer des applications sont disponibles via le gestionnaire de paquets de votre système. Actuellement, nous supportons les gestionnaires de paquets suivants : + +- apt +- dnf +- emerge +- eopkg +- nixpkgs +- pacman +- zypper + +## Ajout des noms de paquets + +Il peut y avoir des cas où votre distribution de linux utilise un des gestionnaires de paquets pris en charge mais le nom du paquet est différent. Par exemple, vous pouvez utiliser un dérivé Ubuntu, mais le nom du paquet pour gtk peut être différent. Wails tente de trouver le paquet correct en itérant une liste de noms de paquets. La liste des paquets est stockée dans un fichier spécifique dans le dossier `v2/internal/system/packagemanager` . Dans notre exemple, ce serait `v2/internal/system/packagemanager/apt.go`. + +Dans ce fichier, la liste des paquets est définie par la méthode `Packages()`: + +```go +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +Supposons que dans notre distribution linux, `libgtk-3` est empaqueté sous le nom `lib-gtk3-dev`. Nous pourrions ajouter le support de ce paquet en ajoutant la ligne suivante : + +```go {5} +func (a *Apt) Packages() packagemap { + return packagemap{ + "libgtk-3": []*Package{ + {Name: "libgtk-3-dev", SystemPackage: true, Library: true}, + {Name: "lib-gtk3-dev", SystemPackage: true, Library: true}, + }, + "libwebkit": []*Package{ + {Name: "libwebkit2gtk-4.0-dev", SystemPackage: true, Library: true}, + }, + "gcc": []*Package{ + {Name: "build-essential", SystemPackage: true}, + }, + "pkg-config": []*Package{ + {Name: "pkg-config", SystemPackage: true}, + }, + "npm": []*Package{ + {Name: "npm", SystemPackage: true}, + }, + "docker": []*Package{ + {Name: "docker.io", SystemPackage: true, Optional: true}, + }, + } +} +``` + +## Ajout de nouveaux gestionnaires de paquets + +Pour ajouter un nouveau gestionnaire de paquets, effectuez les étapes suivantes : + +- Créez un nouveau fichier dans `v2/internal/system/packagemanager` appelé `.go`, où `` est le nom du gestionnaire de paquets. +- Définit une structure conforme à l'interface du gestionnaire de paquets définie dans `pm.go`: + +```go +type PackageManager interface { + Name() string + Packages() packagemap + PackageInstalled(*Package) (bool, error) + PackageAvailable(*Package) (bool, error) + InstallCommand(*Package) string +} +``` + +- `Name()` doit retourner le nom du gestionnaire de paquets +- `Packages()` doit retourner une `packagemap`, qui fournit des noms de fichiers candidats pour les dépendances +- `PackageInstalled()` devrait retourner `true` si le paquet donné est installé +- `PackageAvailable()` devrait retourner `true` si le paquet donné n'est pas installé mais disponible pour l'installation +- `InstallCommand()` doit retourner la commande exacte pour installer le nom du paquet donné + +Jetez un coup d'œil au code des autres gestionnaires de paquets pour avoir une idée de comment cela fonctionne. + +:::info Rappel + +Si vous ajoutez le support d'un nouveau gestionnaire de paquets, n'oubliez pas de mettre également à jour cette page ! + +::: diff --git a/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx new file mode 100644 index 000000000..415418ebb --- /dev/null +++ b/website/i18n/fr/docusaurus-plugin-content-docs/version-v2.11.0/guides/linux.mdx @@ -0,0 +1,70 @@ +# Linux + +Cette page a divers guides liés au développement d'applications Wails pour Linux. + +## Video tag doesn't fire "ended" event + +Lorsque vous utilisez un tag vidéo, l'événement "terminé" n'est pas déclenché lorsque la vidéo est finie. Ceci est un bogue dans WebkitGTK, cependant vous pouvez utiliser le contournement suivant pour le corriger : + +```js +videoTag.addEventListener("timeupdate", (event) => { + if (event.target.duration - event.target.currentTime < 0.2) { + let ended = new Event("ended"); + event.target.dispatchEvent(ended); + } +}); +``` + +Source : [Lyimmi](https://github.com/Lyimmi) sur le [forum de discussion](https://github.com/wailsapp/wails/issues/1729#issuecomment-1212291275) + +## GStreamer error when using Audio or Video elements + +If you are seeing the following error when including `