d(font);
          maxCodePointsCovered = codePointsCovered;
        } else if (codePointsCovered == maxCodePointsCovered) {
          bestFonts.add(font);
        }
      }
      if (maxCodePointsCovered == 0) {
        // Fonts cannot cover remaining unmatched characters.
        break;
      }
      // If the list of best fonts are all CJK fonts, choose the best one based
      // on locale. Otherwise just choose the first font.
      NotoFont bestFont = bestFonts.first;
      if (bestFonts.length > 1) {
        if (bestFonts.every((NotoFont font) =>
          font == _notoSansSC ||
          font == _notoSansTC ||
          font == _notoSansHK ||
          font == _notoSansJP ||
          font == _notoSansKR
        )) {
          if (language == 'zh-Hans' ||
              language == 'zh-CN' ||
              language == 'zh-SG' ||
              language == 'zh-MY') {
            if (bestFonts.contains(_notoSansSC)) {
              bestFont = _notoSansSC;
            }
          } else if (language == 'zh-Hant' ||
              language == 'zh-TW' ||
              language == 'zh-MO') {
            if (bestFonts.contains(_notoSansTC)) {
              bestFont = _notoSansTC;
            }
          } else if (language == 'zh-HK') {
            if (bestFonts.contains(_notoSansHK)) {
              bestFont = _notoSansHK;
            }
          } else if (language == 'ja') {
            if (bestFonts.contains(_notoSansJP)) {
              bestFont = _notoSansJP;
            }
          } else if (language == 'ko') {
            if (bestFonts.contains(_notoSansKR)) {
              bestFont = _notoSansKR;
            }
          } else if (bestFonts.contains(_notoSansSC)) {
            bestFont = _notoSansSC;
          }
        } else {
          // To be predictable, if there is a tie for best font, choose a font
          // from this list first, then just choose the first font.
          if (bestFonts.contains(_notoSymbols)) {
            bestFont = _notoSymbols;
          } else if (bestFonts.contains(_notoSansSC)) {
            bestFont = _notoSansSC;
          }
        }
      }
      codePoints.removeWhere((int codePoint) {
        return bestFont.contains(codePoint);
      });
      minimumFonts.add(bestFont);
    }
    return minimumFonts;
  }
}

class FallbackFontDownloadQueue {
  FallbackFontDownloadQueue(this.fallbackManager);

  final FontFallbackManager fallbackManager;

  static const String _defaultFallbackFontsUrlPrefix = 'https://fonts.gstatic.com/s/';
  String? fallbackFontUrlPrefixOverride;
  String get fallbackFontUrlPrefix => fallbackFontUrlPrefixOverride ?? _defaultFallbackFontsUrlPrefix;

  final Set<NotoFont> downloadedFonts = <NotoFont>{};
  final Map<String, NotoFont> pendingFonts = <String, NotoFont>{};

  bool get isPending => pendingFonts.isNotEmpty;

  void Function(String family)? debugOnLoadFontFamily;

  Completer<void>? _idleCompleter;

  Future<void> waitForIdle() {
    if (_idleCompleter == null) {
      // We're already idle
      return Future<void>.value();
    } else {
      return _idleCompleter!.future;
    }
  }

  void add(NotoFont font) {
    if (downloadedFonts.contains(font) ||
        pendingFonts.containsKey(font.url)) {
      return;
    }
    final bool firstInBatch = pendingFonts.isEmpty;
    pendingFonts[font.url] = font;
    _idleCompleter ??= Completer<void>();
    if (firstInBatch) {
      Timer.run(startDownloads);


t); %y-coordinates

z=waveAmplitude.*sin(numPeriodsWave*t); %z-coordinates

V_guide_curve=[x(:) y(:) z(:)]; %Collected curve nodes

[V_guide_curve] = evenlySampleCurve(V_guide_curve,numStepsCircumference-1,'pchip',1); %Resample curve evenly

V_guide_curve(end+1,:)=V_guide_curve(1,:); %Append start to end so it is a closed loop

%%

% Visualize guide curve

if plotOn==1

    cFigure; hold on;

    title('Stent guide curve','fontSize',fontSize);

    plotV(V_guide_curve,'k.-','lineWidth',lineWidth,'MarkerSize',markerSize);

    axisGeom;

    drawnow;

end

%% Position stent section at the start and end of the guide curve

% Next the section is translated and rotated so it is placed at the start

% of the guide curve such that the curve normal points allong the curve.

% Create rotation matrix

n3=vecnormalize(V_guide_curve(2,:)-V_guide_curve(1,:)); %Out of section normal direction z ish direction

[~,indMin]=min(dot(n3(ones(1,2),:),[1 0 0; 0 1 0],2)); %Get index most appropriate initial other axis

switch indMin

    case 1

        n1=[1 0 0]; %Initialized x direction

        n2=vecnormalize(cross(n3,n1)); %y ish direction

        n1=vecnormalize(cross(n2,n3)); %Proper x ish direction

        R=[n1; n2; n3]; %Rotation matrix

    case 2

        n2=[0 1 0]; %Initialized y direction

        n1=vecnormalize(cross(n2,n3)); %x ish direction

        n2=vecnormalize(cross(n3,n1)); %Proper y ish direction

        R=[n1; n2; n3]; %Rotation matrix

end

p1=V_guide_curve(1,:); %The start node

V_section=V_section*R; %Rotate the section

V_section=V_section+p1(ones(size(V_section,1),1),:); % Translate coordinate to start

%%

% Visualize guide curve

if plotOn==1

    cFigure; hold on;

    title('Stent section positioned on guide curve','fontSize',fontSize);

    plotV(V_guide_curve,'k-','lineWidth',1);

    plotV(V_section,'k.-','lineWidth',lineWidth,'MarkerSize',markerSize);

    quiverVec(p1,n1,1,'r');

    quiverVec(p1,n2,1,'g');

    quiverVec(p1,n3,1,'b');

    axisGeom;

    drawnow;

end

%% Sweeping section allong curve

% Normally |sweepLoft| produces patch data as an output (e.g. faces and

% vertices). However these outputs are supressed here and the coordinate

% mesh output is instead used to create a hexahedral mesh. See also |HELP_sweepLoft|

numTwist=0; %Number of additional twists of loft feature around guide curve

numStepsSweep=numStepsCircumference; %Number of steps for loft feature from sketch 1 to sketch 2

[~,~,~,S]=sweepLoft(V_section,V_section,n3,n3,V_guide_curve,numStepsSweep,numTwist,0);

%% Construct hexahedral mesh

X=S.X'; Y=S.Y'; Z=S.Z'; %Coordinate matrices

V=[X(:) Y(:) Z(:)]; %Create node list

F=reshape((1:1:size(V,1)),4,size(V,1)/4)'; %All top and bottom faces

E=[F(2:end,:) F(1:end-1,:)]; %The hexahedral elements

[E,V]=mergeVertices(E,V); %Merge nodes


using System.Configuration;

#nullable disable
namespace System.Net.Configuration
{
  /// Represents a container for authentication module configuration elements. This class cannot be inherited.
  [ConfigurationCollection(typeof (AuthenticationModuleElement))]
  public sealed class AuthenticationModuleElementCollection : ConfigurationElementCollection
  {
    /// Gets or sets the element at the specified position in the collection.
    /// <param name="index">The zero-based index of the element.</param>
    /// <returns>The <see cref="T:System.Net.Configuration.AuthenticationModuleElement" /> at the specified location.</returns>
    public AuthenticationModuleElement this[int index]
    {
      get => (AuthenticationModuleElement) this.BaseGet(index);
      set
      {
        if (this.BaseGet(index) != null)
          this.BaseRemoveAt(index);
        this.BaseAdd(index, (ConfigurationElement) value);
      }
    }

    /// Gets or sets the element with the specified key.
    /// <param name="name">The key for an element in the collection.</param>
    /// <returns>The <see cref="T:System.Net.Configuration.AuthenticationModuleElement" /> with the specified key or <see langword="null" /> if there is no element with the specified key.</returns>
    public AuthenticationModuleElement this[string name]
    {
      get => (AuthenticationModuleElement) this.BaseGet((object) name);
      set
      {
        if (this.BaseGet((object) name) != null)
          this.BaseRemove((object) name);
        this.BaseAdd((ConfigurationElement) value);
      }
    }

    /// Adds an element to the collection.
    /// <param name="element">The <see cref="T:System.Net.Configuration.AuthenticationModuleElement" /> to add to the collection.</param>
    public void Add(A


="bug"] > .callout-title {
  color: light-dark(rgb(233, 49, 71), rgb(251, 70, 76));
  font-weight: 400;
}
body
  .callout[data-callout="bug"]
  > .callout-title
  > .callout-icon
  > svg.svg-icon {
  color: light-dark(rgb(233, 49, 71), rgb(251, 70, 76));
}
body .callout[data-callout="danger"] {
  --callout-color: 251, 70, 76;
  background-color: light-dark(rgba(233, 49, 71, 0.1), rgba(251, 70, 76, 0.1));
  border-color: light-dark(rgba(233, 49, 71, 0.25), rgba(251, 70, 76, 0.25));
  border-radius: 4px;
  border-style: solid;
  border-width: 0px;
  mix-blend-mode: normal;
  padding: 12px 12px 12px 24px;
}
body .callout[data-callout="danger"] > .callout-content {
  background-color: rgba(0, 0, 0, 0);
  padding: 0px;
}
body .callout[data-callout="danger"] > .callout-title {
  color: light-dark(rgb(233, 49, 71), rgb(251, 70, 76));
  font-weight: 400;
}
body
  .callout[data-callout="danger"]
  > .callout-title
  > .callout-icon
  > svg.svg-icon {
  color: light-dark(rgb(233, 49, 71), rgb(251, 70, 76));
}
body .callout[data-callout="example"] {
  --callout-color: 168, 130, 255;
  background-color: light-dark(
    rgba(120, 82, 238, 0.1),
    rgba(168, 130, 255, 0.1)
  );
  border-color: light-dark(rgba(120, 82, 238, 0.25), rgba(168, 130, 255, 0.25));
  border-radius: 4px;
  border-style: solid;
  border-width: 0px;
  mix-blend-mode: normal;
  padding: 12px 12px 12px 24px;
}
body .callout[data-callout="example"] > .callout-content {
  background-color: rgba(0, 0, 0, 0);
  padding: 0px;
}
body .callout[data-callout="example"] > .callout-title {
  color: light-dark(rgb(120, 82, 238), rgb(168, 130, 255));
  font-weight: 400;
}
body
  .callout[data-callout="example"]
  > .callout-title
  > .callout-icon
  > svg.svg-icon {
  color: light-dark(rgb(120, 82, 238), rgb(168, 130, 255));
}
body .callout[data-callout="failure"] {
  --callout-color: 251, 70, 76;
  background-color: light-dark(rgba(233, 49, 71, 0.1), rgba(251, 70, 76, 0.1));
  border-color: light-dark(rgba(233, 49, 71, 0.25), rgba(251, 70, 76, 0.25));
  border-radius: 4px;
  border-style: solid;
  border-width: 0px;
  mix-blend-mode: normal;
  padding: 12px 12px 12px 24px;
}
body .callout[data-callout="failure"] > .callout-content {
  background-color: rgba(0, 0, 0, 0);
  padding: 0px;
}
body .callout[data-callout="failure"] > .callout-title {
  color: light-dark(rgb(233, 49, 71), rgb(251, 70, 76));
  font-weight


ms

```
!pip install atspy
```

    Collecting atspy
      Downloading https://files.pythonhosted.org/packages/b2/a6/3fc563f6b52eef2226ff9e33acdddc5a282979df963c280b2e08e3ffd4d9/atspy-0.0.9.tar.gz (54kB)
         |████████████████████████████████| 61kB 5.0MB/s
    Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (from atspy) (0.25.3)
    Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from atspy) (1.4.1)
    Requirement already satisfied: numba in /usr/local/lib/python3.6/dist-packages (from atspy) (0.47.0)
    Collecting datetime
      Downloading https://files.pythonhosted.org/packages/73/22/a5297f3a1f92468cc737f8ce7ba6e5f245fcfafeae810ba37bd1039ea01c/DateTime-4.3-py2.py3-none-any.whl (60kB)
         |████████████████████████████████| 61kB 7.6MB/s
    Collecting pmdarima
      Downloading https://files.pythonhosted.org/packages/4a/1a/32945c19306212fd08547369f40c8965bbc9e18652bb241766dfab398710/pmdarima-1.5.2-cp36-cp36m-manylinux1_x86_64.whl (1.4MB)
         |████████████████████████████████| 1.5MB 20.9MB/s
    Requirement already satisfied: pydot in /usr/local/lib/python3.6/dist-packages (from atspy) (1.3.0)
    Requirement already satisfied: dill in /usr/local/lib/python3.6/dist-packages (from atspy) (0.3.1.1)
    Collecting pathos
      Downloading https://files.pythonhosted.org/packages/c6/a2/cd59f73d5ede4f122687bf8f63de5d671c9561e493ca699241f05b038278/pathos-0.2.5.tar.gz (162kB)
         |████████████████████████████████| 163kB 52.4MB/s
    Requirement already satisfied: sqlalchemy in /usr/local/lib/python3.6/dist-packages (from atspy) (1.3.13)
    Requirement already satisfied: matplotlib in /usr/local/lib/python3.6/dist-packages (from atspy) (3.1.2)
    Requirement already satisfied: xgboost in /usr/local/lib/python3.6/dist-packages (from atspy) (0.90)
    Requirement already satisfied: sklearn in /usr/local/lib/python3.6/dist-packages (from atspy) (0.0)
    Collecting mxnet==1.4.1
      Downloading https://files.pythonhosted.org/packages/58/f4/bc147a1ba7175f9890523ff8f1a928a43ac8a79d5897a067158cac4d092f/mxnet-1.4.1-py2.py3-none


using System.Threading.Tasks;
using Avalonia;
using Avalonia.Controls;
using UVtools.Core.Objects;
using UVtools.UI.Extensions;

namespace UVtools.UI.Controls;

public partial class KernelControl : UserControl
{
    private KernelConfiguration? _kernel;

    public static readonly DirectProperty<KernelControl, KernelConfiguration?> KernelProperty =
        AvaloniaProperty.RegisterDirect<KernelControl, KernelConfiguration?>(
            nameof(Kernel),
            o => o.Kernel,
            (o, v) => o.Kernel = v);

    public KernelConfiguration? Kernel
    {
        get => _kernel;
        set => SetAndRaise(KernelProperty, ref _kernel, value);
    }

    public KernelControl()
    {
        Initiali


      get {
        return Parameters["stale"];
      }
    }

    #endregion

    #region Internal Methods

    internal static AuthenticationChallenge CreateBasicChallenge (string realm)
    {
      return new AuthenticationChallenge (AuthenticationSchemes.Basic, realm);
    }

    internal static AuthenticationChallenge CreateDigestChallenge (string realm)
    {
      return new AuthenticationChallenge (AuthenticationSchemes.Digest, realm);
    }

    internal static AuthenticationChallenge Parse (string value)
    {
      var chal = value.Split (new[] { ' ' }, 2);
      if (chal.Length != 2)
        return null;

      var schm = chal[0].ToLower ();
      return schm == "basic"
             ? new AuthenticationChallenge (
                 AuthenticationSchemes.Basic, ParseParameters (chal[1]))
             : schm == "digest"
               ? new AuthenticationChallenge (
                   AuthenticationSchemes.Digest, ParseParameters (chal[1]))
               : null;
    }

    internal override string ToBasicString ()
    {
      return String.Format ("Basic realm=\"{0}\"", Parameters["realm"]);
    }

    internal override string ToDigestString ()
    {
      var output = new StringBuilder (128);

      var domain = Parameters["domain"];
      if (domain != null)
        output.AppendFormat (
          "Digest realm=\"{0}\", domain=\"{1}\", nonce=\"{2}\"",
          Parameters["realm"],
          domain,
          Parameters["nonce"]);
      else
        output.AppendFormat (
          "Digest realm=\"{0}\", nonce=\"{1}\"", Parameters["realm"], Parameters["nonce"]);

      var opaque = Parameters["opaque"];
      if (opaque != null)
        output.AppendFormat (", opaque=\"{0}\"", opaque);

      var stale = Parameters["stale"];
      if (stale != null)
        output.AppendFormat (", stale={0}", stale);

      var algo = Parameters["algorithm"];
      if (algo != null)
        output.AppendFormat (", algorithm={0}", algo);

      var qop = Parameters["qop"];
      if (qop != null)
        output.AppendFormat (", qop=\"{0}\"", qop);

      return output.ToString ();
    }

    #endregion
  }
}


import java.nio.charset.StandardCharsets
import java.util.Locale
import javax.crypto.Cipher
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec

object SourceDecoder {
    // 从 URL 或本地文件获取十六进制源内容
    @Throws(IOException::class)
    fun fetchHexSource(urlString: String?): String {
        val url = URL(urlString)
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "GET"
        conn.setRequestProperty("User-Agent", "okhttp/3.15")
        conn.setRequestProperty(
            "Accept",
            "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
        )

        val responseCode = conn.responseCode
        if (responseCode != 200) {
            throw IOException("HTTP 请求失败，状态码: $responseCode")
        }

        try {
            BufferedReader(
                InputStreamReader(
                    conn.inputStream,
                    StandardCharsets.UTF_8
                )
            ).use { reader ->
                val content = StringBuilder()
                var line: String?
                while ((reader.readLine().also { line = it }) != null) {
                    content.append(line)
                }
                return content.toString().trim { it <= ' ' }
            }
        } finally {
            conn.disconnect()
        }
    }

    // 读取本地文件内容
    @Throws(IOException::class)
    fun readLocalFile(filePath: String?): String {
        val content = StringBuilder()
        BufferedReader(
            InputStreamReader(FileInputStream(filePath), StandardCharsets.UTF_8)
        ).use { reader ->
            var line: String?
            while ((reader.readLine().also { line = it }) != null) {
                content.append(line)
            }
        }
        return content.toString().trim { it <= ' ' }
    }

    // 解码十六进制源为 JSON
    @Throws(Exception::class)
    fun decodeHexSource(hexSource: String?): String? {
        if (hexSource == null || hexSource.isEmpty()) {
            return null
        }

        if (isJson(hexSource)) {
            return hexSource
        }

        val content: String = hexSource

        if (content.startsWith("2423")) {
            val startIndex = content.indexOf("2324") + 4
            val endIndex = content.length - 26
            val dataHex = content.substring(startIndex, endIndex)

            val contentBytes = hexToBytes(content)
            val contentStr =
                String(contentBytes, StandardCharsets.UTF_8).lowercase(Locale.getDefault())

            val keyStart = contentStr.indexOf("$#") + 2
            val keyEnd = contentStr.indexOf("#$")
            val keyStr = contentStr.substring(keyStart, keyEnd)
            val keyBytes =
                rightPadding(keyStr.toByteArray(StandardCharsets.UTF_8), '0'.code.toByte(), 16)

            val ivStr = contentStr.substring(contentStr.length - 13)
            val ivBytes =
                rightPadding(ivStr.toByteArray(StandardCharsets.UTF_8), '0'.code.toByte(), 16)

            val dataBytes = hexToBytes(dataHex)

            val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
            val keySpec = SecretKeySpec(keyBytes, "AES")
            val ivSpec = IvParameterSpec(ivBytes)
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec)
            val decryptedBytes = cipher.doFinal(dataBytes)

            return String(decryptedBytes, StandardCharsets.UTF_8)
        }

        return content
    }

    // 将解码结果保存到 JSON 文件


, 50.8%);
  --d8rd7v: 0, calc(1 * 62.5%), 50.8%;
  --d8rd8: hsl(0, calc(1 * 61.6%), 44.9%);
  --d8rd8v: 0, calc(1 * 61.6%), 44.9%;
  --d8rd9: hsl(0.5, calc(1 * 62.4%), 39.6%);
  --d8rd9v: 0.5, calc(1 * 62.4%), 39.6%;
  --d8rdA: hsl(0, calc(1 * 63.7%), 35.7%);
  --d8rdAv: 0, calc(1 * 63.7%), 35.7%;
  --d8rdB: hsl(0, calc(1 * 65.6%), 32%);
  --d8rdBv: 0, calc(1 * 65.6%), 32%;
  --d8rdC: hsl(0.6, calc(1 * 67.9%), 26.9%);
  --d8rdCv: 0.6, calc(1 * 67.9%), 26.9%;
  --d8rdD: hsl(0.8, calc(1 * 68.4%), 22.4%);
  --d8rdDv: 0.8, calc(1 * 68.4%), 22.4%;
  --d8rdE: hsl(0, calc(1 * 70.8%), 17.5%);
  --d8rdEv: 0, calc(1 * 70.8%), 17.5%;
  --d8rdF: hsl(0, calc(1 * 75%), 14.1%);
  --d8rdFv: 0, calc(1 * 75%), 14.1%;
  --d8rdG: hsl(0, calc(1 * 78.6%), 11%);
  --d8rdGv: 0, calc(1 * 78.6%), 11%;
  --d8yl0: hsl(25.9, calc(1 * 100%), 90%);
  --d8yl0v: 25.9, calc(1 * 100%), 90%;
  --d8yl1: hsl(27.8, calc(1 * 100%), 81.4%);
  --d8yl1v: 27.8, calc(1 * 100%), 81.4%;
  --d8yl2: hsl(30.9, calc(1 * 100%), 72.5%);
  --d8yl2v: 30.9, calc(1 * 100%), 72.5%;
  --d8yl3: hsl(34.4, calc(1 * 98.9%), 63.3%);
  --d8yl3v: 34.4, calc(1 * 98.9%), 63.3%;
  --d8yl4: hsl(37.5, calc(1 * 93.2%), 53.5%);
  --d8yl4v: 37.5, calc(1 * 93.2%), 53.5%;
  --d8yl5: hsl(39.3, calc(1 * 96.6%), 45.9%);
  --d8yl5v: 39.3, calc(1 * 96.6%), 45.9%;
  --d8yl6: hsl(39.1, calc(1 * 98.1%), 42%);
  --d8yl6v: 39.1, calc(1 * 98.1%), 42%;
  --d8yl7: hsl(38, calc(1 * 88.9%), 39%);
  --d8yl7v: 38, calc(1 * 88.9%), 39%;
  --d8yl8: hsl(38.9, calc(1 * 98.8%), 33.9%);
  --d8yl8v: 38.9, calc(1 * 98.8%), 33.9%;
  --d8yl9: hsl(38.6, calc(1 * 98.7%), 30.6%);
  --d8yl9v: 38.6, calc(1 * 98.7%), 30.6%;
  --d8ylA: hsl(38.4, calc(1 * 98.6%), 27.1%);
  --d8ylAv: 38.4, calc(1 * 98.6%), 27.1%;
  --d8


econdary'.split():
            ds_grp_wm.createGroup(rs)
            ds_grp_rs = ds_grp_wm[rs]

            # create the new dimensions e.g., corrections/troposphere/GMAO/reference/latitudeMeta
            for dim in DIM_NAMES:
                # dimension may already exist if updating
                try:
                    ds_grp_rs.createDimension(dim, len(ds_slc.coords[dim]))
                    # necessary for transform
                    v = ds_grp_rs.createVariable(dim, np.float32, dim)
                    v[:] = ds_slc[dim]
                    v.setncatts(ds_slc[dim].attrs)

                except RuntimeError:
                    pass

            # add the projection if it doesnt exist
            try:
                v_proj = ds_grp_rs.createVariable('crs', 'i')
            except RuntimeError:
                v_proj = ds_grp_rs['crs']
            v_proj.setncatts(ds_slc['crs'].attrs)

            # update the actual tropo data
            for name in TROPO_NAMES:
                da = ds_slc[f'{rs}_{name}']
                nodata = da.encoding['_FillValue']
                chunksize = da.encoding['chunksizes']

                # in case updating
                try:
                    v = ds_grp_rs.createVariable(name, np.float32, DIM_NAMES, chunksizes=chunksize, fill_value=nodata)
                except RuntimeError:
                    v = ds_grp_rs[name]

                v[:] = da.data
                v.setncatts(da.attrs)

    logger.info('Updated %s group in: %s', os.path.basename(TROPO_GROUP), path_gunw)

def update_gunw_version(path_gunw: Path) -> None:
    """Temporary hack for updating version to test aria-tools."""
    with netCDF4.Dataset(path_gunw, mode='a') as ds:
        ds.version = '1c'

def tropo_gunw_slc(cube_paths: list[Path], path_gunw: Path, wavelength: float) -> xr.Dataset:
    """
    Compute and format the troposphere phase delay for GUNW from RAiDER outputs.

    Parameters
    ----------
    cube_filenames : list[Path]
        list with filename of delay cube for ref and sec date (netcdf)
    path_gunw : Path
        GUNW netcdf path
    wavelength : float
        Wavelength of SAR

    Returns:
    -------
    xr.Dataset
        Output cube that will be included in GUNW
    """
    ds_slc = compute_delays_slc(cube_paths, wavelength)

    # write the interferometric delay to disk
    update_gunw_slc(path_gunw, ds_slc)
    update_gunw_version(path_gunw)
    logger.info('Wrote slc delays to: %s', path_gunw)

    return ds_slc


ausa 10% do dano flamejante causado por você a inimigos como dano direto adicional.",
			"ruRU": "\"Огненный шар\" дополнительно наносит прямой урон, равный 10% примененного вами к противникам урона от горения.",
			"trTR": "Ateş Topu düşmanlara uyguladığın Yanma hasarının 10% kadarını ilave doğrudan hasar olarak verir.",
			"zhCN": "火球造成额外直接伤害, 数值相当于你已对敌人施加的燃烧伤害的 10%。",
			"zhTW": "火球會造成額外直接傷害,數值等同你對敵人所造成燃燒傷害的 10%。"
},
		id: 30,
		maxPoints: 1,
		x: -851.105,
		y: -424.01
	},
	"Destructive Fireball": {
		baseSkill: "Fireball",
		connections: [ "Enhanced Fireball" ],
		description: `Fireball's Critical Strike Damage is increased by +20%, increased to +30% when hitting at least 3 enemies.`,
		nameLocalized: {
			"deDE": "Zerstörerischer Feuerball",
			"esES": "Bola de fuego destructora",
			"esMX": "Bola de Fuego Destructiva",
			"frFR": "Boule de feu destructrice",
			"itIT": "Palla di Fuoco Distruttiva",
			"jaJP": "ファイアボール(破壊)",
			"koKR": "파괴적인 화염구",
			"plPL": "Destrukcyjna Kula Ognia",
			"ptBR": "Bola de Fogo Destrutiva",
			"ruRU": "Разрушительный огненный шар",
			"trTR": "Yıkıcı Ateş Topu",
			"zhCN": "毁灭火球",
			"zhTW": "毀滅火球"
},
		descriptionLocalized: {
			"deDE": "Der kritische Trefferschaden von Feuerball wird um +20% und auf +30% erhöht, wenn mindestens 3 Gegner getroffen werden.",
			"esES": "El daño de golpe crítico de Bola de fuego aumenta un +20%, que aumenta a un +30% cuando golpea a al menos 3 enemigos.",
			"esMX": "El daño de golpe crítico de Bola de Fuego aumenta en +20% y aumenta a +30% cuando golpea al menos a 3 enemigos.",
			"frFR": "Augmente les dégâts critiques de Boule de feu de +20%. Ce bonus passe à +30% si vous touchez au moins 3 adversaires.",
			"itIT": "I danni critici di Palla di Fuoco aumentano del +20%, aumentando al +30% quando si colpiscono almeno 3 nemici.",
			"jaJP": "〈ファイアボール〉のクリティカルヒットダメージが+20%増加し、3体以上の敵に命中すると+30%増加する。",
			"koKR": "화염구의 극대화 피해가 +20% 증가합니다. 최소 3마리 이상의 적에게 적중하면 이 극대화 피해가 +30%|1으로;로; 증가합니다.",
			"plPL": "Obrażenia od trafie


/*
 This Software is provided under the Zope Public License (ZPL) Version 2.1.

 Copyright (c) 2014 by the mingw-w64 project

 See the AUTHORS file for the list of contributors to the mingw-w64 project.

 This license has been certified as open source. It has also been designated
 as GPL compatible by the Free Software Foundation (FSF).

 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:

   1. Redistributions in source code must retain the accompanying copyright
      notice, this list of conditions, and the following disclaimer.
   2. Redistributions in binary form must reproduce the accompanying
      copyright notice, this list of conditions, and the following disclaimer
      in the documentation and/or other materials provided with the
      distribution.
   3. Names of the copyright holders must not be used to endorse or promote
      products derived from this software without prior written permission
      from the copyright holders.
   4. The right to distribute this software or to use it for any purpose does
      not give you the right to use Servicemarks (sm) or Trademarks (tm) of
      the copyright holders.  Use of them is covered by separate agreement
      with the copyright holders.
   5. If any files are modified, you must cause the modified files to carry
      prominent notices stating that you changed the files and the date of
      any change.

 Disclaimer

 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED
 OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT,
 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "softmath_private.h"

long double frexpl(long double x, int *exp)
{
    long double a;
    int i = 0;

    if (isnan(x) || isinf(x)) return x;
    if (x == 0.0)
    {
        if (exp) *exp = 0;
        return x;
    }

    a = fabsl(x);

    if (a >= 1)
        while (powl(2, i) < a) i++;
    else
        while (powl(2, i) > a) i--;

    if (a/powl(2, i) >= 1.0) i++;

    if (exp) *exp = i;
    return x/powl(2, i);
}


]|0;if((d|0)==114){nc=a+2|0;Ol(N,58592,1);d=lm(nc,b,N,c)|0;tl(N);d=(d|0)==(nc|0)?a:d;break a}else if((d|0)==111){nc=a+2|0;Ol(M,58584,2);d=lm(nc,b,M,c)|0;tl(M);d=(d|0)==(nc|0)?a:d;break a}else if((d|0)==82){nc=a+2|0;Ol(O,58600,2);d=lm(nc,b,O,c)|0;tl(O);d=(d|0)==(nc|0)?a:d;break a}else if((d|0)==110){d=nm(a,b,c)|0;break a}else{d=a;break a}}case 112:switch(i[H+1>>0]|0){case 109:{nc=a+2|0;Ol(l,58608,3);d=lm(nc,b,l,c)|0;tl(l);d=(d|0)==(nc|0)?a:d;break a}case 115:{nc=a+2|0;Ol(q,58616,1);d=mm(nc,b,q,c)|0;tl(q);d=(d|0)==(nc|0)?a:d;break a}case 76:{nc=a+2|0;Ol(p,58624,2);d=lm(nc,b,p,c)|0;tl(p);d=(d|0)==(nc|0)?a:d;break a}case 116:{if((W|0)<=2){d=a;break a}if((i[a>>0]|0)!=112){d=a;break a}if((i[a+1>>0]|0)!=116){d=a;break a}nc=a+2|0;e=Ql(nc,b,c)|0;if((e|0)==(nc|0)){d=a;break a}d=Ql(e,b,c)|0;if((d|0)==(e|0)){d=a;break a}h=c+4|0;e=k[h>>2]|0;if(((e-(k[c>>2]|0)|0)/24|0)>>>0<2){d=a;break a}Al(Da,e+-24|0);e=k[h>>2]|0;f=e+-24|0;g=e;do{a=g+-24|0;k[h>>2]=a;hl(a);g=k[h>>2]|0}while((g|0)!=(f|0));sl(e+-48|0,58808)|0;e=i[Da>>0]|0;if(!(e&1)){g=Da+1|0;e=(e&255)>>>1}else{g=k[Da+8>>2]|0;e=k[Da+4>>2]|0}jl((k[h>>2]|0)+-24|0,g,e)|0;tl(Da);break a}case 108:{nc=a+2|0;Ol(o,58616,1);d=lm(nc,b,o,c)|0;tl(o);d=(d|0)==(nc|0)?a:d;break a}case 112:{g=a+2|0;if((g|0)!=(b|0)?(i[g>>0]|0)==95:0){nc=a+3|0;Ol(P,58632,2);d=mm(nc,b,P,c)|0;tl(P);d=(d|0)==(nc|0)?a:d;break a}d=Ql(g,b,c)|0;if((d|0)==(g|0)){d=a;break a}g=k[c+4>>2]|0;if((k[c>>2]|0)==(g|0)){


ments without GPU",
            "openai_note": "Requires OpenAI API Key",
            "deepseek_preset": "DeepSeek Proxy Mode",
            "deepseek_desc": "Using DeepSeek API as proxy, suitable for environments without GPU",
            "deepseek_note": "Requires DeepSeek API Key",
            "glm4_preset": "GLM4 Local Mode",
            "glm4_desc": "Using local GLM4 model, requires GPU environment",
            "glm4_note": "Requires local model path configuration",
            "vllm_preset": "VLLM Local Mode",
            "vllm_desc": "Using VLLM framework to load local model, requires GPU environment",
            "vllm_note": "Requires local model path configuration",
            "llama_cpp_preset": "LLAMA_CPP Local Mode",
            "llama_cpp_desc": "Using LLAMA.cpp framework to load local model, can run on CPU but GPU recommended",
            "llama_cpp_note": 'Requires local model path configuration, for CUDA support set CMAKE_ARGS="-DGGML_CUDA=ON"',
            "ollama_preset": "Ollama Proxy Mode",
            "ollama_desc": "Using Ollama as proxy, suitable for environments without GPU",
            "ollama_note": "Requires Ollama API Base",
            "custom_preset": "Custom Mode",
            "custom_desc": "Manually select needed extras",
            "custom_note": "Suitable for advanced users",
        },
        "zh": {
            # Common
            "workspace_not_found": "未找到工作区根目录",
            "cannot_parse": "无法解析 {}: {}",
            "no_extras_defined": "没有定义 extras",
            "no_extras_found": "未找到工作区或没有可选依赖。",
            "operation_canceled": "操作已取消。",
            "available_packages": "可用的包: {}",
            "copy_command": "请复制上面的命令到终端执行。如需更多帮助，请运行：",
            "finished": "完成！",
            # Description of the CLI command
            "cli_description": "UV Workspace Extras Helper - 管理UV工作区的可选依赖",
            "list_cmd_description": "列出工作区中的所有extras",
            "install_cmd_description": "生成安装extras的命令",
            "deploy_cmd_description": "使用预设的部署方案",
            # Option descriptions
            "verbose_option": "显示详细依赖信息",
            "interactive_option": "交互式引导生成安装命令",
            "all_option": "生成安装所有extras的命令",
            "china_option": "使用清华pip镜像源加速安装",
            "preset_option": "使用预设的部署方案",
            "list_presets_option": "列出所有预设部署方案",
            "language_option": "指定语言 (en/zh)",
            # List command
            "extras_in_workspace": "工作区中的可选依赖 (extras):\n",
            "available_extras": "可用的 extras:",
            "dependencies": "个依赖",
            # Installation command
            "install_all_extras": "# 安装所有可选功能:",
            "install_extras_for": "# 安装 {} 的 {} 功能:",
            "package_not_in_workspace": "错误: 包 '{}' 不在工作区中或没有定义extras。",
            "package_no_extras": "包 '{}' 没有定义extras。",
            "extra_not_in_package": "错误: 包 '{}' 中没有名为 '{}' 的extra。",
            "available_extras_in_package": "可用的extras: {}",
            # Interactive installation
            "welcome": "欢迎使用 DB-GPT 安装引导助手！",
            "help_message": "这个工具将帮助你生成正确的安装命令。\n",
            "select_mode": "请选择安装模式",
            "select_extras": "请选择需要安装的extras（空格选择/取消，回车确认）",
            "installation_info": "📋 安装信息",
            "selected_mode": "📦 选择的模式: {}",
            "description": "📝 描述: {}",
            "note": "ℹ  注意事项: {}",
            "will_install": "🧩 将安装以下extras: {}",
            "config_file": "⚙  配置文件: {}",
            "generate_command": "是否生成安装命令？",
            "installation_command": "🚀 安装命令",
            "startup_command": "🏃 启动命令",
            "further_configuration": "⚠  后续配置",
            "set_api_key": "请确保在配置文件 {} 中设置了正确的API Key",
            "set_model_path": "请确保在配置文件 {} 中设置了正确的模型路径",
            # Deployment command
            "available_presets": "可用的部署预设:",
            "specify_preset": "请指定部署预设名称，或使用 --list 查看所有预设",
            "preset_not_found": "错误: 未找到预设 '{}'",
            "available_presets_list": "可用的预设: {}",
            "using_preset": "使用预设 '{}' 生成部署命令",
            # Preset descriptions
            "openai_preset": "OpenAI 代理模式",
            "openai_desc": "使用OpenAI API作为代理，适合无GPU环境",
            "openai_note": "需要提供OpenAI API Key",
            "deepseek_preset": "DeepSeek 代理模式",
            "deepseek_desc": "使用DeepSeek API作为代理，适合无GPU环境",
            "deepseek_note": "需要提供DeepSeek API Key",
            "glm4_preset": "GLM4 本地模式",
            "glm4_desc": "使用本地GLM4模型，需要GPU环境",
            "glm4_note": "需要配置本地模型路径",


.hword  0x1cb6 @ add r6, r6, #0x2
	.hword  0x1ca4 @ add r4, r4, #0x2
	.hword  0x1cad @ add r5, r5, #0x2
	cmp     r7, #0x10
	blt     branch_222c53a
	ldr     r0, [sp, #0x18]
	add     r0, #0x20
	str     r0, [sp, #0x18]
	ldr     r0, [sp, #0x24]
	.hword  0x1c40 @ add r0, r0, #0x1
	str     r0, [sp, #0x24]
	ldr     r0, [sp, #0x1c]
	cmp     r0, #0x1
	beq     branch_222c586
	mov     r0, #0x3
	ldr     r1, [sp, #0x20]
	lsl     r0, r0, #8
	add     r1, r1, r0
	mov     r0, #0x1
	lsl     r0, r0, #12
	str     r1, [sp, #0x20]
	cmp     r1, r0
	blt     branch_222c518
	str     r0, [sp, #0x20]
	mov     r0, #0x1
	str     r0, [sp, #0x1c]
	b       branch_222c518
@ 0x222c586

.thumb
branch_222c586: @ 222c586 :thumb
	ldr     r0, [sp, #0x14]
	add     r0, #0x20
	str     r0, [sp, #0x14]
	ldr     r0, [sp, #0x28]
	.hword  0x1c40 @ add r0, r0, #0x1
	str     r0, [sp, #0x28]
	cmp     r0, #0x3
	blt     branch_222c506
	mov     r1, #0x4b
	ldr     r0, [sp, #0x10]
	lsl     r1, r1, #2
	add     r0, r0, r1
	mov     r1, #0x2a
	lsl     r1, r1, #4
	blx     DC_FlushRange
	ldr     r0, [sp, #0x10]
	mov     r1, #0x1
	add     r0, #0xa8
	str     r1, [r0, #0x0]
	ldr     r1, [sp, #0x10]
	ldr     r0, [pc, #0x18] @ 0x222c5cc, (=0x222c5d1)
	add     r1, #0xa4
	mov     r2, #0x14
	bl      AddTaskToTaskList2
	ldr     r1, [sp, #0x10]
	add     r1, #0xa4
	str     r0, [r1, #0x0]
	ldr     r0, [sp, #0x2c]
	str     r1, [sp, #0x10]
	bl      Call_FS_CloseFile
	add     sp, #0x3c
	pop     {r4-r7,pc}
@ 0x222c5cc

.word 0x222c5d1 @ 0x222c5cc
.thumb
Function_222c5d0: @ 222c5d0 :thumb
	push    {r4,lr}
	mov     r4, r1
	ldr     r0, [r4, #0x4]
	cmp     r0, #0x0
	beq     branch_222c658
	ldr     r0, [pc, #0x80] @ 0x222c65c, (=0x3


risp-edges",status:"unoff",links:[{url:"https://developer.mozilla.org/en-US/docs/Web/CSS/image-rendering",title:"MDN article"},{url:"http://updates.html5rocks.com/2015/01/pixelated",title:"HTML5Rocks article"}],categories:["CSS","CSS3"],stats:{ie:{5.5:"n",6:"n",7:"a x #2",8:"a x #2",9:"a x #2",10:"a x #2",11:"a x #2",TP:"a x #2"},firefox:{2:"n",3:"n",3.5:"n",3.6:"y x #3",4:"y x #3",5:"y x #3",6:"y x #3",7:"y x #3",8:"y x #3",9:"y x #3",10:"y x #3",11:"y x #3",12:"y x #3",13:"y x #3",14:"y x #3",15:"y x #3",16:"y x #3",17:"y x #3",18:"y x #3",19:"y x #3",20:"y x #3",21:"y x #3",22:"y x #3",23:"y x #3",24:"y x #3",25:"y x #3",26:"y x #3",27:"y x #3",28:"y x #3",29:"y x #3",30:"y x #3",31:"y x #3",32:"y x #3",33:"y x #3",34:"y x #3",35:"y x #3",36:"y x #3",37:"y x #3",38:"y x #3",39:"y x #3",40:"y x #3"},chrome:{4:"n",5:"n",6:"n",7:"n",8:"n",9:"n",10:"n",11:"n",12:"n",13:"n",14:"n",15:"n",16:"n",17:"n",18:"n",19:"n",20:"n",21:"n",22:"n",23:"n",24:"n",25:"n",26:"n",27:"n",28:"n",29:"n",30:"n",31:"n",32:"n",33:"n",34:"n",35:"n",36:"n",37:"n",38:"n",39:"n",40:"n",41:"y #4",42:"y #4",43:"y #4",44:"y #4"},safari:{3.1:"n",3.2:"n",4:"n",5:"n",5.1:"n",6:"a x #1",6.1:"y x #3",7:"y x #3",7.1:"y x #3",8:"y x #3"},opera:{9:"n","9.5-9.6":"n","10.0-10.1":"n",10.5:"n",10.6:"n",11:"n",11.1:"n",11.5:"n",11.6:"y x #3",12:"y x #3",12.1:"y x #3",15:"n",16:"n",17:"n",18:"n",19:"n",20:"n",21:"n",22:"n",23:"n",24:"n",25:"n",26:"n",27:"n",28:"y #4",29:"y #4"},ios_saf:{3.2:"n","4.0-4.1":"n","4.2-4.3":"n","5.0-5.1":"a x #1","6.0-6.1":"a x #1","7.0-7.1":"y x #3",8:"y x #3","8.1-8.3":"y x #3"},op_mini:{"5.0-8.0":"n"},android:{2.1:"n",2.2:"n",2.3:"n",3:"n",4:"n",4.1:"n","4.2-4.3":"n",4.4:"n","4.4.3-4.4.4":"n",40:"n"},bb:{7:"n",10:"a x #1"},op_mob:{10:"n",11:"n",11.1:"n",11.5:"n",12:"y x #3",12.1:"y x #3",24:"n"},and_chr:{41:"y #4"},and_ff:{36:"y


}

	// If verify is requested, show verification output
	if shouldVerify {
		fmt.Fprintf(out, "Verifying plugin signature...\n")
	}

	// Install the plugin with options
	verifyResult, err := installer.InstallWithOptions(i, opts)
	if err != nil {
		return err
	}

	// If verification was successful, show the details
	if verifyResult != nil {
		for _, signer := range verifyResult.SignedBy {
			fmt.Fprintf(out, "Signed by: %s\n", signer)
		}
		fmt.Fprintf(out, "Using Key With Fingerprint: %s\n", verifyResult.Fingerprint)
		fmt.Fprintf(out, "Plugin Hash Verified: %s\n", verifyResult.FileHash)
	}

	slog.Debug("loading plugin", "path", i.Path())
	p, err := plugin.LoadDir(i.Path())
	if err != nil {
		return fmt.Errorf("plugin is installed but unusable: %w", err)
	}

	if err := runHook(p, plugin.Install); err != nil {
		return err
	}

	fmt.Fprintf(out, "Installed plugin: %s\n", p.Metadata().Name)
	return nil
}
/*
Copyright The Helm Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package cmd

import (
	"fmt"
	"io"

	"github.com/gosuri/uitable"
	"github.com/spf13/cobra"

	"helm.sh/helm/v4/pkg/cli/output"
	"helm.sh/helm/v4/pkg/cmd/require"
	"helm.sh/helm/v4/pkg/repo/v1"
)

func newRepoListCmd(out io.Writer) *cobra.Command {
	var outfmt output.Format
	cmd := &cobra.Command{
		Use:               "list",
		Aliases:           []string{"ls"},
		Short:             "list chart repositories",
		Args:              require.NoArgs,
		ValidArgsFunction: noMoreArgsCompFunc,
		RunE: func(cmd *cobra.Command, _ []string) error {
			// The error is silently ignored. If no repository file exists, it cannot be loaded,
			// or the file isn't the right format to be parsed the error is ignored. The
			// repositories will be 0.
			f, _ := repo.LoadFile(settings.RepositoryConfig)
			if len(f.Repositories) == 0 && outfmt != output.JSON && outfmt != output.YAML {
				fmt.Fprintln(cmd.ErrOrStderr(), "no repositories to show")
				return nil
			}

			return outfmt.Write(out, &repoListWriter{f.Repositories})
		},
	}

	bindOutputFlag(cmd, &outfmt)

	return cmd
}

type repositoryElement struct {
	Name string `json:"name"`
	URL  string `json:"url"`
}

type repoListWriter struct {
	repos []*repo.Entry
}

func (r *repoListWriter) WriteTable(out io.Writer) error {
	table := uitable.New()
	table.AddRow("NAME", "URL")
	for _, re := range r.repos {
		table.AddRow(re.Name, re.URL)
	}
	return output.EncodeTable(out, table)
}

func (r *repoListWriter) WriteJSON(out io.Writer) error {
	return r.encodeByFormat(out, output.JSON)
}

func (r *r


butes::FeatureMap::Id;
} // namespace FeatureMap

namespace ClusterRevision {
static constexpr AttributeId Id = Globals::Attributes::ClusterRevision::Id;
} // namespace ClusterRevision

} // namespace Attributes
} // namespace FaultInjection

namespace SampleMei {
namespace Attributes {

namespace FlipFlop {
static constexpr AttributeId Id = 0x00000000;
} // namespace FlipFlop

namespace GeneratedCommandList {
static constexpr AttributeId Id = Globals::Attributes::GeneratedCommandList::Id;
} // namespace GeneratedCommandList

namespace AcceptedCommandList {
static constexpr AttributeId Id = Globals::Attributes::AcceptedCommandList::Id;
} // namespace AcceptedCommandList

namespace EventList {
static constexpr AttributeId Id = Globals::Attributes::EventList::Id;
} // namespace EventList

namespace AttributeList {
static constexpr AttributeId Id = Globals::Attributes::AttributeList::Id;
} // namespace AttributeList

namespace FeatureMap {
static constexpr AttributeId Id = Globals::Attributes::FeatureMap::Id;
} // namespace FeatureMap

namespace ClusterRevision {
static constexpr AttributeId Id = Globals::Attributes::ClusterRevision::Id;
} // namespace ClusterRevision

} // namespace Attributes
} // namespace SampleMei

} // namespace Clusters
} // namespace app
} // namespace chip


put_shape[2]

        # Preprocess the image data
        img_data = self.preprocess()
        img_data = img_data
        # img_data = img_data.cpu().numpy()
        # Set the input tensor to the interpreter
        print(input_details[0]["index"])
        print(img_data.shape)
        img_data = img_data.transpose((0, 2, 3, 1))

        scale, zero_point = input_details[0]["quantization"]
        interpreter.set_tensor(input_details[0]["index"], img_data)

        # Run inference
        interpreter.invoke()

        # Get the output tensor from the interpreter
        output = interpreter.get_tensor(output_details[0]["index"])
        scale, zero_point = output_details[0]["quantization"]
        output = (output.astype(np.float32) - zero_point) * scale

        output[:, [0, 2]] *= img_width
        output[:, [1, 3]] *= img_height
        print(output)
        # Perform post-processing on the outputs to obtain output image.
        return self.postprocess(self.img, output)

if __name__ == "__main__":
    # Create an argument parser to handle command-line arguments
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model", type=str, default="yolov8n_full_integer_quant.tflite", help="Input your TFLite model."
    )
    parser.add_argument("--img", type=str, default=str(ASSETS / "bus.jpg"), help="Path to input image.")
    parser.add_argument("--conf-thres", type=float, default=0.5, help="Confidence threshold")
    parser.add_argument("--iou-thres", type=float, default=0.5, help="NMS IoU threshold")
    args = parser.parse_args()

    # Create an instance of the Yolov8TFLite class with the specified arguments
    detection = Yolov8TFLite(args.model, args.img, args.conf_thres, args.iou_thres)

    # Perform object detection and obtain the output image
    output_image = detection.main()

    # Display the output image in a window
    cv2.imshow("Output", output_image)

    # Wait for a key press to exit
    cv2.waitKey(0)


rsons/test0/${id}
        returnRowDeleted=dataSource.getPerson2DAO().deleteRaw3ForContentProvider(uri, selection, selectionArgs);
        break;
      }
      case PATH_PERSON_9_INDEX: {
        // URI: content://sqlite.feature.contentprovider.kripton35.nolog/persons/test1/${bean.id}
        returnRowDeleted=dataSource.getPerson2DAO().deleteBean4ForContentProvider(uri, selection, selectionArgs);
        break;
      }
      default: {
        throw new IllegalArgumentException("Unknown URI for DELETE operation: " + uri);
      }
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return returnRowDeleted;
  }

  @Override
  public String getType(Uri uri) {
    switch (sURIMatcher.match(uri)) {
      case PATH_CITY_1_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.city";
      }
      case PATH_CITY_2_INDEX: {
        return "vnd.android.cursor.dir/vnd.sqlite.feature.contentprovider.kripton35.nolog.city";
      }
      case PATH_PERSON_3_INDEX: {
        return "vnd.android.cursor.dir/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_4_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_5_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_6_INDEX: {
        return "vnd.android.cursor.dir/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_7_INDEX: {
        return "vnd.android.cursor.dir/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_8_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_9_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_10_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_11_INDEX: {
        return "vnd.android.cursor.dir/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
      case PATH_PERSON_12_INDEX: {
        return "vnd.android.cursor.item/vnd.sqlite.feature.contentprovider.kripton35.nolog.person";
      }
    }
    throw new IllegalArgumentException("Unknown URI for getType operation: " + uri);
  }
}
/*
 * Copyright 2017, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package sqlite.feature.custombean.


hat-messagebox {
  padding: 20px;
  border-top-color: #e0e0e0;
  gap: 20px;
}
.dx-chat-messagebox-input-container {
  gap: 8px;
}
.dx-chat-messagebox-textarea.dx-textarea.dx-texteditor {
  border-radius: 4px;
}
.dx-chat-messagebox-button {
  margin-bottom: 2px;
}
.dx-chat-messagebubble {
  padding: 8px 12px;
  border-radius: 12px;
}
.dx-chat-messagebubble.dx-chat-messagebubble-deleted .dx-chat-messagebubble-content {
  gap: 4px;
  line-height: 20px;
}
.dx-chat-messagebubble.dx-chat-messagebubble-deleted .dx-chat-messagebubble-content .dx-icon {
  font-size: 20px;
}
.dx-chat-messagegroup-alignment-start .dx-chat-messagebubble {
  color: #242424;
  background-color: #f5f5f5;
}
.dx-chat-messagegroup-alignment-start .dx-chat-messagebubble:first-child {
  border-start-start-radius: 12px;
}
.dx-chat-messagegroup-alignment-start .dx-chat-messagebubble:last-child {
  border-end-start-radius: 12px;
}
.dx-chat-messagegroup-alignment-end .dx-chat-messagebubble {
  color: #242424;
  background-color: #ebf3fc;
}
.dx-chat-messagegroup-alignment-end .dx-chat-messagebubble:first-child {
  border-start-end-radius: 12px;
}
.dx-chat-messagegroup-alignment-end .dx-chat-messagebubble:last-child {
  border-end-end-radius: 12px;
}
.dx-chat-messagegroup {
  row-gap: 4px;
  padding-bottom: 24px;
}
.dx-chat-messagegroup:first-child {
  padding-top: 24px;
}
.dx-chat-messagegroup-alignment-start:has(.dx-avatar) {
  -moz-column-gap: 12px;
  column-gap: 12px;
}
.dx-chat-messagegroup-author-name,
.dx-chat-messagegroup-time {
  font-size: 12px;
  color: #707070;
}
.dx-chat-message-edited {
  font-size: 12px;
  color: #707070;
  -moz-column-gap: 2px;
  column-gap: 2px;
}
.dx-chat-message-edited .dx-chat-message-edited-icon {
  font: 12px/12px DXIcons;
  width: 12px;
  height: 12px;
  background-position: 0 0;
  background-size: 12px 12px;
  padding: 0;
  text-align: center;
}
.dx-chat-message-edited .dx-chat-message-edited-icon::before {
  content: "\f023";
}
.dx-chat-messagelist-empty-view {
  row-gap: 4px;
  padding-block: 20px;
}
.dx-chat-messagelist-empty-image {
  color: #b3b3b3;
  background-color: #f5f5f5;
  padding: 12px;
  margin-bottom: 12px;
}
.dx-chat-messagelist-empty-image::before {
  content: "\f17e";
  font-size: 40px;
}
.dx-chat-messagelist-empty-message {
  font-size: 18px;
  color: #242424;
}
.dx-chat-messagelist-empty-prompt {
  font-size: 14px;
  color: #616161;
}
.dx-chat-messagelist > .dx-scrollable > .dx-scrollable-wrapper > .dx-scroll


buff_sticker":2794,"c5":"553435147"},"Sticker | suNny (Foil) | Boston 2018":{"buff":41898,"uu":55094,"buff_sticker":2795,"c5":"553463809"},"Sticker | suNny (Foil) | Krakow 2017":{"buff":41899,"uu":51603,"buff_sticker":2796,"c5":"553436040"},"Sticker | suNny (Gold) | Krakow 2017":{"buff":41900,"uu":56638,"buff_sticker":2797,"c5":"553438076"},"Sticker | suNny | Boston 2018":{"buff":41901,"uu":55287,"buff_sticker":2798,"c5":"553463399"},"Sticker | suNny | Krakow 2017":{"buff":41902,"uu":48846,"buff_sticker":2799,"c5":"553435049"},"Sticker | tabseN (Foil) | Boston 2018":{"buff":41903,"uu":48716,"buff_sticker":2800,"c5":"553463409"},"Sticker | tabseN (Foil) | Krakow 2017":{"buff":41904,"uu":54246,"buff_sticker":2801,"c5":"553434968"},"Sticker | tabseN (Gold) | Boston 2018":{"buff":41905,"uu":100971,"buff_sticker":2802,"c5":"553465390"},"Sticker | tabseN (Gold) | Krakow 2017":{"buff":41906,"uu":56929,"buff_sticker":2803,"c5":"553439263"},"Sticker | tabseN | Boston 2018":{"buff":41907,"uu":55802,"buff_sticker":2804,"c5":"553463383"},"Sticker | tabseN | Krakow 2017":{"buff":41908,"uu":50818,"buff_sticker":2805,"c5":"553434957"},"Sticker | tarik (Foil) | Atlanta 2017":{"buff":41909,"uu":100789,"buff_sticker":2806,"c5":"530094973"},"Sticker | tarik (Foil) | Boston 2018":{"buff":41910,"uu":55630,"buff_sticker":2807,"c5":"553463557"},"Sticker | tarik (Foil) | Cluj-Napoca 2015":{"buff":41911,"uu":55365,"buff_sticker":2808,"c5":"26428"},"Sticker | tarik (Foil) | Cologne 2015":{"buff":41912,"uu":57411,"buff_sticker":2809,"c5":"23857"},"Sticker | tarik (Foil) | Cologne 2016":{"buff":41913,"uu":58181,"buff_sticker":2810,"c5":"5884701"},"Sticker | tarik (Foil) | MLG Columbus 2016":{"buff":41914,"uu":57023,"buff_sticker":2811,"c5":"27535"},"Sticker | tarik (Gold) | Boston 2018":{"buff":41915,"uu":56938,"buff_sticker":2812,"c5":"553463789"},"Sticker | tarik | Atlanta 2017":{"buff":41916,"uu":55423,"buff_sticker":2813,"c5":"500948451"},"Sticker | tarik | Boston 2018":{"buff":41917,"uu":53544,"buff_sticker":2814,"c5":"553463560"},"Sticker | tarik | Cluj-Napoca 2015":{"buff":41918,"uu":58094,"buff_sticker":2815,"c5":"26054"},"Sticker | tarik | Cologne 2015":{"buff":41919,"uu":57499,"buff_sticker":2816,"c5":"22822"},"Sticker | tarik | Cologne 2016":{"buff":41920,"uu":100855,"buff_sticker":2817,"c5":"75984185"},"Sticker | tarik | MLG Columbus 2016":{"buff":41921,"uu":53671,"buff_sticker":2818,"c5":"27846"},"Sticker | tenzki (Foil) | Cluj-Napoca 2015":{"buff":41922,"uu":58419,"buff_sticker":2819,"c5":"22925"},"Sticker


fs = require 'bee.filesystem'
local subprocess = require 'bee.subprocess'

local root = fs.ydwe_devpath()

local wave = {}
wave.path          = fs.ydwe_devpath() / "compiler" / "wave"
wave.sysinclude    = fs.ydwe_devpath() / "compiler" / "include"

-- 预处理代码
-- op.input - 输入文件路径
-- op.option - 预处理选项，table，支持的值有
-- 	runtime_version - 表示魔兽版本
-- 	enable_jasshelper_debug - 布尔值，是否是调试模式
-- 返回：number, info, path - 子进程返回值；预处理输出信息；输出文件路径
function wave:do_compile(op)
	local args = {}
	args[#args+1] = (self.path / "Wave.exe"):string()
	args[#args+1] = string.format('--output=%s',     op.output:string())
	args[#args+1] = string.format('--sysinclude=%s', self.sysinclude:string())
	args[#args+1] = string.format('--include=%s',    op.map_path:parent_path():string())
    for _, path in ipairs(require 'ui') do
        if fs.exists(path / 'jass') then
            args[#args+1] = string.format('--include=%s',    (path / 'jass'):string())
        end
    end
	args[#args+1] = string.format('--define=WARCRAFT_VERSION=%d', 100 + op.option.runtime_version)
	args[#args+1] = string.format('--define=YDWE_VERSION_STRING=\"%s\"', tostring(ydwe_version))
	if op.option.enable_jasshelper_debug then
		args[#args+1] = '--define=DEBUG=1'
	end
	if tonumber(global_config["ScriptInjection"]["Option"]) == 0 then
		args[#ar


'''tzinfo timezone information for Brazil/DeNoronha.'''
from pytz.tzinfo import DstTzInfo
from pytz.tzinfo import memorized_datetime as d
from pytz.tzinfo import memorized_ttinfo as i

class DeNoronha(DstTzInfo):
    '''Brazil/DeNoronha timezone definition. See datetime.tzinfo for details'''

    zone = 'Brazil/DeNoronha'

    _utc_transition_times = [
d(1,1,1,0,0,0),
d(1914,1,1,2,9,40),
d(1931,10,3,13,0,0),
d(1932,4,1,1,0,0),
d(1932,10,3,2,0,0),
d(1933,4,1,1,0,0),
d(1949,12,1,2,0,0),
d(1950,4,16,2,0,0),
d(1950,12,1,2,0,0),
d(1951,4,1,1,0,0),
d(1951,12,1,2,0,0),
d(1952,4,1,1,0,0),
d(1952,12,1,2,0,0),
d(1953,3,1,1,0,0),
d(1963,12,9,2,0,0),
d(1964,3,1,1,0,0),
d(1965,1,31,2,0,0),
d(1965,3,31,1,0,0),
d(1965,12,1,2,0,0),
d(1966,3,1,1,0,0),
d(1966,11,1,2,0,0),
d(1967,3,1,1,0,0),
d(1967,11,1,2,0,0),
d(1968,3,1,1,0,0),
d(1985,11,2,2,0,0),
d(1986,3,15,1,0,0),
d(1986,10,25,2,0,0),
d(1987,2,14,1,0,0),
d(1987,10,25,2,0,0),
d(1988,2,7,1,0,0),
d(1988,10,16,2,0,0),
d(1989,1,29,1,0,0),
d(1989,10,15,2,0,0),
d(1990,2,11,1,0,0),
d(1999,10,3,2,0,0),
d(2000,2,27,1,0,0),
d(2000,10,8,2,0,0),
d(2000,10,15,1,0,0),
d(2001,10,14,2,0,0),
d(2002,2,17,1,0,0),
        ]

    _transition_info = [
i(-7800,0,'LMT'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
i(-3600,3600,'FNST'),
i(-7200,0,'FNT'),
        ]

DeNoronha = DeNoronha()


px;color:white;float:left;font-size:120%;height:32px;line-height:32px;margin-left:4px;margin-right:4px;overflow:hidden;text-align:center;width:32px}.AppRtl .cui-ctl-initials{float:right}.cui-separator{background-color:#c6c6c6;cursor:default;display:inline-block;height:16px;margin:7px 7px 0;vertical-align:top;width:1px}.cui-singlerowlayout .cui-separator{margin:5px 7px 0}.cui-cb,.cui-cb *,.cui-dd,.cui-dd *,.cui-sb,.cui-sb *,.cui-spn,.cui-spn *,.cui-tb,.cui-tb *{-ms-touch-action:none;touch-action:none}.cui-cb,.cui-dd,.cui-sb,.cui-spn{display:inline-block;margin:0 1px;white-space:nowrap}.cui-touch .cui-cb,.cui-touch .cui-dd,.cui-touch .cui-spn,.cui-touch .cui-tb{vertical-align:top}.cui-tb{display:inline-block;margin:8px 1px;white-space:nowrap}.cui-cb-input,.cui-sb-input,.cui-spn-txtbx,.cui-txtbx{background-color:#ffffff;color:#444444;cursor:text}.cui-dd-text{cursor:default}.cui-spn-txtbx,.cui-txtbx{autocomplete:off}.cui-cb-input,.cui-dd-text,.cui-sb-input,.cui-spn-txtbx,.cui-txtbx{-webkit-appearance:none;background-color:#ffffff;border:1px solid #e1e1e1;-webkit-border-radius:0;border-right-width:0;color:#444444;display:block;float:left;font:inherit;height:16px;overflow:hidden;padding:2px;white-space:nowrap;width:48px}.cui-txtbx{border-right-width:1px}.cui-txtbx.cui-txtbx-multiline{resize:none;white-space:normal}.cui-tb .cui-ctl-largelabel,.cui-tb .cui-ctl-mediumlabel,.cui-tb .cui-ctl-smalllabel{display:block}.cui-sb-input{background-color:#ffffff;border:1px solid #ffffff;padding:1px 1px 1px 4px!important;text-overflow:ellipsis}.cui-sb-input.tellme-flight{background-color:transparent;border:1px solid transparent;padding:1px SEARCHBOX_RIGHTINPUT_PADDING 1px 1px!important;text-overflow:ellipsis}.AppRtl .cui-cb-input,.AppRtl .cui-dd-text,.AppRtl .cui-spn-txtbx,.AppRtl .cui-txtbx{border-left-width:0;border-right-width:1px;float:right}.AppRtl .cui-txtbx{border-left-width:1px}.AppRtl .cui-sb-input{float:right;padding:1px 4px 1px 1px!important}.cui-touch .cui-spn-txtbx,.cui-touch .cui-txtbx{border-left-width:1px;border-right-width:1px;width:90px}.cui-dd-arrow-button,.cui-sb-image-button,.cui-spn-arwbx{border:1px solid #e1e1e1;border-left-width:0;cursor:default;display:block;float:left;height:20px}.cui-sb-image-button{background-color:#ffffff;border-color:#ffffff;height:16px;padding:1px 0}.tellme-flight.cui-sb-image-button{background-color:transparent;border-color:transparent;border-left-width:1px;border-right-width:1px}span.sb-img{float:right!important}.AppRtl .cui-dd-arrow-button,.AppRtl .cui-sb-image


px padding */
  max-width: 430px;
  /* 456px - 2px border - 24px padding */
  min-height: 16px;
  /* 44px - 2px border - 24px padding */
  max-height: 730px;
  /* 758px - 2px border - 24px padding */
  width: auto;
  height: auto;
  word-wrap: break-word;
  overflow: auto;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.333;
}
.win-flyout.win-leftalign {
  margin-left: 0;
}
.win-flyout.win-rightalign {
  margin-right: 0;
}
.win-flyout.win-scrolls {
  overflow: auto;
}
@media (max-width: 464px) {
  .win-flyout {
    max-width: calc(100% - 34px);
    /* 100% - 8px margin - 2px border - 24px padding */
  }
}
/*
Menu control.
*/
.win-menu {
  padding: 0;
  line-height: 33px;
  text-align: left;
  /* Set explicitly in case our parent has different alignment, like appbar overflow. */
  min-height: 42px;
  /* 44px - 2px border */
  max-height: calc(100% - 26px);
  min-width: 134px;
  /* 136px - 2px border */
  max-width: 454px;
  /* 456px - 2px border */
}
/*
Menu commands.
*/
.win-menu button.win-command {
  display: block;
  margin-left: 0;
  margin-right: 0;
  text-align: left;
  width: 100%;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.333;
}
.win-menu button.win-command:focus {
  outline: none;
}
.win-menu button.win-command .win-menucommand-liner {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -ms-flex-direction: row;
  -webkit-flex-direction: row;
  flex-direction: row;
  -ms-flex-wrap: none;
  -webkit-flex-wrap: nowrap;
  flex-wrap: nowrap;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  width: 100%;
  position: relative;
}
.win-menu button.win-command .win-menucommand-liner .win-toggleicon,
.win-menu button.win-command .win-menucommand-liner .win-flyouticon {
  -ms-flex: 0 0 auto;
  -webkit-flex: 0 0 auto;
  flex: 0 0 auto;
  display: none;
  visibility: hidden;
  font-size: 16px;
  font-family: "Segoe MDL2 Assets", "Symbols";
}
.win-menu button.win-command .win-menucommand-liner .win-toggleicon {
  margin-left: 12px;
}
.win-menu button.win-command .win-menucommand-liner .win-toggleicon::before {
  content: "\E0E7";
}
.win-menu button.win-command .win-menucommand-liner .win-flyouticon {
  margin-left: 12px;
  margin-right: 16px;
}
.win-menu button.win-command .win-menucommand-liner .win-flyouticon::before {
  content: "\E26B";
}
.win-menu button.win-command .win-menucommand-liner .win-label {
  -ms-flex: 1 1 auto;
  -webkit-flex: 1 1 auto;
  flex: 1 1 auto;
  font-size: 15px;
  line-height: inherit;
  min-width: 112px;
  max-width: none;
  white-space: nowrap;
  text-overflow: clip


YesnoTypes",2);
        PageUtils pageUtils = shangpinOrderService.queryPage(params1);
        List<ShangpinOrderView> orderViewsList =(List<ShangpinOrderView>)pageUtils.getList();
        Map<Integer,Integer> typeMap=new HashMap<>();//购买的类型list
        for(ShangpinOrderView orderView:orderViewsList){
            Integer shangpinTypes = orderView.getShangpinTypes();
            if(typeMap.containsKey(shangpinTypes)){
                typeMap.put(shangpinTypes,typeMap.get(shangpinTypes)+1);
            }else{
                typeMap.put(shangpinTypes,1);
            }
        }
        List<Integer> typeList = new ArrayList<>();//排序后的有序的类型 按最多到最少
        typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey()));//排序
        Integer limit = Integer.valueOf(String.valueOf(params.get("limit")));
        for(Integer type:typeList){
            Map<String, Object> params2 = new HashMap<>(params);params2.put("shangpinTypes",type);
            params2.put("shangxiaTypes",1);
            params2.put("shangpinYesnoTypes",2);
            PageUtils pageUtils1 = shangpinService.queryPage(params2);
            List<ShangpinView> shangpinViewList =(List<ShangpinView>)pageUtils1.getList();
            returnShangpinViewList.addAll(shangpinViewList);
            if(returnShangpinViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环
        }
        params.put("shangxiaTypes",1);
        params.put("shangpinYesnoTypes",2);
        //正常查询出来商品,用于补全推荐缺少的数据
        PageUtils page = shangpinService.queryPage(params);
        if(returnShangpinViewList.size()<limit){//返回数量还是小于要求数量
            int toAddNum = limit - returnShangpinViewList.size();//要添加的数量
            List<ShangpinView> shangpinViewList =(List<ShangpinView>)page.getList();
            for(ShangpinView shangpinView:shangpinViewList){
                Boolean addFlag = true;
                for(ShangpinView returnShangpinView:returnShangpinViewList){
                    if(returnShangpinView.getId().intValue() ==shangpinView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品
                }
                if(addFlag){
                    toAddNum=toAddNum-1;
                    returnShangpinViewList.add(shangpinView);
                    if(toAddNum==0) break;//够数量了
                }
            }
        }else {
            returnShangpinViewList = returnShangpinViewList.subList(0, limit);
        }

        for(ShangpinView c:returnShangpinViewList)
            dictionaryService.dictionaryConvert(c, request);
        page.setList(returnShangpinViewList);
        return R.ok().put("data", page);
    }

    /**
    * 前端列表
    */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));

        CommonUtil.checkMap(params);
        PageUtils page = shangpinService.queryPage(params);

        //字典表数据转换
        List<ShangpinView> list =(List<ShangpinView>)page.getList


FA0 8C63A7C4 */  lw    $v1, %lo(D_8004A7C4)($v1)
/* 0511F4 800A8FA4 00075C02 */  srl   $t3, $a3, 0x10
/* 0511F8 800A8FA8 000B6080 */  sll   $t4, $t3, 2
/* 0511FC 800A8FAC 8C780000 */  lw    $t8, ($v1)
/* 051200 800A8FB0 3C0D800D */  lui   $t5, 0x800d
/* 051204 800A8FB4 01AC6821 */  addu  $t5, $t5, $t4
/* 051208 800A8FB8 8DAD00C4 */  lw    $t5, 0xc4($t5)
/* 05120C 800A8FBC 30EEFFFF */  andi  $t6, $a3, 0xffff
/* 051210 800A8FC0 3C01800E */  lui   $at, 0x800e
/* 051214 800A8FC4 00184080 */  sll   $t0, $t8, 2
/* 051218 800A8FC8 000E7880 */  sll   $t7, $t6, 2
/* 05121C 800A8FCC 00280821 */  addu  $at, $at, $t0
/* 051220 800A8FD0 AC2702D0 */  sw    $a3, 0x2d0($at)
/* 051224 800A8FD4 01AF3021 */  addu  $a2, $t5, $t7
/* 051228 800A8FD8 8CC20000 */  lw    $v0, ($a2)
/* 05122C 800A8FDC 00E02025 */  move  $a0, $a3
/* 051230 800A8FE0 24050003 */  li    $a1, 3
/* 051234 800A8FE4 10400007 */  beqz  $v0, .L800A9004_ovl1
/* 051238 800A8FE8 00000000 */   nop
/* 05123C 800A8FEC 8C790000 */  lw    $t9, ($v1)
/* 051240 800A8FF0 3C01800E */  lui   $at, 0x800e
/* 051244 800A8FF4 00194880 */  sll   $t1, $t9, 2
/* 051248 800A8FF8 00290821 */  addu  $at, $at, $t1
/* 05124C 800A8FFC 1000000C */  b     .L800A9030_ovl1
/* 051250 800A9000 AC22F4D0 */   sw    $v0, -0xb30($at)
.L800A9004_ovl1:
/* 051254 800A9004 0C02A494 */  jal   func_800A9250
/* 051258 800A9008 AFA60018 */   sw    $a2, 0x18($sp)
/* 05125C 800A900C 8FA60018 */  lw    $a2, 0x18($sp)
/* 051260 800A9010 3C038005 */  lui   $v1, %hi(D_8004A7C4) # $v1, 0x8005
/* 051264 800A9014 3C01800E */  lui   $at, 0x800e
/* 051268 800A9018 ACC200


	case RTE_SECURITY_ACTION_TYPE_INLINE_CRYPTO:
		rc = inline_crypto_pkt_func_select(sa, pf);
		break;
	case RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL:
		if ((sa->type & RTE_IPSEC_SATP_DIR_MASK) ==
				RTE_IPSEC_SATP_DIR_IB)
			pf->process = pkt_flag_process;
		else
			pf->process = inline_proto_outb_pkt_process;
		break;
	case RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL:
		pf->prepare.async = lksd_proto_prepare;
		pf->process = pkt_flag_process;
		break;
	case RTE_SECURITY_ACTION_TYPE_CPU_CRYPTO:
		rc = cpu_crypto_pkt_func_select(sa, pf);
		break;
	default:
		rc = -ENOTSUP;
	}

	return rc;
}


mall;\n  line-height: @line-height-base;\n  color: @dropdown-header-color;\n  white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you\'re set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n  // Reverse the caret\n  .caret {\n    border-top: 0;\n    border-bottom: @caret-width-base dashed;\n    border-bottom: @caret-width-base solid ~"\\9"; // IE8\n    content: "";\n  }\n  // Different positioning for bottom up menu\n  .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n    margin-bottom: 2px;\n  }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n  .navbar-right {\n    .dropdown-menu {\n      .dropdown-menu-right();\n    }\n    // Necessary for overrides of the default right aligned menu.\n    // Will remove come v4 in all likelihood.\n    .dropdown-menu-left {\n      .dropdown-menu-left();\n    }\n  }\n}\n',"forms.less":'//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n  // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n  // so we reset that to ensure it behaves more like a standard block element.\n  // See https://github.com/twbs/bootstrap/issues/12359.\n  min-width: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: @line-height-computed;\n  font-size: (@font-size-base * 1.5);\n  line-height: inherit;\n  color: @legend-color;\n  border: 0;\n  border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n  display: inline-block;\n  max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn\'t specific enough)\ninput[type="search"] {\n  .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type="radio"],\ninput[type="checkbox"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9; // IE8-9\n  line-height: normal;\n}\n\ninput[type="file"] {\n  display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type="range"] {\n  display: block;\n  width: 100%;\n}\n\


48(a1)
	move	a2,56(a1)
	move	a3,64(a1)
	move	a4,72(a1)
	move	a5,80(a1)
	lea	160(a1),a1
	addq	#8,a0
	dbra	d0,scro_9

	rts

scro_10	movem	(a0)+,d1-d7/a2-a4
	move	d1,80(a1)
	move	d2,88(a1)
	move	d3,96(a1)
	move	d4,104(a1)
	move	d5,112(a1)
	move	d6,120(a1)
	move	d7,128(a1)
	move	a2,136(a1)
	move	a3,144(a1)
	move	a4,152(a1)
	movem	(a0)+,d1-d7/a2-a4
	move	d1,(a1)
	move	d2,8(a1)
	move	d3,16(a1)
	move	d4,24(a1)
	move	d5,32(a1)
	move	d6,40(a1)
	move	d7,48(a1)
	move	a2,56(a1)
	move	a3,64(a1)
	move	a4,72(a1)
	lea	160(a1),a1
	addq	#8,a0
	dbra	d0,scro_10

	rts

scro_11	movem	(a0)+,d1-d7/a2-a5
	move	d1,72(a1)
	move	d2,80(a1)
	move	d3,88(a1)
	move	d4,96(a1)
	move	d5,104(a1)
	move	d6,112(a1)
	move	d7,120(a1)
	move	a2,128(a1)
	move	a3,136(a1)
	move	a4,144(a1)
	move	a5,152(a1)
	movem	(a0)+,d1-d7/a2-a3
	move	d1,(a1)
	move	d2,8(a1)
	move	d3,16(a1)
	move	d4,24(a1)
	move	d5,32(a1)
	move	d6,40(a1)
	move	d7,48(a1)
	move	a2,56(a1)
	move	a3,64(a1)
	lea	160(a1),a1
	addq	#8,a0
	dbra	d0,scro_11

	rts

scro_12	movem	(a0)+,d1-d7/a2-a6
	move	d1,64(a1)
	move	d2,72(a1)
	move	d3,80(a1)
	move	d4,88(a1)
	move	d5,96(a1)
	move	d6,104(a1)
	move	d7,112(a1)
	move	a2,120(a1)
	move	a3,128(a1)
	move	a4,136(a1)
	move	a5,144(a1)
	move	a6,152(a1)
	movem	(a0)+,d1-d7/a2
	move	d1,(a1)
	move	d2,8(a1)
	move	d3,16(a1)
	move	d4,24(a1)
	move	d5,32(a1)
	move	d6,40(a1)
	move	d7,4


ameraUsageDescription',
    },
  ];

  const proguardRules = '''
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivity\$g
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter\$Args
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter\$Error
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningActivityStarter
-dontwarn com.stripe.android.pushProvisioning.PushProvisioningEphemeralKeyProvider
-keep class com.stripe.** { *; }
''';

  try {
    // Update the ensemble_modules.dart file
    updateEnsembleModules(
      stripeStatements['moduleStatements'],
      stripeStatements['useStatements'],
    );

    // Update the pubspec.yaml file
    updatePubspec(pubspecDependencies);

    // Update iOS configuration for Stripe
    if (platforms.contains('ios')) {
      updateIOSPermissions(iOSPermissions, arguments);
    }

    if (platforms.contains('android')) {
      createProguardRules(proguardRules);
    }

    print('Stripe module enabled successfully for ${platforms.join(', ')}! 🎉');
    exit(0);
  } catch (e) {
    print('Starter Error: $e');
    exit(1);
  }
}
import 'package:flutter/material.dart';
import 'package:js_widget/js_widget.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(home: ExampleChart());
  }
}

class ExampleChart extends StatefulWidget {
  const ExampleChart({Key? key}) : super(key: key);
  final String id = "chartJs";
  @override
  ExampleChartState createState() => ExampleChartState();
}

class ExampleChartState extends State<ExampleChart> {
  final String config = '''
    {
    type: 'line',
    data: {
      labels: [
      'January',
      'February',
      'March',
      'April',
      'May',
      'June',
    ],
    datasets: [{
      label: 'My First dataset',
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgb(255, 99, 132)',
      data: [0, 10, 5, 2, 20, 30, 45],
    }]
  },
    options: {}
  }''';
  final String _chartData = '''
  const labels = [
    'January',
    'February',
    'March',
    'April',
    'May',
    'June',
  ];

  const data = {
    labels: labels,
    datasets: [{
      label: 'My First dataset',
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgb(255, 99, 132)',
      data: [0, 10, 5, 2, 20, 30, 45],
    }]
  };

  const config = {
    type: 'line',
    data: {
      labels: [
      'January',
      'February',
      'March',
      'April',
      'May',
      'June',
    ],
    datasets: [{
      label: 'My First dataset',
      backgroundColor: 'rgb(255, 99, 132)',
      borderColor: 'rgb(255, 99, 132)',
      data: [0, 10, 5, 2, 20, 30, 45],
    }]
  },
    options: {}
  };

  ''';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        centerTitle: true,
        title: const Text('ChartJs Example App'),
      ),
      body: JsWidget(
        id: widget.id,
        createHtmlTag: () =>
            '''
<canvas id="${widget.id}"></canvas>
''',
        scriptToInstantiate: (String c, [htmlId = 'chartJs']) =>
            '''const myChart = new Chart(document.getElementById('${widget.id}'


:play()

                Game:returnToMenu()

            elseif self.selected_x == 2 then
                self.state = "MAIN"

                self.selected_x = 1
                self.selected_y = 2
            end
        end
    end

    super.update(self)
end

function LightSaveMenu:draw()

    local heart_positions_x = {142, 322}
    local heart_positions_y = {228, 270}

    love.graphics.setFont(self.font)
    if self.state == "MAIN" then
        local data = Game:getSavePreview()

        -- Header
        Draw.setColor(PALETTE["world_text"])
        love.graphics.print(data.name, 120, 120)
        love.graphics.print("LV "..data.level, 352, 120)

        local hours = math.floor(data.playtime / 3600)
        local minutes = math.floor(data.playtime / 60 % 60)
        local seconds = math.floor(data.playtime % 60)
        local time_text = string.format("%d:%02d:%02d", hours, minutes, seconds)
        love.graphics.print(time_text, 522 - self.font:getWidth(time_text), 120)

        -- Room name
        love.graphics.print(data.room_name, 319.5 - self.font:getWidth(data.room_name)/2, 170)

        -- Buttons
        love.graphics.print("Save", 170, 220)
        love.graphics.print("Return", 350, 220)
        love.graphics.print("Return to Title", 170, 260)

        -- Heart
        Draw.setColor(Game:getSoulColor())
        Draw.draw(self.heart_sprite, heart_positions_x[self.selected_x], heart_positions_y[self.selected_y])
    elseif self.state == "SAVE" or self.state == "OVERWRITE" then
        self:drawSaveFile(0, Game:getSavePreview(), 74, 26, false, true)

        self:drawSaveFile(1, self.saves[1], 74, 138, self.selected_y == 1)
        Draw.draw(self.divider_sprite, 74, 208, 0, 493, 2)

        self:drawSaveFile(2, self.saves[2], 74, 222, self.selected_y == 2)
        Draw.draw(self.divider_sprite, 74, 292, 0, 493, 2)

        self:drawSaveFile(3, self.saves[3], 74, 306, self.selected_y == 3)
        Draw.draw(self.divider_sprite, 74, 376, 0, 493, 2)

        if self.selected_y == 4 then
            Draw.setColor(Game:getSoulColor())
            Draw.draw(self.heart_sprite, 236, 402)

            Draw.setColor(PALETTE["world_text_selected"])
        else
            Draw.setColor(PALETTE["world_text"])
        end
        love.graphics.print("Return", 278, 394)
    elseif self.state == "SAVED" then
        self:drawSaveFile(self.saved_file, self.saves[self.saved_file], 74, 26, false, true)

        self:drawSaveFile(1, self.saves[1], 74, 138, self.selected_y == 1)
        Draw.draw(self.divider_sprite, 74, 208, 0, 493, 2)

        self:drawSaveFile(2, self.saves[2], 74, 222, self.selected_y == 2)
        Draw.draw(self.divider_sprite, 74, 292, 0, 493, 2)

        self:drawSaveFile(3, self.saves[3], 74, 306, self.selected_y == 3)
    elseif self.state == "QUIT" or self.state == "QUITTING" then

        -- Prompt
        love.graphics.print("Really return to title?", 170, 130)

        -- Buttons
        love.graphics.print("Yes", 170, 260)
        love.graphics.print("No", 350, 260)

        if self.state == "QUIT" then
            -- Heart


Data.levelSequence[this.levelNumber]);
    }
};

// For dev mode
Game.prototype.nextLevelCycle = function() {
    if (this.levelNumber >= levelData.levelSequence.length - 1) {
        this.levelNumber = -1;
    }
    this.nextLevel();
};

// Parameters added here can be tuned at run time when in developer mode
Game.parameters = new GameParameters({
    'roundedMovement': {initial: true},
    'playBuildingMoveSound': {initial: false},
    'buildingSpringStrength': {initial: 0.1, min: 0.01, max: 0.2},
    'buildingSpringDamping': {initial: 0.77, min: 0.5, max: 0.95},
    'muteAudio': {initial: false},
    'postLD': {initial: false}  // To activate post-LD improvements
});

var DEV_MODE = querystringUtil.get('devMode') !== undefined;
var POST_COMPO = querystringUtil.get('postCompo') !== undefined;

window['start'] = function() {
    var DEBUG_MAIN_LOOP = DEV_MODE && true; // Set to true to allow fast-forwarding main loop with 'f'
    Game.parameters.set('muteAudio', (DEV_MODE && true)); // Set to true if sounds annoy developers
    Game.parameters.set('postLD', POST_COMPO);
    if (DEV_MODE) {
        Game.parameters.initGUI();
    }

    var renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.shadowMap.enabled = true;
    renderer.shadowMap.type = THREE.PCFShadowMap;

    var game;

    var canvasWrapper = document.createElement('div');
    canvasWrapper.appendChild(renderer.domElement);

    var postLD = Game.parameters.get('postLD');

    if (postLD) {
        GJS.commonUI.createUI({
            parent: canvasWrapper,
            fullscreenElement: document.body,
            twitterAccount: 'Oletus',
            fillStyle: '#ffffff',
            opacity: 0.2,
            scale: 0.8
        });
    }

    var resizer = new GJS.CanvasResizer({
        mode: GJS.CanvasResizer.Mode.FIXED_ASPECT_RATIO,
        canvas: renderer.domElement,
        wrapperElement: canvasWrapper,
        width: 16,
        height: 9,
        setCanvasSizeCallback: function(width, height) {
            renderer.setSize(width, height);
            if (game !== undefined) {
                game.setCameraAspect(width / height);
            }
        }
    });

    var loadingBar = new GJS.LoadingBar();
    game = new Game(resizer, renderer, loadingBar);
    var eventListener = resizer.createPointerEventListener(game, false,
        GJS.CanvasResizer.EventCoordinateSystem.WEBGL_NORMALIZED_DEVICE_COORDINATES);
    resizer.canvas.addEventListener('mousemove', eventListener);
    resizer.canvas.addEventListener('mousedown', eventListener);
    resizer.canvas.addEventListener('mouseup', eventListener);
    resizer.canvas.addEventListener('mouseout', eventListener);
    if (postLD) {
        resizer.canvas.addEventListener('touchmove', eventListener);
        resizer.canvas.addEventListener('touchstart', eventListener);
        resizer.canvas.addEventListener('touchend', eventListener);
        resizer.canvas.addEventListener('touchcancel', eventListener);
    }

    startMainLoop([resizer, game, loadingBar, resizer.pixelator()], {debugMode: DEBUG_MAIN_LOOP});
};
'use strict';

if (typeof GJS === "undefined") {
    var GJS = {};
}

/**
 * An object representing one audio sample. Uses Howler.js under the hood if it is available.
 * @param {string} filename Name of the audio file without a file extension. Assumes that the audio file is located


count = count + 1
            else:
                train_pred = torch.cat((train_pred, pred), 0)
                train_target = torch.cat(
                    (train_target, target.data.view_as(pred)), 0)
        train_pred = train_pred.cpu().view(-1).numpy().tolist()
        train_target = train_target.cpu().view(-1).numpy().tolist()

        model.eval()
        for data, target in tqdm(valid_loader):
            if train_on_gpu:
                data, target = data.cuda(), target.cuda()
            output = model(data)
            loss = criterion(output, target)
            pred = output.data.max(dim=1, keepdim=True)[1]
            val_correct += np.sum(np.squeeze(
                pred.eq(target.data.view_as(pred))).cpu().numpy())
            val_total += data.size(0)
            valid_losses.append(loss.item() * data.size(0))
            if count2 == 0:
                val_pred = pred
                val_target = target.data.view_as(pred)
                count2 = count + 1
            else:
                val_pred = torch.cat((val_pred, pred), 0)
                val_target = torch.cat(
                    (val_target, target.data.view_as(pred)), 0)
        # 轉list
        val_pred = val_pred.cpu().view(-1).numpy().tolist()
        val_target = val_target.cpu().view(-1).numpy().tolist()

        train_loss = np.average(train_losses)
        valid_loss = np.average(valid_losses)

        train_acc = train_correct / train_total
        valid_acc = val_correct / val_total
        train_acc_his.append(train_acc)
        valid_acc_his.append(valid_acc)
        train_losses_his.append(train_loss)
        valid_losses_his.append(valid_loss)

        print('\tTraining Loss: {:.6f} \tValidation Loss: {:.6f}'.format(
            train_loss, valid_loss))
        print('\tTraining Accuracy: {:.6f} \tValidation Accuracy: {:.6f}'.format(
            train_acc, valid_acc))

    return train_acc_his, valid_acc_his, train_losses_his, valid_losses_his, model

# In[12]:

# model1 = CNN_Model()  # 不需要指定 .cpu()，因為預設就在 CPU 上
# 在模型初始化時將模型移動到相應的設備（GPU 或 CPU）
model1 = CNN_Model().to(device)
n_epochs = 30
optimizer1 = torch.optim.Adam(model1.parameters(), lr=LR)
criterion = nn.CrossEntropyLoss()

train_acc_his, valid_acc_his, train_losses_his, valid_losses_his, model1 = train(
    model1, n_epochs, train_loader, valid_loader, optimizer1, criterion)

# In[22]:

plt.figure(figsize=(15, 10))
plt.subplot(221)
plt.plot(train_losses_his, 'b', label='training loss')
plt.plot(valid_losses_his, 'r', label='validation loss')
plt.title("Simple CNN Loss")
plt.legend(loc='upper left')
plt.subplot(222)
plt.plot(train_acc_his, 'b', label='training accuracy')
plt.plot(valid_acc_his, 'r', label='validation accuracy')
plt.title("Simple CNN Accuracy")
plt.legend(loc='upper left')
plt.show()

# In[31]:

model1.eval()  # 設定模型為評估模式
all_predictions = []  # 用於儲存所有預測結果
all_targets = []  # 用於儲存所有真實標籤

with torch.no_grad():
    for data, target in valid_loader:
        if train_on_gpu:
            data, target = data.cuda(), target.cuda()
        output = model1(data)
        predictions = output.argmax(dim=1)
        all_predictions.extend(predictions.cpu().numpy())
        all_targets.extend(target.cpu().numpy())
conf_matrix = confusion_matrix(all_targets, all_predictions)

plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues")
plt.xlabel("Predicted Class")
plt.ylabel("True Class")
plt.title("Confusion Matrix")
plt.show()

# In[21]:

# 在訓練完畢後，保存完整模型（包括結構和參數）到指定文件
torch.save(model1, 'full_trained_model.pth')

# In[ ]:

# In[ ]:


态。
  /// ~end
  final int status;

  EMPresenceStatusDetail._private(
    this.device,
    this.status,
  );

  factory EMPresenceStatusDetail.fromJson(Map map) {
    String device = map["device"];
    int status = map["status"] ?? 0;
    return EMPresenceStatusDetail._private(device, status);
  }
}
import '../internal/inner_headers.dart';

/// ~english
/// The EMGroupSharedFile class, which manages the chat group shared files.
///
/// To get the information of the chat group shared file, call [EMGroupManager.fetchGroupFileListFromServer].
///
/// ```dart
///   List<EMGroupSharedFile>? list = await EMClient.getInstance.groupManager.fetchGroupFileListFromServer(groupId);
/// ```
/// ~end
///
/// ~chinese
/// 群组共享文件类。
///
/// 可以通过 [EMGroupManager.fetchGroupFileListFromServer] 方法获取共享文件信息，示例如下：
///
/// ```dart
///   List<EMGroupSharedFile> list = await EMClient.getInstance.groupManager.fetchGroupFileListFromServer(groupId);
/// ```
/// ~end
class EMGroupSharedFile {
  EMGroupSharedFile._private();

  String? _fileId;
  String? _fileName;
  String? _fileOwner;
  int? _createTime;
  int? _fileSize;

  /// ~english
  /// Gets the shared file ID.
  ///
  /// **Return** The shared file ID.
  /// ~end
  ///
  /// ~chinese
  /// 共享文件 ID。
  /// ~end
  String? get fileId => _fileId;

  /// ~english
  /// Gets the shared file name.
  ///
  /// **Return** The shared file name.
  /// ~end
  ///
  /// ~chinese
  /// 共享文件名称。
  /// ~end
  String? get fileName => _fileName;

  /// ~english
  /// Gets the username that uploads the shared file.
  ///
  /// **Return** The username that uploads the shared file.
  /// ~end
  ///
  /// ~chinese
  /// 上传共享文件的成员用户 ID。
  /// ~end
  String? get fileOwner => _fileOwner;

  /// ~english
  /// Gets the Unix timestamp for uploading the shared file, in milliseconds.
  ///
  /// **Return** The Unix timestamp for uploading the shared file, in milliseconds.
  /// ~end
  ///
  /// ~chinese
  /// 共享文件的上传时间戳，单位为毫秒。
  /// ~end
  int? get createTime => _createTime;

  /// ~english
  /// Gets the data length of the shared file, in bytes.
  ///
  /// **Return** The data length of the shared file, in bytes.
  /// ~end
  ///
  /// ~chinese
  /// 共享文件大小，单位为字节。
  /// ~end
  int? get fileSize => _fileSize;

  factory EMGroupSharedFile.fromJson(Map? map) {
    return EMGroupSharedFile._private()
      .._fileId = map?["fileId"]
      .._fileName = map?["name"]
      .._fileOwner = map?["owner"]
      .._createTime = map?["createTime"]
      .._fileSize = map?["fileSize"];
  }

  Map toJson() {
    Map data = {};
    data.putIfNotNull("fileId", _fileId);
    data.putIfNotNull("name", _fileName);
    data.putIfNotNull("owner", _fileOwner);
    data.putIfNotNull("createTime", _createTime);
    data.putIfNotNull("fileSize", _fileSize);
    return data;
  }
}
/// ~english
/// The message pinning information.


?v=1758789124250","css/index21.css?v=1758789124250","js/index.vue_vue_type_script_setup_true_lang.js?v=1758789124250","js/index101.js?v=1758789124250","js/theme-monokai.js?v=1758789124250","js/organization.js?v=1758789124250","js/index125.js?v=1758789124250","js/index105.js?v=1758789124250","css/index19.css?v=1758789124250","js/custom.js?v=1758789124250"])))=>i.map(i=>d[i]);
import{t as e,i as a,z as t,a8 as n,d as i,x as l,a as r,w as s}from"./page_layout.js?v=1758789124250";import{_ as o}from"./index.js?v=1758789124250";import{_ as d}from"./index.vue_vue_type_script_setup_true_lang5.js?v=1758789124250";import{_ as p}from"./index.vue_vue_type_script_setup_true_lang7.js?v=1758789124250";import{_ as c}from"./index.vue_vue_type_script_setup_true_lang12.js?v=1758789124250";import{_,c as u,f as m,e as g,a as b,d as x,h}from"./public.js?v=1758789124250";import{_ as y}from"./index.vue_vue_type_script_setup_true_lang8.js?v=1758789124250";import{_ as v}from"./index108.js?v=1758789124250";import{_ as w}from"./index.vue_vue_type_script_setup_true_lang.js?v=1758789124250";import{V as f}from"./index101.js?v=1758789124250";import"./theme-monokai.js?v=1758789124250";import{k as C,a0 as k,P as S,r as T,e as j,R as U,V as P,W as E,a3 as O,U as $,a2 as R,an as L,S as D,a4 as q,N as I,ak as A,j as z,_ as N}from"./vue.js?v=1758789124250";import{dR as V,au as J,dV as M,da as F,aC as K,dS as W}from"./naive.js?v=1758789124250";import{g as B}from"./organization.js?v=1758789124250";const{t:G}=a.global,H=a=>e.post("/crontab/script/test_script",{data:JSON.stringify(a)},{requestOptions:{loading:G("Crontab.Api.index_4"),errorMessage:!1}}),Q=a=>e.post("/crontab/script/get_script_logs",{data:JSON.stringify(a)}),X=(a,t=!0)=>e.post("/crontab/script/remove_script",a,{requestOptions:{loading:t?G("Security.Api.Index_3"):"",successMessage:t}}),Y={class:"p-20px"},Z=C({__name:"index",props:{data:{}},setup(a,{expose:n}){const i=t(),{theme:l}=k(i),{t:r}=S(),s=a,{isEdit:o,row:d,id:p,getList:c}=s.data,u=T(null),m=[{value:"string",label:r("Crontab.Script.index_9")},{value:"int",label:r("Crontab.Script.index_10")},{value:"float",label:r("Crontab.Script.index_11")}],g=[{value:"1",label:r("Crontab.Script.index_12")},{value:"0",label:r("Crontab.Script.index_13")}],b={name:{required:!0,trigger:["blur","change"],message:r("Crontab.Planned.index_49")},custom:{required:


03a742f8b658806a01a7bf853cb9a86cd/substrate/primitives/offchain/src/lib.rs#L25-L37

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Parachain<wbr/>Host
Ref https://github.com/paritytech/polkadot-sdk/blob/a84dd0dba58d51503b8942360aa4fb30a5a96af5/polkadot/primitives/src/runtime_api.rs#L129-L134

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Runtime<wbr/>Apis

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Session<wbr/>Keys
Ref: https://github.com/paritytech/polkadot-sdk/blob/43415ef58c143b985e09015cd000dbd65f6d3997/substrate/primitives/session/src/runtime_api.rs#L21-L31

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Staking<wbr/>Api
Ref: https://github.com/paritytech/polkadot-sdk/blob/00b85c51dfbc0fecbb8a4dd3635d4c177a6527a6/substrate/frame/staking/runtime-api/src/lib.rs#L25-L33

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Tagged<wbr/>Transaction<wbr/>Queue
Ref: https://github.com/paritytech/polkadot-sdk/blob/bc53b9a03a742f8b658806a01a7bf853cb9a86cd/substrate/primitives/transaction-pool/src/runtime_api.rs#L25-L30

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Transaction<wbr/>Payment<wbr/>Api
Ref: https://github.com/paritytech/polkadot-sdk/blob/36957d676033b23b46edb66e6d7dcd13da11e19a/substrate/frame/transaction-payment/rpc/runtime-api/src/lib.rs#L26-L36

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-32"></use></svg>
Transaction<wbr/>Payment<wbr/>Call<wbr/>Api

<svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-64"></use></svg>
get<wbr/>Runtime<wbr/>Api<wbr/>Method<wbr


e of errors.

  @note Memory allocated for the string is automatically freed in Sid's
  destructor.
*/

const char* Sid::as_string()
{
  if (!m_data)
    return NULL;

  if (!m_as_string)
  {
    bool success= ConvertSidToStringSid(m_data->User.Sid, &m_as_string);

    if (!success)
    {
#ifndef DBUG_OFF
      Error_message_buf error_buf;
      DBUG_PRINT("error", ("Could not get textual representation of a SID, "
                           "ConvertSidToStringSid() failed with error %X (%s)",
                           GetLastError(), get_last_error_message(error_buf)));
#endif
      m_as_string= NULL;
      return NULL;
    }
  }

  return m_as_string;
}

#endif

bool Sid::operator ==(const Sid &other)
{
  if (!is_valid() || !other.is_valid())
    return false;

  return EqualSid(m_data->User.Sid, other.m_data->User.Sid);
}

/** Generating User Principal Name *************************/

/**
  Call Windows API functions to get UPN of the current user and store it
  in internal buffer.
*/

UPN::UPN(): m_buf(NULL)
{
  wchar_t  buf1[MAX_SERVICE_NAME_LENGTH];

  // First we try to use GetUserNameEx.

  m_len= sizeof(buf1)/sizeof(wchar_t);

  if (!GetUserNameExW(NameUserPrincipal, buf1, (PULONG)&m_len))
  {
    if (GetLastError())
    {
#ifndef DBUG_OFF
      Error_message_buf error_buf;
      DBUG_PRINT("note", ("When determining UPN"
                          ", GetUserNameEx() failed with error %X (%s)",
                          GetLastError(), get_last_error_message(error_buf)));
#endif
      if (ERROR_MORE_DATA == GetLastError())
        ERROR_LOG(INFO, ("Buffer overrun when determining UPN:"
                         " need %ul characters but have %ul",
                         m_len, sizeof(buf1)/sizeof(WCHAR)));
    }

    m_len= 0;   // m_len == 0 indicates invalid UPN
    return;
  }

  /*
    UPN is stored in buf1 in wide-char format - convert it to utf8
    for sending over network.
  */

  m_buf= wchar_to_utf8(buf1, &m_len);

  if(!m_buf)
    ERROR_LOG(ERROR, ("Failed to convert UPN to utf8"));

  // Note: possible error would be indicated by the fact that m_buf is NULL.
  return;
}

UPN::~UPN()
{
  if (m_buf)
    free(m_buf);
}

/**
  Convert a wide-char string to utf8 representation.

  @param[in]     string   null-terminated wide-char string to be converted
  @param[in,out] len      length of the string to be converted or 0; on
                          return length (in bytes, excluding terminating
                          null character) of the converted string

  If len is 0 then the length of the string will be computed by this function.

  @return Pointer to a buffer containing utf8 representation or NULL in
          case of error.

  @note The returned buffer must be freed with @c free() call.
*/

char* wchar_to_utf8(const wchar_t *string, size_t *len)
{
  char   *buf= NULL;
  size_t  str_len= len && *len ? *len : wcslen(string);

  /*
    A conversion from utf8 to wchar_t will never take more than 3 bytes per
    character, so a buffer of length 3 * str_len should be sufficient.
    We check that assumption with an assertion later.
  */

  size_t  buf_len= 3 * str_len;


 styled.div`
  display: flex;
  flex-wrap: wrap;
  margin: 0 -15px;

  ${(props: GridRowProps) =>
    props.space &&
    `
    justify-content: space-between;
  `}

  ${props =>
    props.direction &&
    `
    direction: ${props.direction};
    `}

  ${props =>
    props.alignCenter &&
    `
    align-items: center;
  `}
`;

type GridUnits = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;

interface GridUnitProps {
  df?: GridUnits;
  xl?: GridUnits;
  lg?: GridUnits;
  md?: GridUnits;
  sm?: GridUnits;
  xs?: GridUnits;
  withoutPadding?: boolean;
  withoutMargin?: boolean;
}

const gridUnitStyles = {
  0: `
        flex: 0 0 0%;
        max-width: 0%;
        visibility: hidden;
        height: 0;
        width: 0;
    `,
  1: `
        flex: 0 0 8.33333%;
        max-width: 8.33333%;
    `,
  2: `
        flex: 0 0 16.66667%;
        max-width: 16.66667%;
    `,
  3: `
        flex: 0 0 25%;
        max-width: 25%;
    `,
  4: `
        flex: 0 0 33.33333%;
        max-width: 33.33333%;
    `,
  5: `
        flex: 0 0 41.66667%;
        max-width: 41.66667%;
    `,
  6: `
        flex: 0 0 50%;
        max-width: 50%;
    `,
  7: `
        flex: 0 0 58.33333%;
        max-width: 58.33333%;
    `,
  8: `
        flex: 0 0 66.66667%;
        max-width: 66.66667%;
    `,
  9: `
        flex: 0 0 75%;
        max-width: 75%;
    `,
  10: `
        flex: 0 0 83.33333%;
        max-width: 83.33333%;
    `,
  11: `
        flex: 0 0 91.66667%;
        max-width: 91.66667%;
    `,
  12: `
        flex: 0 0 100%;
        max-width: 100%;
    `,
};

const GridUnit = styled.div`
  padding: 0 15px;
  display: flex;
  flex-direction: column;
  ${(props: GridUnitProps) =>
    props.withoutMargin ? "margin: 0;" : "margin-bottom: 15px;"}
  ${(props: GridUnitProps) => props.withoutPadding && "padding: 0;"}
  ${(props: GridUnitProps) => props.df && gridUnitStyles[props.df]}

  ${media.largeDesktop`
    ${(props: GridUnitProps) => props.xl && gridUnitStyles[props.xl]}
  `}

  ${media.desktop`
    ${(props: GridUnitProps) => props.lg && gridUnitStyles[props.lg]}
  `}

  ${media.tablet`
    ${(props: GridUnitProps) => props.md && gridUnitStyles[props.md]}
  `}

  ${media.phone`
    ${(props: GridUnitProps) => props.sm && gridUnitStyles[props.sm]}
  `}

  ${media.smallPhone`
    ${(props: GridUnitProps) => props.xs && gridUnitStyles[props.xs]}
  `}
`;

export default {
  Container: GridContainer,
  Row: GridRow,
  Unit: GridUnit,
};
import { getFileById } from "@lib/utils/getFileById";
import { MarkdownFile } from "@lib/types";
import { generateFile } from "@lib/utils/ItemGenerator";

describe("getFileById", () => {
  it("returns the file has specified id", () => {
    // Given
    const files: MarkdownFile[] = [
      {
        id: "specified",
        content: "content",
        title: "title"
      },
      generateFile("dummy")


 (g *Gateway) isRouteAttachedToGateway(route *L7Route, gatewayNsName types.NamespacedName) bool {
	for _, parentRef := range route.ParentRefs {
		if parentRef.Gateway != nil && parentRef.Gateway.NamespacedName == gatewayNsName {
			return true
		}
	}
	return false
}

// collectSnippetsFiltersFromRoute extracts SnippetsFilters from a single route's rules.
func (g *Gateway) collectSnippetsFiltersFromRoute(
	route *L7Route,
	allSnippetsFilters map[types.NamespacedName]*SnippetsFilter,
	referencedFilters map[types.NamespacedName]*SnippetsFilter,
) {
	for _, rule := range route.Spec.Rules {
		if !rule.Filters.Valid {
			continue
		}

		for _, filter := range rule.Filters.Filters {
			if filter.FilterType != FilterExtensionRef ||
				filter.ResolvedExtensionRef == nil ||
				filter.ResolvedExtensionRef.SnippetsFilter == nil {
				continue
			}

			sf := filter.ResolvedExtensionRef.SnippetsFilter
			nsName := client.ObjectKeyFromObject(sf.Source)

			// Only include if it exists in the cluster-wide map and is valid
			// Using the cluster-wide version ensures consistency and avoids duplicates
			if clusterSF, exists := allSnippetsFilters[nsName]; exists && clusterSF.Valid {
				referencedFilters[nsName] = clusterSF
			}
		}
	}
}

func validateUnsupportedGatewayFields(gw *v1.Gateway) []conditions.Condition {
	var conds []conditions.Condition

	if gw.Spec.AllowedListeners != nil {
		conds = append(conds, conditions.NewGatewayAcceptedUnsupportedField("AllowedListeners"))
	}

	if gw.Spec.BackendTLS != nil {
		conds = append(conds, conditions.NewGatewayAcceptedUnsupportedField("BackendTLS"))
	}

	return conds
}
package graph

import (
	"fmt"
	"testing"

	. "github.com/onsi/gomega"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	v1 "sigs.k8s.io/gateway-api/apis/v1"

	"github.com/nginx/nginx-gateway-fabric/v2/internal/controller/state/conditions"
	"github.com/nginx/nginx-gateway-fabric/v2/internal/framework/helpers"
	"github.com/nginx/nginx-gateway-fabric/v2/internal/framework/kinds"
)

func TestValidateHTTPListener(t *testing.T) {
	t.Parallel()
	protectedPorts := ProtectedPorts{9113: "MetricsPort"}

	tests := []struct {
		l        v1.Listener
		name     string
		expected []conditions.Condition
	}{
		{
			l: v1.Listener{
				Port: 80,
			},
			expected: nil,
			name:     "valid",
		},
		{
			l: v1.Listener{
				Port: 0,
			},
			expected: conditions.NewListenerUnsupportedValue(`port: Invalid value: 0: port must be between 1-65535`),
			name:     "invalid port",
		},
		{
			l: v1.Listener{
				Port: 80,
				TLS: &v1.GatewayTLSConfig{
					Mode: helpers.GetPointer(v1.TLSModeTerminate),
				},
				Name: "http-listener",
			},
			expected: conditions.NewListenerUnsupportedValue(`tls: Forbidden: tls is not supported for HTTP listener`),
			name:     "invalid HTTP listener with TLS",
		},
		{
			l: v1.Listener{
				Port: 9113,
			},
			expected: conditions.NewListenerUnsupportedValue(
				`port: Invalid value: 9113: port is already in use as MetricsPort`,
			),
			name: "invalid protected port",
		},
	}

	for _, test := range tests {
		t.Run(test.name