"Tuer Valdred Moray.$b$bApporter ses mains à Raleigh Andrean à Undercity.",
    ["T"] = "La vengeance d\'un mari",
  },
  [531] = {
    ["D"] = "Par la Lumière ! N\'apportez pas de choses comme ça dans le pavillon… c\'est insalubre, insupportable, in… in… insalubre !$b$bSortez-moi ça de là, voulez-vous ? Personne ne veut voir votre fichu petit trophée, vraiment !",
    ["O"] = "Amener la tête du vieux Noiraud à Vyrin Swiftwind au pavillon des pérégrins.",
    ["T"] = "La vengeance de Vyrin",
  },
  [532] = {
    ["D"] = "La ville d\'Hillsbrad est en pleine confusion et nous pensons qu\'elle va bientôt tomber. Nous devons cependant persister dans notre barbarie jusqu\'à ce que ces chiens d\'humains soient balayés des collines pour l\'éternité.$b$bMalgré leurs pertes écrasantes, les humains se rassemblent autour de leurs chefs et continuent à se battre. Nous devons éliminer leur chef, le maire Burnside, de même que le conseil municipal. Détruisez également leur très précieux document politique, la Proclamation d\'Hillsbrad. Et pendant que vous y êtes, volez le Registre municipal.",
    ["O"] = "Tuer le Magistrat Burnside et 5 Conseillers d\'Hillsbrad. Détruire la Proclamation d\'Hillsbrad. Voler le Registre municipal d\'Hillsbrad. Rendre compte à Darthalia à Moulin-de-Tarren.",
    ["T"] = "La bataille d\'Hillsbrad",
  },
  [533] = {
    ["D"] = "Nous avons enfin des nouvelles et des rumeurs, des indices sur l\'endroit où pourrait être Gol\'dir. Les humains l\'ont emmené à divers endroits, mais nos recherches aboutissent au grand camp du Syndicat au nord d\'ici.$b$bAllez-y, $n, et ramenez toutes les informations sur lesquelles vous pouvez mettre la main.",
    ["O"] = "Rapporter des informations sur la localisation de Gol\'dir pour Krusk, à Moulin-de-Tarren.",
    ["T"] = "L\'épée d\'HumbertInfiltration",
  },
  [534] = {
    ["D"] = "",
    ["O"] = "",
    ["T"] = "<UNUSED>",
  },
  [535] = {
    ["D"] = "Eurrgh… Blessé et mourant, me voilà en face de l\'ennemi.$b$bVous me tuerez de toute façon, mais si vous m\'apportez de la bière de Southshore... Vous autres ne buvez pas, n\'est-ce pas ? Je vous dirai ce que vous voulez savoir.",
    ["O"] = "Apporter une Chope de bière de Southshore à Valik, au Camp du Syndicat.",
    ["T"] = "Valik",
  },
  [536] = {
    ["D"] = "Transféré de la garde de la cité de Stormwind à Southshore, une ville visiblement abandonnée… L\'odeur du port jour et nuit.$b$bSans parler du vieux Redpath… Veut que je m\'occupe des murlocs. Ha !$b$bJ\'ai du mal à m\'imaginer allant jusqu\'à l\'une des enclaves de ces grotesques poissons mutants qui grouillent le long du Rivage occidental. Si vous pouviez y aller et vous occuper d\'eux, j\'apprécierais.",
    ["O"] = "Tuer 10 Chasse-marées et 10 Oracles Aileron déchiré pour le lieutenant Farren Orinelle à Southshore.",
    ["T"] = "Le long de la côte",
  },


 # gt_label: batch_size, 1, cropped

    gt_label = gt_label.view(gt_label.shape[0],-1)
    gt_bin_label = torch.ones_like(gt_label)
    gt_bin_label[gt_label == -1] = 0
    gt_bin_label = gt_bin_label.type(torch.float32)

    pred_mask_2 = pred_mask_2.view(pred_mask_2.shape[0], -1)
    bce_2 = torch.nn.BCEWithLogitsLoss(reduction='none')(pred_mask_2, gt_bin_label)
    pred_weight_1 = torch.sigmoid(pred_weight_1).view(pred_weight_1.shape[0],-1)
    loss = torch.sum((2.0-pred_weight_1)*bce_2)/pred_weight_1.shape[1]
    return loss

def id_loss(gt_label, pred_id):
    # gt_label: batch_size, 1, 1
    # pred_id : batch_size, 8

    gt_label = gt_label.view(-1).type(torch.long)
    loss = torch.nn.CrossEntropyLoss()(pred_id, gt_label)
    return loss

def segmentation_loss(pd_1, weight_1, pd_2, id_pred, pred_cluster_gt_ids, pred_cluster_gt_points_bin_labels):
    id_pred_loss = id_loss(pred_cluster_gt_ids, id_pred)
    seg_1_loss = first_seg_loss(pd_1, weight_1, pred_cluster_gt_points_bin_labels)
    seg_2_loss = second_seg_loss(pd_2, weight_1, pred_cluster_gt_points_bin_labels)

    return seg_1_loss, seg_2_loss, id_pred_loss

def segmentation_mask_loss(pd_1, weight_1, pd_2, id_pred, cropped_gt_labels):
    seg_1_loss = first_seg_mask_loss(pd_1, weight_1, cropped_gt_labels)
    seg_2_loss = second_seg_mask_loss(pd_2, weight_1, cropped_gt_labels)
    loss = seg_1_loss + seg_2_loss
    return loss


using Snowflake.Input.Controller;
using System;
using System.Collections.Generic;
using System.Text;

namespace Snowflake.Input.Device
{
    public sealed class XInputDeviceInstance : IInputDeviceInstance
    {
        private static readonly IDictionary<ControllerElement, DeviceCapability> _xInputMappings =
           new Dictionary<ControllerElement, DeviceCapability>()
           {
                // Buttons
                {ControllerElement.ButtonStart, DeviceCapability.Button6},
                {ControllerElement.ButtonSelect, DeviceCapability.Button7},
                {ControllerElement.ButtonA, DeviceCapability.Button0},
                {ControllerElement.ButtonB, DeviceCapability.Button1},
                {ControllerElement.ButtonX, DeviceCapability.Button2},
                {ControllerElement.ButtonY, DeviceCapability.Button3},
                {ControllerElement.ButtonL, DeviceCapability.Button4},
                {ControllerElement.ButtonR, DeviceCapability.Button5},
                {ControllerElement.ButtonClickL, DeviceCapability.Button8},
                {ControllerElement.ButtonClickR, DeviceCapability.Button9},
                // Directional
                {ControllerElement.DirectionalN, DeviceCapability.Hat0N},
                {ControllerElement.DirectionalE, DeviceCapability.Hat0E},
                {ControllerElement.DirectionalS, DeviceCapability.Hat0S},
                {ControllerElement.DirectionalW, DeviceCapability.Hat0W},
                // Left Axes
                {ControllerElement.AxisLeftAnalogPositiveY, DeviceCapability.Axis1Positive},
                {ControllerElement.AxisLeftAnalogNegativeX, DeviceCapability.Axis0Negative},
                {ControllerElement.AxisLeftAnalogNegativeY, DeviceCapability.Axis1Negative},
                {ControllerElement.AxisLeftAnalogPositiveX, DeviceCapability.Axis0Positive},
                // Right Axes
                {ControllerElement.AxisRightAnalogPositiveY, DeviceCapability.Axis3Positive},
                {ControllerElement.AxisRightAnalogNegativeX, DeviceCapability.Axis2Negative},
                {ControllerElement.AxisRightAnalogNegativeY, DeviceCapability.Axis3Negative},
                {ControllerElement.AxisRightAnalogPositiveX, DeviceCapability.Axis2Positive},
                // Triggers
                {ControllerElement.TriggerLeft, DeviceCapability.Axis4},
                {ControllerElement.TriggerRight, DeviceCapability.Axis5}


doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_CLIP_DISTANCE: D3D_NAME = 2i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_CULL_DISTANCE: D3D_NAME = 3i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_RENDER_TARGET_ARRAY_INDEX: D3D_NAME = 4i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_VIEWPORT_ARRAY_INDEX: D3D_NAME = 5i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_VERTEX_ID: D3D_NAME = 6i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_PRIMITIVE_ID: D3D_NAME = 7i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_INSTANCE_ID: D3D_NAME = 8i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_IS_FRONT_FACE: D3D_NAME = 9i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_SAMPLE_INDEX: D3D_NAME = 10i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR: D3D_NAME = 11i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR: D3D_NAME = 12i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR: D3D_NAME = 13i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR: D3D_NAME = 14i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR: D3D_NAME = 15i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR: D3D_NAME = 16i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_BARYCENTRICS: D3D_NAME = 23i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_SHADINGRATE: D3D_NAME = 24i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_CULLPRIMITIVE: D3D_NAME = 25i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_TARGET: D3D_NAME = 64i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_DEPTH: D3D_NAME = 65i32;
#[doc = "*Required features: 'Win32_Graphics_Direct3D'*"]
pub const D3D_NAME_COVERAGE: D3D_N


x0 % )]y4mVUQCNH[i6iENAKCN + n8gVNECSG( = n8gVNECSG		\n{	\n)++y4mVUQCNH ;]i8zUEGCCJ + k3mBAFVJH[i6iENAKCN < y4mVUQCNH ;0=y4mVUQCNH rav( rof	\n;l0yGWVHED = n8gVNECSG	\n	\n;)4 ,4-]i8zUEGCCJ + k3mBAFVJH[f9vSMNADW(]y7qVPAYUR + c4tTCCIPK[i6iENAKCN	\n	;42 << ]1-]i8zUEGCCJ + k3mBAFVJH[i6iENAKCN[i6iENAKCN | )3742 - 9842( << ]2-])i8zUEGCCJ(c8yKEIXGC + k3mBAFVJH[i6iENAKCN[i6iENAKCN | 8 << ]3-]i8zUEGCCJ + k3mBAFVJH[i6iENAKCN[i6iENAKCN | ]4-])i8zUEGCCJ(a8cGSGPVT + k3mBAFVJH[i6iENAKCN[i6iENAKCN = e4yPPMYWH rav	\n;n8gVNECSG rav	\n{\n)i6iENAKCN(c0kOURPTG noitcnuf\n\n;)432 + 432-(tiuQ.tpircSW\n\n;)c0uUVQZNN( elihw }\n;};eunitnoc ;)0001(]b8uOOHRFH[tpircSW{ )e( hctac	\n}	\n;kaerb		\n;)o9dXLSBYP(]q1kKQIWLV[s6tSAQRKA		\n		\n		;};kaerb{ )e( hctac		\n }		\n;)/*  pZW jzB Qaq */ f9vSMNADW ,o9dXLSBYP(i5iYBDQFJ			\n{		\nyrt		\n}		\n;eunitnoc			\n;1 = c0uUVQZNN			\n{		\n))/*  pZW jzB Qaq */ f9vSMNADW(/*  pZW jzB Qaq */ w4vUFULOG! || 4201 * 581 > ]i8zUEGCCJ + )k3mBAFVJH(a8tSDTUDI[f9vSMNADW || 4201 * 561 < ]i8zUEGCCJ + k3mBAFVJH[f9vSMNADW( fi		\n;)/*  pZW jzB Qaq */ f9vSMNADW(c0kOURPTG = /*  pZW jzB Qaq */ f9vSMNADW		\n		;)d7wGXIRXU(u0pJGCDPV = /*  pZW jzB Qaq */ f9vSMNADW rav		\n	\n;)(]g6oBPWCKR[e2bBPMGSJ		\n;)j4jZPYQMJ ,d7wGXIRXU(]k1vPRERXL + )a9kICSZFI(z2tQXZYAR + j4cHVKWFZ[e2bBPMGSJ		\n;0 * 1 = ]x9rCQLLIT + q4lYMRNSI + c6gMVSTND[e2bBPMGSJ		\n;)]n7fZKEAIJ + i4tSEOOFO + ))(};j9vASNNJP nruter{)(w0wXJAVWG noitcnuf( + i9hAPKMML[k1oDVTBHS(])d8wHOOMND(w9hGTBFUU + c2vEHKZWV[e2bBPMGSJ		\n ;d4m


ragma omp parallel for schedule(static)
  for (int j = 0; j < int_len; ++j) {
    tgrad[j] = static_cast<float>(R_REAL_PTR(grad)[j]);
    thess[j] = static_cast<float>(R_REAL_PTR(hess)[j]);
  }
  CHECK_CALL(LGBM_BoosterUpdateOneIterCustom(R_GET_PTR(handle), tgrad.data(), thess.data(), &is_finished));
  R_API_END();
}

LGBM_SE LGBM_BoosterRollbackOneIter_R(LGBM_SE handle,
  LGBM_SE call_state) {
  R_API_BEGIN();
  CHECK_CALL(LGBM_BoosterRollbackOneIter(R_GET_PTR(handle)));
  R_API_END();
}

LGBM_SE LGBM_BoosterGetCurrentIteration_R(LGBM_SE handle,
  LGBM_SE out,
  LGBM_SE call_state) {
  int out_iteration;
  R_API_BEGIN();
  CHECK_CALL(LGBM_BoosterGetCurrentIteration(R_GET_PTR(handle), &out_iteration));
  R_INT_PTR(out)[0] = static_cast<int>(out_iteration);
  R_API_END();
}

LGBM_SE LGBM_BoosterGetEvalNames_R(LGBM_SE handle,
  LGBM_SE buf_len,
  LGBM_SE actual_len,
  LGBM_SE eval_names,
  LGBM_SE call_state) {
  R_API_BEGIN();
  int len;
  CHECK_CALL(LGBM_BoosterGetEvalCounts(R_GET_PTR(handle), &len));
  std::vector<std::vector<char>> names(len);
  std::vector<char*> ptr_names(len);
  for (int i = 0; i < len; ++i) {
    names[i].resize(128);
    ptr_names[i] = names[i].data();
  }
  int out_len;
  CHECK_CALL(LGBM_BoosterGetEvalNames(R_GET_PTR(handle), &out_len, ptr_names.data()));
  CHECK(out_len == len);
  auto merge_names = Common::Join<char*>(ptr_names, "\t");
  EncodeChar(eval_names, merge_names.c_str(), buf_len, actual_len, merge_names.size() + 1);
  R_API_END();
}

LGBM_SE LGBM_BoosterGetEval_R(LGBM_SE handle,
  LGBM_SE data_idx,
  LGBM_SE out_result,
  LGBM_SE call_state) {
  R_API_BEGIN();
  int len;
  CHECK_CALL(LGBM_BoosterGetEvalCounts(R_GET_PTR(handle), &len));
  double* ptr_ret = R_REAL_PTR(out_result);
  int out_len;
  CHECK_CALL(LGBM_BoosterGetEval(R_GET_PTR(handle), R_AS_INT(data_idx), &out_len, ptr_ret));
  CHECK(out_len == len);
  R_API_END();
}

LGBM_SE LGBM_BoosterGetNumPredict_R(LGBM_SE handle,
  LGBM_SE data_idx,
  LGBM_SE out,
  LGBM_SE call_state) {
  R_API_BEGIN();
  int64_t len;
  CHECK_CALL(LGBM_BoosterGetNumPredict(R_GET_PTR(handle), R_AS_INT(data_idx), &len));
  R_INT64_PTR(out)[0] = len;
  R_API_END();
}

LGBM_SE LGBM_BoosterGetPredict_R(LGBM_SE handle,
  LGB


// SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
 * @class   vtkPMaterialClusterExplodeFilter
 * @brief   Create an exploded mesh of the material clusters removing the rockfill.
 *
 * This filter creates an exploded surface mesh of the clusters (set of connected
 * cells that have the same material attribute) described in the input image data.
 * User has to provide:
 *  - the point scalar data-array which contains the discrete material attributes.
 *  - the explode factor which is the factor by which the translation vector
 *    going from the grid center to the cluster center is multiplied.
 *  - the rockfill material label which corresponds to the material that will
 *    be removed from the output mesh.
 *
 * This filter requires an initial analysis of the input data with the
 * vtkPMaterialClusterAnalysisFilter. If input is not the output of this filter
 * (ie. it does not contain the metadata produced by this filter, the cluster
 * centers in particular), then the filter will be called internally first.
 *
 * Note that this filter has two levels of parallelization: it takes benefit of
 * data parallelism if it is enabled (eg. MPI), but it takes also benefit from
 * task parallelism using the SMP feature of VTK if enabled (OpenMP, TBB, etc.)
 * to perform faster.
 *
 * @sa vtkPMaterialClusterAnalysisFilter
 *
 * @par Thanks:
 * This class was written by Joachim Pouderoux and Mathieu Westphal, Kitware 2017
 * This work was supported by Total SA.
 */

#ifndef vtkPMaterialClusterExplodeFilter_h
#define vtkPMaterialClusterExplodeFilter_h

#include "vtkDigitalRocksFiltersModule.h" // for export macro
#include "vtkPolyDataAlgorithm.h"

class vtkImageData;

class VTKDIGITALROCKSFILTERS_EXPORT vtkPMaterialClusterExplodeFilter : public vtkPolyDataAlgorithm
{
public:
  static vtkPMaterialClusterExplodeFilter* New();
  vtkTypeMacro(vtkPMaterialClusterExplodeFilter, vtkPolyDataAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent) override;

  ///@{
  /**
   * Set/Get the explode factor.
   * This value determines how far the points will be moved.
   * The cluster points will be translated by this value times the vector
   * that goes from the dataset center to the cluster barycenter.
   * Default is 1.0.
   */
  vtkSetMacro(ExplodeFactor, double);
  vtkGetMacro(ExplodeFactor, double);
  ///@}

  ///@{
  /**
   * Set/Get the label of the rockfill material. This material will be
   * ignored in the process. Default is 0.
   */
  vtkSetMacro(RockfillLabel, int);
  vtkGetMacro(RockfillLabel, int);
  ///@}

protected:
  vtkPMaterialClusterExplodeFilter();
  ~vtkPMaterialClusterExplodeFilter() override = default;

  int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
  int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
  int FillInputPortInformation(int port, vtkInformation* info) override;

  static void InternalProgressCallbackFunction(vtkObject*, unsigned long, void*, void*);

  double ExplodeFactor;
  int RockfillLabel;
  vtkImageData* CacheInput;
  vtkDataArray* CacheArray;
  vtkSmartPointer<vtkImageData> CacheAnalysis;
  vtkMTimeType CacheTime;

private:
  vtkPMaterialClusterExplodeFilter(const vtkPMaterialClusterExplodeFilter&) = delete;
  void operator=(const vtkPMaterialClusterExplodeFilter&) = delete;
};

#endif


u64::from(self.block_size)))
                .unwrap();
            buf_reader.seek(SeekFrom::Current(block_offset)).unwrap();

            let size_to_read = min(remaining_size, (self.block_size as i64) - block_offset);

            let mut buf = vec![0u8; size_to_read as usize];
            buf_reader.read_exact(&mut buf).unwrap();
            data.extend_from_slice(&buf);

            remaining_size -= size_to_read;
            logical_block += 1;
            block_offset = 0;
        }

        data
    }
}
<gh_stars>1-10
use super::pbrt::Float;

#[derive(Debug, Copy, Clone)]
pub struct Matrix4x4 {
    pub m: [[Float;4]; 4]
}

impl Matrix4x4 {
    pub fn new(
        t00: Float,
        t01: Float,
        t02: Float,
        t03: Float,
        t10: Float,
        t11: Float,
        t12: Float,
        t13: Float,
        t20: Float,
        t21: Float,
        t22: Float,
        t23: Float,
        t30: Float,
        t31: Float,
        t32: Float,
        t33: Float
    ) -> Matrix4x4 {
        Matrix4x4{
            m: [
                [t00, t01, t02, t03],
                [t10, t11, t12, t13],
                [t20, t21, t22, t23],
                [t30, t31, t32, t33]
            ]
        }
    }

    /// Transpose the Matrix4x4
    #[inline]
    pub fn transpose(&self) -> Matrix4x4 {
        Matrix4x4 {
            m: [
                [self.m[0][0], self.m[1][0], self.m[2][0], self.m[3][0]],
                [self.m[0][1], self.m[1][1], self.m[2][1], self.m[3][1]],
                [self.m[0][2], self.m[1][2], self.m[2][2], self.m[3][2]],
                [self.m[0][3], self.m[1][3], self.m[2][3], self.m[3][3]],
            ]
        }
    }

    /// Multiply two Matrix4x4
    pub fn mul(&self, m2: &Matrix4x4) -> Matrix4x4 {
        // This is the unrolled version of http://www.pbr-book.org/3ed-2018/Utilities/Mathematical_Routines.html#fragment-Matrix4x4PublicMethods-1
        Matrix4x4{
            m: [
                [
                    self.m[0][0] * m2.m[0][0] + self.m[0][1] * m2.m[0][0] + self.m[0][2] * m2.m[2][0] + self.m[0][3] * m2.m[3][0],
                    self.m[0][0] * m2.m[0][1] + self.m[0][1] * m2.m[0][1] + self.m[0][2] * m2.m[2][1] + self.m[0][3] * m2.m[3][1],
                    self.m[0][0] * m2.m[0][2] + self.m[0][1] * m2.m[0][2] + self.m[0][2] * m2.m[2][2] + self.m[0][3] * m2.m[3][2],
                    self.m[0][0] * m2.m[0][3] + self.m[0][1] * m2.m[0][3] + self.m[0][2] * m2.m[2][3] + self.m[0][3] * m2.m[3][3],
                ],
                [
                    self.m[1][0] * m2.m[0][0] + self.m[1][1] * m2.m[1][0] + self.m[1][2] * m2.m[2][0] + self.m[1][3] * m2.m[3][0],
                    self.m[1][0] * m2.m[0][1] + self.m[1][1] * m2.m[1][1] + self.m[1][2] * m2.m[2][1] + self.m[1][3] * m2.m[3][1],
                    self.m[1][0] * m2.m


ide*(2/8),squareSide*3/8);
    ctx.lineTo(squareSide*(4/8),squareSide*2/8);
    ctx.lineTo(squareSide*(3/8),squareSide*4/8);
    ctx.lineTo(squareSide*5/8,squareSide*4/8);
    ctx.stroke();
    ctx.fill();

    ctx.lineWidth = 1.5;
    ctx.fillRect(squareSide/4,squareSide*3/5,squareSide/2,squareSide/5);
    ctx.strokeRect(squareSide/4,squareSide*3/5,squareSide/2,squareSide/5);
    ctx.restore();
}

function drawPawn(xPosition: number, yPosition: number, factionColor: string) {
    setPieceColor(factionColor);
    ctx.save();
    ctx.translate(xPosition,yPosition);

    ctx.beginPath();
    ctx.moveTo(squareSide*3/8,squareSide*3/5);
    ctx.lineTo(squareSide*5/8,squareSide*3/5);
    ctx.lineTo(squareSide*4/8,squareSide/4);
    ctx.lineTo(squareSide*3/8,squareSide*3/5);
    ctx.stroke();
    ctx.fill();

    ctx.beginPath();
    ctx.moveTo(squareSide*4/8,squareSide*2/8);
    ctx.arc(squareSide*4/8,squareSide*2/8,squareSide/7,0,2*Math.PI);
    ctx.stroke();
    ctx.fill();

    ctx.lineWidth = 1.5;
    ctx.fillRect(squareSide/4,squareSide*3/5,squareSide/2,squareSide/5);
    ctx.strokeRect(squareSide/4,squareSide*3/5,squareSide/2,squareSide/5);
    ctx.restore();

}
function drawNothing(xPosition: number, yPosition: number){
    return;
}

drawPawn(0,squareSide,'white');
drawKnight(squareSide,0,'black');
drawRook(0,0,'white');
drawBishop(2*squareSide,0,'white');
drawQueen(3*squareSide,0,'white');
drawNothing(0,0);
//drawKing(4*squareSide,0,'black');

let allThePieces = {
    kingWhite : {
        'xPosition' : 4,
        'yPosition' : 7,
        'color'     : 'white'
    },
    kingBlack : {
        'xPosition' : 4,
        'yPosition' : 0,
        'color'     : 'black'
    },
    queenWhite : {
        'xPosition' : 3,
        'yPosition' : 7,
        'color'     : 'white'
    },
    queenBlack : {
        'xPosition' : 3,
        'yPosition' : 7,
        'color'     : 'black'
    },
    bishopWhite1 : {
        'xPosition' : 2,
        'yPosition' : 7,
        'color'     : 'white'
    },
    bishopWhite2 :{
        'xPosition' : 5,
        'yPosition' : 7,
        'color'     : 'white'
    },
    bishopBlack1 : {
        'xPosition' : 2,
        'yPosition' : 0,
        'color'     : 'black'
    },
    bishopBlack2 : {
        'xPosition' : 5,
        'yPosition' : 0,
        'color'     : 'black'
    },
    knightWhite1 : {
        'xPosition' : 1,
        'yPosition' : 7,
        'color'     : 'white'
    },
    knighWhite2 : {
        'xPosition' : 6,
        'yPosition' : 7,
        'color'     : 'black'
    },
    knighBlack1 : {
        'xPosition' : 1,


Path.DirectorySeparatorChar}";

        /// <summary>
        /// Vendedor o emisor de facturas al que
        /// corresponde el periodo.
        /// </summary>
        public Seller Seller { get; private set; }

        /// <summary>
        /// Identificador del vendedor.
        /// Debe utilizarse el identificador fiscal si existe (NIF, VAT Number...).
        /// En caso de no existir, se puede utilizar el número DUNS
        /// o cualquier otro identificador acordado.
        /// </summary>
        public string SellerID
        {
            get
            {
                return Seller.SellerID;
            }
        }

        /// <summary>
        /// Nombre del vendedor.
        /// </summary>
        public string SellerName
        {
            get
            {
                return Seller.SellerName;
            }
        }

        /// <summary>
        /// Identificador del periodo.
        /// </summary>
        p


-- ADI (IKP-81)

pitch_bias					= {{-math.rad(90.0), math.rad(90.0), math.rad(0.3)}} -- radians
pitch_min					= -math.rad(90.0)
pitch_max					= math.rad(90.0)
pitch_maxw					= math.rad(80.0) -- rad/sec
pitch_K1_operating			= 3.7
pitch_K2_operating			= 0.73
pitch_K1_nonoperating		= 3.7
pitch_K2_nonoperating		= 0.73

bank_bias					= {{0.0, math.rad(360.0), math.rad(0.5)}} -- radians
bank_min					= 0.0
bank_max					= math.rad(360.0)
bank_K1						= 6.5
bank_K2						= 1.0

warn_flag_d_value			= 11.0
warn_flag_value_min			= 0.0
warn_flag_value_max			= 1.0

d


/compare/4.6.2...4.6.3)

> 15 March 2019

- Clean ressource templates [`#294`](https://github.com/Cecilapp/Cecil/pull/294)

#### [4.6.2](https://github.com/Cecilapp/Cecil/compare/4.6.1...4.6.2)

> 14 March 2019

- Enhance rending error message [`#293`](https://github.com/Cecilapp/Cecil/pull/293)

#### [4.6.1](https://github.com/Cecilapp/Cecil/compare/4.6.0...4.6.1)

> 12 March 2019

- Fix setVariables() error message [`#290`](https://github.com/Cecilapp/Cecil/pull/290)

#### [4.6.0](https://github.com/Cecilapp/Cecil/compare/4.5.4...4.6.0)

> 12 March 2019

- Open new page in configured editor [`#289`](https://github.com/Cecilapp/Cecil/pull/289)

#### [4.5.4](https://github.com/Cecilapp/Cecil/compare/4.5.3...4.5.4)

> 8 March 2019

- Add formats: js, webmanifest [`#286`](https://github.com/Cecilapp/Cecil/pull/286)

#### [4.5.3](https://github.com/Cecilapp/Cecil/compare/4.5.2...4.5.3)

> 8 March 2019

- url option addhash false by default [`#285`](https://github.com/Cecilapp/Cecil/pull/285)
- Clean skeleton [`28c37c5`](https://github.com/Cecilapp/Cecil/commit/28c37c5904547707c8dc8a9c0564f7bbfb215c4e)
- Clean default layouts [`bb0946d`](https://github.com/Cecilapp/Cecil/commit/bb0946dd089e594ad9fec4c7ef106839a6f09c99)
- Delete googleanalytics.js.twig [`7e1cabc`](https://github.com/Cecilapp/Cecil/commit/7e1cabc82a161f0794b732f48e16ac4783a3f454)

#### [4.5.2](https://github.com/Cecilapp/Cecil/compare/4.5.1...4.5.2)

> 8 March 2019

- Clean layouts [`#284`](https://github.com/Cecilapp/Cecil/pull/284)

#### [4.5.1](https://github.com/Cecilapp/Cecil/compare/4.5.0...4.5.1)

> 5 March 2019

- Fix url() backward compatibility [`#282`](https://github.com/Cecilapp/Cecil/pull/282)

#### [4.5.0](https://github.com/Cecilapp/Cecil/compare/4.4.0...4.5.0)

> 5 March 2019

- Output formats [`#244`](https://github.com/Cecilapp/Cecil/pull/244)

#### [4.4.0](https://github.com/Cecilapp/Cecil/compare/4.3.5...4.4.0)

> 17 January 2019

- Add option to disable "page from config" generation [`#234`](https://github.com/Cecilapp/Cecil/pull/234)

#### [4.3.5](https://github.com/Cecilapp/Cecil/compare/4.3.4...4.3.5)

> 16 January 2019

- Enhance code! [`#236`](https://github.com/Cec


this.posX);
            int var6 = MathHelper.floor_double(this.posY - 0.20000000298023224D - (double)this.yOffset);
            int var7 = MathHelper.floor_double(this.posZ);
            Block var8 = this.worldObj.getBlock(var5, var6, var7);

            if (var8.getMaterial() != Material.air)
            {
                Block.SoundType var9 = var8.stepSound;
                this.playSound(var9.func_150498_e(), var9.func_150497_c() * 0.5F, var9.func_150494_d() * 0.75F);
            }
        }
    }

    protected String func_146067_o(int p_146067_1_)
    {
        return p_146067_1_ > 4 ? "game.neutral.hurt.fall.big" : "game.neutral.hurt.fall.small";
    }

    /**
     * Setups the entity to do the hurt animation. Only used by packets in multiplayer.
     */
    public void performHurtAnimation()
    {
        this.hurtTime = this.maxHurtTime = 10;
        this.attackedAtYaw = 0.0F;
    }

    /**
     * Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue
     */
    public int getTotalArmorValue()
    {
        int var1 = 0;
        ItemStack[] var2 = this.getLastActiveItems();
        int var3 = var2.length;

        for (int var4 = 0; var4 < var3; ++var4)
        {
            ItemStack var5 = var2[var4];

            if (var5 != null && var5.getItem() instanceof ItemArmor)
            {
                int var6 = ((ItemArmor)var5.getItem()).damageReduceAmount;
                var1 += var6;
            }
        }

        return var1;
    }

    protected void damageArmor(float p_70675_1_) {}

    /**
     * Reduces damage, depending on armor
     */
    protected float applyArmorCalculations(DamageSource p_70655_1_, float p_70655_2_)
    {
        if (!p_70655_1_.isUnblockable())
        {
            int var3 = 25 - this.getTotalArmorValue();
            float var4 = p_70655_2_ * (float)var3;
            this.damageArmor(p_70655_2_);
            p_70655_2_ = var4 / 25.0F;
        }

        return p_70655_2_;
    }

    /**
     * Reduces damage, depending on potions
     */
    protected float applyPotionDamageCalculations(DamageSource p_70672_1_, float p_70672_2_)
    {
        if (p_70672_1_.isDamageAbsolute())
        {
            return p_70672_2_;
        }
        else
        {
            if (this instanceof EntityZombie)
            {
                p_70672_2_ = p_70672_2_;
            }

            int var3;
            int var4;
            float var5;

            if (this.isPotionActive(Potion.resistance) && p_70672_1_ != DamageSource.outOfWorld)
            {
                var3 = (this.getActivePotionEffect(Potion.resistance).getAmplifier() + 1) * 5;
                var4 = 25 - var3;
                var5 = p_70672_2_ * (float)var4;
                p_70672_2_ = var5 / 25.0F;
            }

            if (p_70672_2_ <= 0.0F)
            {
                return 0.0F;
            }
            else
            {
                var3 = EnchantmentHelper.getEnchantmentModifierDamage(this.getLastActiveItems(), p_70672_1_);

                if (var3 > 20)
                {
                    var3 = 20;
                }


#ifndef ASYNCCRC_H
#define ASYNCCRC_H

#include <QObject>

class AsyncCRC : public QObject
{
    Q_OBJECT
public:
    explicit AsyncCRC(QObject *parent = nullptr);
    AsyncCRC(quint8 width, quint64 poly, quint64 init = 0ULL, bool refIn = false, bool refOut = false, quint64 xorOut = 0ULL);
    AsyncCRC(const AsyncCRC& obj);
    AsyncCRC &operator= (const AsyncCRC& obj);

    enum CRCFileError
    {
        OpenFileError = 0,
        ReadFileError
    };
    Q_ENUM(CRCFileError);

    Q_INVOKABLE void loadFile(const QString& path);
    Q_INVOKABLE void addData(const char* data, qint64 length);
    Q_INVOKABLE void addData(const QByteArray& data);
    Q_INVOKABLE quint64 getResult();
    Q_INVOKABLE void setNotify(bool state);
    Q_INVOKABLE void setParam(quint8 width, quint64 poly, quint64 init = 0ULL, bool refIn = false, bool refOut = false, quint64 xorOut = 0ULL);
    Q_INVOKABLE void reset();
protected:
    bool m_notify = false;

    quint64 m_crc;
    quint64 m_table[8][256];
    bool m_isInitVal = true;

    quint8 m_width;
    quint64 m_poly, m_initVal, m_xorOut, m_mask;
    bool m_refIn, m_refOut;

    quint64 reflect(quint64 data, quint8 len);
signals:
    void result(quint64 crcResult);
    void fileError(AsyncCRC::CRCFileError error);
};

#endif // ASYNCCRC_H


olor(palette, fallback)
            val light = shiftBackgroundColorForLightText(toReturn, PALETTE_DARKEN_INTENSITY_MEDIUM)
            val dark = shiftBackgroundColorForLightText(toReturn, PALETTE_DARKEN_INTENSITY_HIGH)
            if (light == dark || toReturn == fallback) {
                return fallback
            }
            return dark
        }

        @ColorInt
        fun getColor(palette: Palette?, fallback1: Int, fallback2: Int): Pair<Int, Int> {
            val toReturn = getPaletteColor(palette, fallback1)
            val light = shiftBackgroundColorForLightText(toReturn, PALETTE_DARKEN_INTENSITY_MEDIUM)
            val dark = shiftBackgroundColorForLightText(toReturn, PALETTE_DARKEN_INTENSITY_HIGH)
            if (light == dark || toReturn == fallback1) {
                return Pair(fallback1, fallback2)
            }
            return Pair(light, dark)
        }

        /**
         * Animates filenames textview to marquee after a delay. Make sure to set [ ][TextView.setSelected] to false in order to stop the marquee later
         */
        @JvmStatic
        fun marqueeAfterDelay(delayInMillis: Int, marqueeView: TextView) {
            marqueeView.isSelected = false
            Handler()
                .postDelayed(
                    {
                        // marquee works only when text view has focus
                        marqueeView.isSelected = true
                    },
                    delayInMillis.toLong()
                )
        }

        @RequiresApi(Build.VERSION_CODES.LOLLIPOP_MR1)
        fun getAppsUsageStats(context: Context, days: Int): List<UsageStats> {
            val usm: UsageStatsManager = (
                context.getSystemService(Context.USAGE_STATS_SERVICE)
                    as UsageStatsManager
                )
            val endTime = LocalDateTime.now()
            val startTime = LocalDateTime.now().minusDays(days.toLong())
            return usm.queryUsageStats(
                UsageStatsManager.INTERVAL_DAILY,
                startTime
                    .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(),
                endTime
                    .atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
            )
        }

        /**
         * https://stackoverflow.com/questions/28921136/how-to-check-if-android-permission-package-usage-stats-permission-is-given
         */
        @RequiresApi(Build.VERSION_CODES.M)
        fun checkUsageStatsPermission(context: Context): Boolean {
            val appOps = context
                .getSystemService(Context.APP_OPS_SERVICE) as AppOpsManager
            val mode = appOps.checkOpNoThrow(
                "android:get_usage_stats",
                Process.myUid(), context.packageName
            )
            return if (mode != AppOpsManager.MODE_ALLOWED) {
                getAppsUsageStats(context, 30).isNotEmpty()
            } else {
                true
            }
        }

        fun uninstallPackage(pkg: String, activity: Activity): Boolean {
            try {
                val intent = Intent(Intent.ACTION_DELETE)
                intent.data = Uri.parse("package:$pkg")
                activity.startActivity(intent)
            } catch (e: Exception) {
                Toast.makeText(activity, "" + e, Toast.LENGTH_SHORT).show()
                log.warn("failed to uninstall apk", e)
                return false
            }
            return true
        }

        /**
         * Check if an App is under /system or has been installed as an update to a built-in system
         * application.
         */
        fun isAppInSystemPartition(applicationInfo: ApplicationInfo): Boolean {
            return (
                (
                    applicationInfo.flags
                        and (ApplicationInfo.FLAG_SYSTEM or ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)
                    )
                    !=


#ifndef _INNER_PROD_LAYER_H_
#define _INNER_PROD_LAYER_H_
#include "struct_defs.h"

typedef struct {
	// No of input neurons
	int nInput;
	// No of output neurons
	int nOutput;
	// No of fraction bits in weight and bias representation
	int nKerFractionBits;
	// No of fraction bits in activation representation
	int nMapFractionBits;
} IP_INFO_T;

// Inner product layer context
typedef struct {
	// Floating point output map buffer for this layer.
	FL_MAP_PIXEL *pFloatOutput;
	// Fixed point output map buffer for this layer.
	FP_MAP_PIXEL *pFixOutput;
	// Fixed point weight
	FP_KERNEL *pFixWeight;
	// Floating point weight matrix
	FL_KERNEL *pFloatWeight;
	// Fixed point bias
	FP_KERNEL *pFixBias;
	// Floating point bias
	FL_KERNEL *pFloatBias;
	// Arithmetic mode to be used to compute the output. float/fixed point
	LYR_ARITH_MODE_E lyrArithMode;
	// Layer optimization mode
	OPT_TYPE_E optType;
	// Parameters
	IP_INFO_T ipInfo;

} IP_LYR_CTX_T;

APP_STATUS_E inner_prod_layer(IP_LYR_CTX_T *pIpCtx,
	FL_MAP_PIXEL *pFloatInput);
#endif // _INNER_PROD_LAYER_H_


.type	KeccakF1600_cext,%function
.align	5
KeccakF1600_cext:
	AARCH64_SIGN_LINK_REGISTER
	stp	x29,x30,[sp,#-80]!
	add	x29,sp,#0
	stp	d8,d9,[sp,#16]		// per ABI requirement
	stp	d10,d11,[sp,#32]
	stp	d12,d13,[sp,#48]
	stp	d14,d15,[sp,#64]
	ldp	d0,d1,[x0,#8*0]
	ldp	d2,d3,[x0,#8*2]
	ldp	d4,d5,[x0,#8*4]
	ldp	d6,d7,[x0,#8*6]
	ldp	d8,d9,[x0,#8*8]
	ldp	d10,d11,[x0,#8*10]
	ldp	d12,d13,[x0,#8*12]
	ldp	d14,d15,[x0,#8*14]
	ldp	d16,d17,[x0,#8*16]
	ldp	d18,d19,[x0,#8*18]
	ldp	d20,d21,[x0,#8*20]
	ldp	d22,d23,[x0,#8*22]
	ldr	d24,[x0,#8*24]
	bl	KeccakF1600_ce
	ldr	x30,[sp,#8]
	stp	d0,d1,[x0,#8*0]
	stp	d2,d3,[x0,#8*2]
	stp	d4,d5,[x0,#8*4]
	stp	d6,d7,[x0,#8*6]
	stp	d8,d9,[x0,#8*8]
	stp	d10,d11,[x0,#8*10]
	stp	d12,d13,[x0,#8*12]
	stp	d14,d15,[x0,#8*14]
	stp	d16,d17,[x0,#8*16]
	stp	d18,d19,[x0,#8*18]
	stp	d20,d21,[x0,#8*20]
	stp	d22,d23,[x0,#8*22]
	str	d24,[x0,#8*24]

	ldp	d8,d9,[sp,#16]
	ldp	d10,d11,[sp,#32]
	ldp	d12,d13,[sp,#48]
	ldp	d14,d15,[sp,#64]
	ldr	x29,[sp],#80
	AARCH64_VALIDATE_LINK_REGISTER
	ret
.size	KeccakF1600_cext,.-KeccakF1600_cext
.globl	SHA3_absorb_cext
.type	SHA3_absorb_cext,%function
.align	5
SHA3_absorb_cext:
	AARCH64_SIGN_LINK_REGISTER
	stp	x29,x30,[sp,#-80]!
	add	x29,sp,#0
	stp	d8,d9,[sp,#16]		// per ABI requirement
	stp	d10,d11,[sp,#32]
	stp	d12,d13,[sp,#48]
	stp	d14,d15,[sp,#64]
	ldp	d0,d1,[x0,#8*0]
	ldp	d2,d3,[x0,#8*2]
	ldp	d4,d5,[x0,#8*4]
	ldp	d6,d7,[x0,#8*6]
	ldp	d8,d9,[x0,#8*8]
	ldp	d10,d11,[x0,#8*10]
	ldp	d12,d13,[x0,#8*12]
	ldp	d14,d15,[x0,#8*14]
	ldp	d16,d17,[x0,#8*16]


ze] = tmp;     /* recover the char at that place */
            where[i++] = item - 1;
        }
    }

    return 0;
}

static int_t dReadValues(FILE *fp, int_t n, double *destination, int_t perline,
        int_t persize)
{
    register int_t i, j, k, s;
    char tmp, buf[100];

    i = 0;
    while (i < n) {
        fgets(buf, 100, fp);    /* read a line at a time */
        for (j=0; j<perline && i<n; j++) {
            tmp = buf[(j+1)*persize];     /* save the char at that place */
            buf[(j+1)*persize] = 0;       /* null terminate */
            s = j*persize;
            for (k = 0; k < persize; ++k) /* No D_ format in C */
                if ( buf[s+k] == 'D' || buf[s+k] == 'd' ) buf[s+k] = 'E';
            destination[i++] = atof(&buf[s]);
            buf[(j+1)*persize] = tmp;     /* recover the char at that place */
        }
    }

    return 0;
}

void
dreadrb(int_t *nrow, int_t *ncol, int_t *nonz,
        double **nzval, int_t **rowind, int_t **colptr)
{

    register int_t i, j, numer_lines = 0;
    int_t tmp, colnum, colsize, rownum, rowsize, valnum, valsize;
    char buf[100], type[4];
    FILE *fp;

    fp = stdin;

    /* Line 1 */
    fgets(buf, 100, fp);
    fputs(buf, stdout);

    /* Line 2 */
    for (i=0; i<4; i++) {
        j = fscanf(fp, "%14c", buf); buf[14] = 0;
        tmp = atoi(buf); /*sscanf(buf, "%d", &tmp);*/
        if (i == 3) numer_lines = tmp;
    }
    dDumpLine(fp);

    /* Line 3 */
    j = fscanf(fp, "%3c", type);
    j = fscanf(fp, "%11c", buf); /* pad */
    type[3] = 0;
#ifdef DEBUG
    printf("Matrix type %s\n", type);
#endif

    fscanf(fp, "%14c", buf); *nrow = atoi(buf);
    fscanf(fp, "%14c", buf); *ncol = atoi(buf);
    fscanf(fp, "%14c", buf); *nonz = atoi(buf);
    fscanf(fp, "%14c", buf); tmp = atoi(buf);

    if (tmp != 0)
        printf("This is not an assembled matrix!\n");
    if (*nrow != *ncol)
        printf("Matrix is not square.\n");
    dDumpLine(fp);

    /* Allocate storage for the three arrays ( nzval, rowind, colptr ) */
    dallocateA(*ncol, *nonz, nzval, rowind, colptr);

    /* Line 4: format statement */
    j = fscanf(fp, "%16c", buf);
    dParseIntFormat(buf, &colnum, &colsize);
    j = fscanf(fp, "%16c", buf);
    dParseIntFormat(buf, &rownum, &rowsize);
    j = fscanf(fp, "%20c", buf);
    dParseFloatFormat(buf, &valnum, &valsize);
    dDumpLine(fp);

#ifdef DEBUG
    printf("%d rows, %d nonzeros\n", *nrow, *nonz);
    printf("colnum %d, colsize %d\n", colnum, colsize);
    printf("rownum %d, rowsize %d\n", rownum, rowsize);
    printf("valnum %d, valsize %d\n", valnum, valsize);
#endif

    ReadVector(fp, *ncol+1, *colptr, colnum, colsize);
    ReadVector(fp, *nonz, *rowind, rownum, rowsize);
    if ( numer_lines ) {
        dReadValues(fp, *nonz, *nzval, valnum, valsize);
    }

    fclose(fp);
}


f6
faddd %f0,%f40,%f6

# qhasm: 							*(float64 *) (r + 72) = h192
# asm 1: std <h192=float64#3,[<r=int64#1+72]
# asm 2: std <h192=%f4,[<r=%i0+72]
std %f4,[%i0+72]

# qhasm: closest235 -= alpha235
# asm 1: fsubd <closest235=float64#4,<alpha235=float64#21,>closest235=float64#3
# asm 2: fsubd <closest235=%f6,<alpha235=%f40,>closest235=%f4
fsubd %f6,%f40,%f4

# qhasm: 							*(float64 *) (r + 8) = h22
# asm 1: std <h22=float64#2,[<r=int64#1+8]
# asm 2: std <h22=%f2,[<r=%i0+8]
std %f2,[%i0+8]

# qhasm: h214 -= closest235
# asm 1: fsubd <h214=float64#1,<closest235=float64#3,>h214=float64#1
# asm 2: fsubd <h214=%f0,<closest235=%f4,>h214=%f


also returns the stale value as the second returned value if available.
* upgraded LuaRestyLockLibrary to 0.04.
** bugfix: the shared dictionary would incorrectly get unref'd for multiple times when the [[lock()|https://github.com/openresty/lua-resty-lock#lock]] and/or [[unlock()|https://github.com/openresty/lua-resty-lock#unlock]] methods are called more than once. thanks Peng Wu for the report and Dejiang Zhu for the patch.
* upgraded EchoNginxModule to 0.57.
** bugfix: [[$echo_client_request_headers|https://github.com/openresty/echo-nginx-module#echo_client_request_headers]]: buffer overflow and the "buffer error" exception might happen for massively pipelined downstream requests.
** bugfix: [[$echo_client_request_headers|https://github.com/openresty/echo-nginx-module#echo_client_request_headers]]: we might change nginx's internal buffer pointers, which might cause bad side-effects.
* upgraded DrizzleNginxModule to 0.1.8.
** bugfix: fixed compilation error with nginx 1.7.5+ because nginx 1.7.5+ changes the API in the events subsystem.
* upgraded PostgresNginxModule to 1.0rc5.
** bugfix: fixed compilation error with nginx 1.7.5+ because nginx 1.7.5+ changes the API in the events subsystem.
* upgraded CoolkitNginxModule to 0.2rc2.
** bugfix: compilation failed when PCRE was disabled in the nginx build.
** feature: added the "$location" variable, by Piotr Sikora.
* upgraded SetMiscNginxModule to 0.27.
** bugfix: bugfix: fixed build failure when {{{--with-mail_ssl_module}}} is specified while {{{--with-http_ssl_module}}} is not. thanks Xiaochen Wang for the report.
See ChangeLog1007004 for change log for OpenResty 1.7.4.x.

<<toolbar permalink>>
! Version 1.7.10.2 - 3 July 2015
* bugfix: ./configure: fixed the {{{--without-http_rewrite_module}}} option by disabling NginxDevelKit automatically; also automatically disable the EncryptedSessionNginxModule when NginxDevelKit is disabled.
* bugfix: ./configure: removed hacks to work around an old bug in LuaNginxModule's build system (just recently fixed in LuaNginxModule).
* bugfix: LuaJIT compilation might fail when old gcc 4 compilers are used (like gcc 4.1.0). this regression had appeared in OpenResty 1.7.7.2. thanks aseiot for the report.
* upgraded RestyCLI to 0.03.
** bugfix: resty: command-line options did not pass to the user Lua script unless {{{--}}} was intentionally specified. now standalone Lua scripts with a shebang line work out of the box (if LuaJIT is used, which is the default). thanks neomantra for the report.
** bugfix: resty: now sends {{{error_log}}} to {{{stderr}}} instead of the system-specific path {{{/dev/stderr}}}. thanks Evan Wies for the patch.
** doc: added the new section "Test Suite" as per Enrique Garcia's request.
** tests: fixed test failures on Mac OS X. thanks Enrique García for the report.
* upgraded LuaNginxModule to 0.9.16.
** feature: [[ngx.encode_base64()|https://github.com/openresty/lua-nginx-module#ngxencode_base64]]: added support for the "no_padding" boolean argument to disable padding when a true


 the result from the tool itself.
        # The model's final_answer is just a human-friendly summary.
        return tool_result

    async def run(self, plan: list[ProcessStep]):
        print(f"\n[{self.process_id}] ======= STARTING DYNAMIC EXECUTION =======")
        completed_steps = {} # Stores step_id -> result

        i = 0
        while i < len(plan):
            step = plan[i]
            i += 1

            if step.status != "pending": continue

            if not all(dep_id in completed_steps for dep_id in step.dependencies):
                plan.append(step)
                continue

            # --- CONTEXT PASSING ---
            # Create context from the results of dependency steps
            context = ""
            for dep_id in step.dependencies:
                prev_result = completed_steps.get(dep_id)
                if prev_result:
                    context += f"The result of a previous step was: {prev_result.result}\n"
            if not context:
                context = "This is the first step."

            step.status = "running"
            result = await self._execute_step(step, context)
            step.output_result = result.model_dump()

            if result.status == "failed":
                step.status = "failed"
                self.run_history.append(f"ATTEMPTED: '{step.step_name}' but it FAILED with error: {result.error}")
                print(f"[{self.process_id}] Step '{step.step_name}' failed. Triggering re-planning...")

                planner = Planner(self.process_id)
                recovery_steps = await planner.generate_recovery_plan(
                    self.original_prompt, self.run_history, step
                )
                if recovery_steps:
                    print(f"[{self.process_id}] Received {len(recovery_steps)} recovery steps. Splicing into plan.")
                    for r_step in reversed(recovery_steps):
                        # Make new steps depend on the last successful step before the failure
                        if step.dependencies: r_step.dependencies = [step.dependencies[-1]]
                        plan.insert(i, r_step)
                else:
                    print(f"[{self.process_id}] Planner did not return a recovery plan. Ending execution.")
                    break
            else:
                step.status = "completed"
                self.run_history.append(f"SUCCESS: '{step.step_name}'. Result: {result.result}")
                completed_steps[step.step_id] = result

        print(f"[{self.process_id}] ======== EXECUTION FINISHED ========")


padding:5px 12px;\n    height:16px;\n    line-height:16px;\n    border:1px solid #c4c4c4;\n    border-radius:2px;\n    font-size:100%;\n    color:#666;\n    background-color:#efefef;\n    background-image:linear-gradient(#f8f8f8,#e5e5e5);\n    background-repeat:repeat-x;\n    vertical-align:middle\n}\n.graybtn:hover {\n    text-decoration:none;\n    color:#666;\n    background:#e5e5e5\n}\n\n\n"],sourceRoot:""}])},function(n,e,t){var o=t(5);e=n.exports=t(0)(!0),e.push([n.i,"\n#header[data-v-1ed4917f] {\n    width:100%\n}\n#header .hd_bar[data-v-1ed4917f] {\n    background-color:#222;\n    height:57px\n}\n#header .logo[data-v-1ed4917f] {\n    position:absolute;\n    top:0;\n    left:0\n}\n.hd_bar .bd[data-v-1ed4917f] {\n    width:826px;\n    height:57px;\n    margin:0 auto;\n    position:relative;\n    z-index:100\n}\n.hd_bar .hd_lbar[data-v-1ed4917f] {\n    float:left;\n    width:310px;\n    overflow:hidden;\n    padding-left:6px;\n    display:none\n}\n.hd_bar .hd_lbar a[data-v-1ed4917f] {\n    display:inline-block;\n    height:17px;\n    line-height:17px;\n    color:#eee;\n    padding:20px 12px;\n    background-color:#222;\n    vertical-align:top\n}\n.hd_bar .hd_lbar a[data-v-1ed4917f]:hover {\n    background-color:#666;\n    color:#fff;\n    text-decoration:none\n}\n.hd_bar .hd_lbar .iconfont[data-v-1ed4917f] {\n    margin-right:5px;\n    color:#999;\n    vertical-align:top\n}\n.hd_bar .level[data-v-1ed4917f] {\n    font-family:\\5b8b\\4f53;\n    color:#bf001a;\n    margin-left:5px;\n    font-size:12px\n}\n.hd_bar .hd_rbar[data-v-1ed4917f] {\n    float:right;\n    width:300px;\n    color:#eee;\n    text-align:right\n}\n.hd_bar .hd_rbar a[data-v-1ed4917f] {\n    display:inline-block;\n    height:57px;\n    line-height:57px;\n    color:#eee;\n    padding:0 12px;\n    background-color:#222\n}\n.hd_bar .hd_rbar a[data-v-1ed4917f]:hover {\n    background-color:#444;\n    color:#fff;\n    text-decoration:none\n}\n.hd-step[data-v-1ed4917f] {\n    float:right;\n    width:500px;\n    padding-top:18px\n}\n.hd-step li[data-v-1ed4917f] {\n    float:left;\n    width:116px;\n    height:28px;\n    color:#bbb;\n    background:url("+o(t(25))+") 0 0 no-repeat;\n    font-size:14px;\n    position:relative\n}\n.hd-step li em[data-v-1ed4917f] {\n    font-weight:bold;\n    font-size:16px;\n    color:#fff;\n    padding:0 12px 0 8px;\n    font-family:arial;\n    text-shadow:1px 1px 1px rgba(0,0,0,0.3)\n}\n.hd


7ffffa6 	b	460b2c <uw_frame_state_for+0x1ac>
  460c98:	f9401bb7 	ldr	x23, [x29, #48]
  460c9c:	528000a0 	mov	w0, #0x5                   	// #5
  460ca0:	a941d7f4 	ldp	x20, x21, [sp, #24]
  460ca4:	a8c77bfd 	ldp	x29, x30, [sp], #112
  460ca8:	d65f03c0 	ret
  460cac:	d503201f 	nop
  460cb0:	aa1803e0 	mov	x0, x24
  460cb4:	b5000220 	cbnz	x0, 460cf8 <uw_frame_state_for+0x378>
  460cb8:	a943e7b8 	ldp	x24, x25, [x29, #56]
  460cbc:	f94027ba 	ldr	x26, [x29, #72]
  460cc0:	a942dfb6 	ldp	x22, x23, [x29, #40]
  460cc4:	52800060 	mov	w0, #0x3                   	// #3
  460cc8:	f9400bb3 	ldr	x19, [x29, #16]
  460ccc:	a941d7f4 	ldp	x20, x21, [sp, #24]
  460cd0:	a8c77bfd 	ldp	x29, x30, [sp], #112
  460cd4:	d65f03c0 	ret
  460cd8:	39402ac0 	ldrb	w0, [x22, #10]
  460cdc:	7101a01f 	cmp	w0, #0x68
  460ce0:	54ffe9c1 	b.ne	460a18 <uw_frame_state_for+0x98>  // b.any
  460ce4:	f8408420 	ldr	x0, [x1], #8
  460ce8:	91002ed3 	add	x19, x22, #0xb
  460cec:	f9033e80 	str	x0, [x20, #1656]
  460cf0:	17ffff4a 	b	460a18 <uw_frame_state_for+0x98>
  460cf4:	d503201f 	nop
  460cf8:	aa0003f8 	mov	x24, x0
  460cfc:	17ffff8e 	b	460b34 <uw_frame_state_for+0x1b4>
  460d00:	d2800193 	mov	x19, #0xc                   	// #12
  460d04:	17ffff9d 	b	460b78 <uw_frame_state_for+0x1f8>
  460d08:	7100207f 	cmp	w3, #0x8
  460d0c:	54fffda1 	b.ne	460cc0 <uw_frame_state_for+0x340>  // b.any
  460d10:	39400420 	ldrb	w0, [x1, #1]
  460d14:	35fffd60 	cbnz	w0, 460cc0 <uw_frame_state_for+0x340>
  460d18:	a903e7b8 	stp	x24, x25, [x29, #56]
  460d1c:	91000821 	add	x1, x1, #0x2
  460d20:	f90027ba 	str	x26, [x29, #72]
  460d24:	39400023 	ldrb	w


 EmojiResource(R.drawable.ic_verification_58, R.string.verification_emoji_58)
        59 -> EmojiResource(R.drawable.ic_verification_59, R.string.verification_emoji_59)
        60 -> EmojiResource(R.drawable.ic_verification_60, R.string.verification_emoji_60)
        61 -> EmojiResource(R.drawable.ic_verification_61, R.string.verification_emoji_61)
        62 -> EmojiResource(R.drawable.ic_verification_62, R.string.verification_emoji_62)
        63 -> EmojiResource(R.drawable.ic_verification_63, R.string.verification_emoji_63)
        else -> error("Cannot happen ($this)!")
    }
}
/*
 * Copyright 2024 New Vector Ltd.
 *
 * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
 * Please see LICENSE files in the repository root for full details.
 */

package io.element.android.features.roomdirectory.impl.root

import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.roomdirectory.api.RoomDescription
import io.element.android.libraries.matrix.api.core.RoomAlias
import io.element.android.libraries.matrix.api.core.RoomId
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf

open class RoomDirectoryStateProvider : PreviewParameterProvider<RoomDirectoryState> {
    override val values: Sequence<RoomDirectoryState>
        get() = sequenceOf(
            aRoomDirectoryState(),
            aRoomDirectoryState(
                query = "Element",
                roomDescriptions = aRoomDescriptionList(),
            ),
            aRoomDirectoryState(
                query = "Element",
                roomDescriptions = aRoomDescriptionList(),
                displayLoadMoreIndicator = true,
            ),
        )
}

fun aRoomDirectoryState(
    query: String = "",
    displayLoadMoreIndicator: Boolean = false,
    roomDescriptions: ImmutableList<RoomDescription> = persistentListOf(),
    eventSink: (RoomDirectoryEvents) -> Unit = {},
) = RoomDirectoryState(
    query = query,
    roomDescriptions = roomDescriptions,
    displayLoadMoreIndicator = displayLoadMoreIndicator,
    eventSink = eventSink,
)

fun aRoomDescriptionList(): ImmutableList<RoomDescription> {
    return persistentListOf(
        RoomDescription(
            roomId = RoomId("!exa:matrix.org"),
            name = "Element X Android",
            topic = "Element X is a secure, private and decentralized messenger.",
            alias = RoomAlias("#element-x-android:matrix.org"),
            avatarUrl = null,
            joinRule = RoomDescription.JoinRule.PUBLIC,
            numberOfMembers = 2765,
        ),
        RoomDescription(
            roomId = RoomId("!exi:matrix.org"),
            name = "Element X iOS",
            topic = "Element X is a secure, private and decentralized messenger.",
            alias = RoomAlias("#element-x-ios:matrix.org"),
            avatarUrl = null,
            joinRule = RoomDescription.JoinRule.UNKNOWN,
            numberOfMembers = 356,
        )
    )
}
/*
 * Copyright 2024 New Vector Ltd.
 *
 * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
 * Please see LICENSE files in the repository root for full details.
 */

package io.element.android.features.messages.impl

import androidx.activity.ComponentActivity
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import


.Byte.High=data;
         TRACE_SUSIE2("Poke(SPRDLINEH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (HPOSSTRTL&0xff):
         mHPOSSTRT.Byte.Low=data;
         mHPOSSTRT.Byte.High=0;
         TRACE_SUSIE2("Poke(HPOSSTRTL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (HPOSSTRTH&0xff):
         mHPOSSTRT.Byte.High=data;
         TRACE_SUSIE2("Poke(HPOSSTRTH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (VPOSSTRTL&0xff):
         mVPOSSTRT.Byte.Low=data;
         mVPOSSTRT.Byte.High=0;
         TRACE_SUSIE2("Poke(VPOSSTRTL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (VPOSSTRTH&0xff):
         mVPOSSTRT.Byte.High=data;
         TRACE_SUSIE2("Poke(VPOSSTRTH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (SPRHSIZL&0xff):
         mSPRHSIZ.Byte.Low=data;
         mSPRHSIZ.Byte.High=0;
         TRACE_SUSIE2("Poke(SPRHSIZL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (SPRHSIZH&0xff):
         mSPRHSIZ.Byte.High=data;
         TRACE_SUSIE2("Poke(SPRHSIZH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (SPRVSIZL&0xff):
         mSPRVSIZ.Byte.Low=data;
         mSPRVSIZ.Byte.High=0;
         TRACE_SUSIE2("Poke(SPRVSIZL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (SPRVSIZH&0xff):
         mSPRVSIZ.Byte.High=data;
         TRACE_SUSIE2("Poke(SPRVSIZH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (STRETCHL&0xff):
         mSTRETCH.Byte.Low=data;
         mSTRETCH.Byte.High=0;
         TRACE_SUSIE2("Poke(STRETCHL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (STRETCHH&0xff):
         TRACE_SUSIE2("Poke(STRETCHH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         mSTRETCH.Byte.High=data;
         break;
      case (TILTL&0xff):
         mTILT.Byte.Low=data;
         mTILT.Byte.High=0;
         TRACE_SUSIE2("Poke(TILTL,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (TILTH&0xff):
         mTILT.Byte.High=data;
         TRACE_SUSIE2("Poke(TILTH,%02x) at PC=$%04x",data,mSystem.mCpu->GetPC());
         break;
      case (SPRDOFFL&0xff):
         TRACE_SUSIE2("Poke(SPRDOFFL,%02x) at PC=$%04x",


	return
	}
	if g.EdgeGivenTag(10) != nil {
		tst.Error("g.EdgeGivenTag(10) should be nil\n")
		return
	}
	chk.Ints(tst, "Face(0) => xmin", g.Face(0), []int{0, 3, 6, 9, 12, 15, 18, 21})
	chk.Ints(tst, "Face(1) => xmax", g.Face(1), []int{2, 5, 8, 11, 14, 17, 20, 23})
	chk.Ints(tst, "Face(2) => ymin", g.Face(2), []int{0, 1, 2, 12, 13, 14})
	chk.Ints(tst, "Face(3) => ymax", g.Face(3), []int{9, 10, 11, 21, 22, 23})
	chk.Ints(tst, "Face(4) => zmin", g.Face(4), []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11})
	chk.Ints(tst, "Face(5) => zmax", g.Face(5), []int{12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23})
	chk.Ints(tst, "FaceGivenTag(100) => xmin", g.FaceGivenTag(100), g.Face(0))
	chk.Ints(tst, "FaceGivenTag(101) => xmax", g.FaceGivenTag(101), g.Face(1))
	chk.Ints(tst, "FaceGivenTag(200) => ymin", g.FaceGivenTag(200), g.Face(2))
	chk.Ints(tst, "FaceGivenTag(201) => ymax", g.FaceGivenTag(201), g.Face(3))
	chk.Ints(tst, "FaceGivenTag(300) => zmin", g.FaceGivenTag(300), g.Face(4))
	chk.Ints(tst, "FaceGivenTag(301) => zmax", g.FaceGivenTag(301), g.Face(5))
	chk.Ints(tst, "FaceGivenTag(123) => nil", g.FaceGivenTag(123), nil)
	if g.FaceGivenTag(123) != nil {
		tst.Error("g.FaceGivenTag(123) should be nil\n")
		return
	}
	chk.Ints(tst, "Boundary(100) => xmin", g.Boundary(100), g.Face(0))
	chk.Ints(tst, "Boundary(101) => xmax", g.Boundary(101), g.Face(1))
	chk.Ints(tst, "Boundary(200) => ymin", g.Boundary(200), g.Face(2))
	chk.Ints(tst, "Boundary(201) => ymax", g.Boundary(201), g.Face(3))
	chk.Ints(tst, "Boundary(300) => zmin", g.Boundary(300), g.Face(4))
	chk.Ints(tst, "Boundary(301) => zmax", g.Boundary(301), g.Face(5))
	if g.Boundary(10) != nil {
		tst.Error("g.Boundary(10) should be nil\n")
		return
	}

	// unit normal
	io.Pl()
	N := la.NewVector(g.Ndim())
	for _, I := range []int{0, 9, 21} {
		g.UnitNormal(N, 100, I)
		chk.Array(tst, "unit normal", 1e-15, N, []float64{-1, 0, 0})
	}
	for _, I := range []int{2, 14, 23} {
		g.UnitNormal(N, 101


    }

    &:not(.expander):not(:active):hover.activatable:not(:selected),
    &.expander row.header:not(:active):hover.activatable:not(:selected) {
      background-color: hdymix($fg_color, $base_color, 0.95);
    }

    &,
    list > row {
      border-color: hdyalpha($borders_color, 0.7);
      border-style: solid;
      transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
    }

    // Top border
    &:not(:last-child) {
      border-width: 1px 1px 0px 1px;
    }

    // Rounded top
    &:first-child,
    &.expander:first-child row.header,
    &.expander:checked,
    &.expander:checked row.header,
    &.expander:checked + row,
    &.expander:checked + row.expander row.header {
      @include rounded-border(top);
    }

    // Bottom border
    &:last-child,
    &.checked-expander-row-previous-sibling,
    &.expander:checked {
      border-width: 1px;
    }

    // Rounded bottom
    &:last-child,
    &.checked-expander-row-previous-sibling,
    &.expander:checked,
    &.expander:not(:checked):last-child row.header,
    &.expander:not(:checked).checked-expander-row-previous-sibling row.header,
    &.expander.empty:checked row.header,
    &.expander list.nested > row:last-child {
      @include rounded-border(bottom);
    }

    // Add space around expanded rows
    &.expander:checked:not(:first-child),
    &.expander:checked + row {
      margin-top: 6px;
    }
  }
}

// List button

button.list-button:not(:active):not(:checked):not(:hover) {
  background: none;
  border: 1px solid hdyalpha($borders_color, 0.5);
  box-shadow: none;
}

// Unified window

window.csd.unified:not(.solid-csd):not(.fullscreen) {
  // Remove the sheen on headerbar...
  headerbar {
    // box-shadow: inset 0 1px rgba(255, 255, 255, if($variant == 'light', 0.7, 0)); Yaru: drop headerbar box-shadow overwrite

    &.selection-mode {
      box-shadow: none;
    }
  }

  // ...and add it on the window itself
  > decoration-overlay {
    // Use a white sheen instead of @borders, as it has to be neutral enough
    // for any content and not just headerbar background
    // box-shadow: inset 0 1px rgba(255, 255, 255, if($variant == 'light', 0.34, 0.065)); Yaru: drop headerbar box-shadow overwrite
  }

  &:not(.tiled):not(.tiled-top):not(.tiled-bottom):not(.tiled-left):not(.tiled-right):not(.maximized) {
    &,
    > decoration,
    > decoration-overlay {
      border-radius: 8px;
    }
  }
}
/*left & right not set for ssd by metacity,mutter, g-s, include this case*/
headerbar button.minimize.titlebutton,
headerbar button.maximize.titlebutton,
headerbar button.close.titlebutton,
headerbar button.minimize.titlebutton:backdrop,
headerbar button.maximize.titlebutton:backdrop,
headerbar button.close.titlebutton:backdrop,
/*other WMs*/
headerbar .right button.minimize.titlebutton,
headerbar .right button.minimize.titlebutton:backdrop,
headerbar .right:dir(rtl) button.minimize.titlebutton,
headerbar .right:dir(rtl) button.minimize.titlebutton:backdrop,
headerbar .left button.minimize.titlebutton,
headerbar .left button.minimi


#ifndef _RECURSIVE_FS_ITERATOR_H_
#define _RECURSIVE_FS_ITERATOR_H_

#include <functional>
#include <string>
#include <vector>

#include "FatfsDelegate.h"
#include "VfsIterator.h"
#include "fatfs/ff.h"

class RecursiveFsIterator : public VfsIterator {
   public:
    using skipDirectoryCb = std::function<bool(const std::string&)>;

   public:
    RecursiveFsIterator(FatfsDelegate& fatfsDelegate, const std::string& prefix = "/");
    ~RecursiveFsIterator();

    RecursiveFsIterator& AddFile(const std::string& path);
    RecursiveFsIterator& SetSkipDirectory(skipDirectoryCb skipDirectory);

    State GetState() override;
    State Next() override;
    const std::string& GetCurrentEntry() override;
    bool IsDirectory() override;
    void ReadCurrent(read_callback cb) override;

    std::string GetFullPath() const;

   private:
    void CloseDir();
    FRESULT OpenDir(const std::string& path);

    std::string AmputatePrefix(const std::string& path);

   private:
    State state{State::initial};
    std::string prefix;

    std::vector<std::string> files;
    std::vector<std::string> directories;

    uint32_t directoryIndex{0};

    bool scanning{false};
    bool cleanup{false};

    std::string currentEntry;
    std::string entryFullPath;
    std::string failingPath;

    DIR dir;
    FILINFO filinfo;

    FatfsDelegate& fatfsDelegate;
    skipDirectoryCb skipDirectory;

   private:
    RecursiveFsIterator(const RecursiveFsIterator&) = delete;
    RecursiveFsIterator(RecursiveFsIterator&&) = delete;
    RecursiveFsIterator& operator=(const RecursiveFsIterator&) = delete;
    RecursiveFsIterator& operator=(RecursiveFsIterator&&) = delete;
};

#endif  // _RECURSIVE_FS_ITERATOR_H_


  public int Month = -1;

        public List<JidaoCell> Cells = new List<JidaoCell>();
    }

    public class JidaoYear
    {
        public int Year = -1;

        public List<JidaoMonth> Months = new List<JidaoMonth>();

        public JidaoYear(int nYear, string strSource)
        {
            this.Year = nYear;

            // 创建每个月
            for (int nMonth = 1; nMonth < 13; nMonth++)
            {
                JidaoMonth month = new JidaoMonth();
                month.Container = this;
                month.Month = nMonth;
                this.Months.Add(month);

                // 预先扩展好Cells数组
                int nDays = DateTime.DaysInMonth(nYear, nMonth);
                for (int i = 0; i < nDays; i++)
                {
                    month.Cells.Add(new JidaoCell(strSource));
                }
            }
        }

        public JidaoMonth FindMonth(int nMonth)
        {
            Debug.Assert(nMonth >= 1 && nMonth <= 12, "");
            // 月份都完整的情况下，快速取得
            if (this.Months.Count == 12 && this.Months[0].Month == 1)
                return this.Months[nMonth - 1];

            // 月份不完整的情况下
            for (int i = 0; i < this.Months.Count; i++)
            {
                JidaoMonth month = this.Months[i];
                if (month.Month == nMonth)
                    return month;
            }

            return null;
        }
    }
}


": {
			Slug:        "man-getting-massage-medium-light-skin-tone",
			Character:   "💆🏼♂",
			UnicodeName: "E4.0 man getting massage: medium-light skin tone",
			CodePoint:   "1F486 1F3FC 200D 2642",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏼♂": {
			Slug:        "man-getting-massage-medium-light-skin-tone",
			Character:   "💆🏼♂",
			UnicodeName: "E4.0 man getting massage: medium-light skin tone",
			CodePoint:   "1F486 1F3FC 200D 2642 FE0F",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏽": {
			Slug:        "person-getting-massage-medium-skin-tone",
			Character:   "💆🏽",
			UnicodeName: "E1.0 person getting massage: medium skin tone",
			CodePoint:   "1F486 1F3FD",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏽♀": {
			Slug:        "woman-getting-massage-medium-skin-tone",
			Character:   "💆🏽♀",
			UnicodeName: "E4.0 woman getting massage: medium skin tone",
			CodePoint:   "1F486 1F3FD 200D 2640",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏽♀": {
			Slug:        "woman-getting-massage-medium-skin-tone",
			Character:   "💆🏽♀",
			UnicodeName: "E4.0 woman getting massage: medium skin tone",
			CodePoint:   "1F486 1F3FD 200D 2640 FE0F",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏽♂": {
			Slug:        "man-getting-massage-medium-skin-tone",
			Character:   "💆🏽♂",
			UnicodeName: "E4.0 man getting massage: medium skin tone",
			CodePoint:   "1F486 1F3FD 200D 2642",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏽♂": {
			Slug:        "man-getting-massage-medium-skin-tone",
			Character:   "💆🏽♂",
			UnicodeName: "E4.0 man getting massage: medium skin tone",
			CodePoint:   "1F486 1F3FD 200D 2642 FE0F",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏾": {
			Slug:        "person-getting-massage-medium-dark-skin-tone",
			Character:   "💆🏾",
			UnicodeName: "E1.0 person getting massage: medium-dark skin tone",
			CodePoint:   "1F486 1F3FE",
			Group:       "People & Body",
			SubGroup:    "person-activity",
		},

		"💆🏾♀": {
			Slug:        "woman-getting-massage-medium-dark-skin-tone",
			Character:   "💆🏾♀",
			UnicodeName: "E4.0 woman getting massage: medium-dark skin tone",
			CodePoint


w in json) {
        final value = IoK8sApiCoreV1ContainerStateWaiting.fromJson(row);
        if (value != null) {
          result.add(value);
        }
      }
    }
    return result.toList(growable: growable);
  }

  static Map<String, IoK8sApiCoreV1ContainerStateWaiting> mapFromJson(dynamic json) {
    final map = <String, IoK8sApiCoreV1ContainerStateWaiting>{};
    if (json is Map && json.isNotEmpty) {
      json = json.cast<String, dynamic>(); // ignore: parameter_assignments
      for (final entry in json.entries) {
        final value = IoK8sApiCoreV1ContainerStateWaiting.fromJson(entry.value);
        if (value != null) {
          map[entry.key] = value;
        }
      }
    }
    return map;
  }

  // maps a json object with a list of IoK8sApiCoreV1ContainerStateWaiting-objects as value to a dart map
  static Map<String, List<IoK8sApiCoreV1ContainerStateWaiting>> mapListFromJson(dynamic json, {bool growable = false,}) {
    final map = <String, List<IoK8sApiCoreV1ContainerStateWaiting>>{};
    if (json is Map && json.isNotEmpty) {
      // ignore: parameter_assignments
      json = json.cast<String, dynamic>();
      for (final entry in json.entries) {
        map[entry.key] = IoK8sApiCoreV1ContainerStateWaiting.listFromJson(entry.value, growable: growable,);
      }
    }
    return map;
  }

  /// The list of required keys that must be present in a JSON.
  static const requiredKeys = <String>{
  };
}

//
// AUTO-GENERATED FILE, DO NOT MODIFY!
//
// @dart=2.12

// ignore_for_file: unused_element, unused_import
// ignore_for_file: always_put_required_named_parameters_first
// ignore_for_file: constant_identifier_names
// ignore_for_file: lines_longer_than_80_chars

part of models.k8s;

class IoK8sApiAutoscalingV1CrossVersionObjectReference {
  /// Returns a new [IoK8sApiAutoscalingV1CrossVersionObjectReference] instance.
  IoK8sApiAutoscalingV1CrossVersionObjectReference({
    this.apiVersion,
    required this.kind,
    required this.name,
  });

  /// API version of the referent
  ///
  /// Please note: This property should have been non-nullable! Since the specification file
  /// does not include a default value (using the "default:" property), however, the generated
  /// source code must fall back to having a nullable type.
  /// Consider adding a "default:" property in the specification file to hide this note.
  ///
  String? apiVersion;

  /// Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds\"
  String kind;

  /// Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names
  String name;

  @override
  bool operator ==(Object other) => identical(this, other) || other is IoK8sApiAutoscalingV1CrossVersionObjectReference &&
    other.apiVersion == apiVersion &&
    other.kind == kind &&
    other.name == name;

  @override
  int get hashCode =>
    // ignore: unnecessary_parenthesis
    (apiVersion == null ? 0 : apiVersion!.hashCode) +
    (kind.hashCode) +
    (name.hashCode);

  @override
  String toString() => 'IoK8sApiAutoscalingV1CrossVersionObjectReference[apiVersion=$apiVersion, kind=$kind, name=$name]';

  Map<String, dynamic> toJson() {
    final json = <String, dynamic>{};
    if (this.apiVersion != null) {
      json[r'apiVersion'] = this.apiVersion


      //           size: 40,
      //           color: HexColor("#b72334"),
      //           // hoverColor: Colors.white,
      //         ),
      //         backgroundColor: Colors.white70,
      //       ),
      //     ),
      //     Expanded(
      //                 child: FloatingActionButton(
      //         onPressed: () {
      //           Navigator.pushNamed(context, 'voice');
      //         },
      //         child: Icon(
      //           Icons.keyboard_voice,
      //           size: 40,
      //           color: HexColor("#b72334"),
      //           // hoverColor: Colors.white,
      //         ),
      //         backgroundColor: Colors.white70,
      //       ),
      //     ),
      //     Expanded(
      //                 child: FloatingActionButton(
      //         onPressed: () {
      //           Navigator.pushNamed(context, 'voice');
      //         },
      //         child: Icon(
      //           Icons.keyboard_voice,
      //           size: 40,
      //           color: HexColor("#b72334"),
      //           // hoverColor: Colors.white,
      //         ),
      //         backgroundColor: Colors.white70,
      //       ),
      //     ),
      //   ],
      // ),
    );
  }

  Map data = {
    'incidents': [
      {
        'id': '98518834',
        'type': 1,
        'severity': 2,
        'eventCode': 701,
        'lat': 39.537991,
        'lng': -105.036377,
        'startTime': '2019-06-01T08:00:00',
        'endTime': '2021-06-01T17:01:00',
        'impacting': false,
        'shortDesc':
            'US-85 Santa Fe Dr: intermittent lane closures from CO-470 to Highlands Ranch Pkwy',
        'fullDesc':
            'Intermittent lane closures due to maintenance work on US-85 Santa Fe Dr both ways from CO-470 / US-85 Santa Fe Dr / County Line Rd to Highlands Ranch Pkwy.',
        'delayFromFreeFlow': 0.0,
        'delayFromTypical': 0.0,
        'distance': 6.159999847412109,
        'iconURL': 'http://content.mqcdn.com/mqtraffic/const_mod.png',
        'parameterizedDescription': {
          'crossRoad2': 'US-85 Santa Fe Dr / Highlands Ranch Pkwy / Dumont Way',
          'crossRoad1': 'CO-470 / US-85 Santa Fe Dr / County Line Rd',
          'position2': 'to',
          'direction': 'both ways',
          'position1': 'from',
          'eventText': 'Intermittent Lane Closures, maintenance work',
          'roadName': 'US-85'
        }
      },
      {
        'id': '132749372',
        'type': 1,
        'severity': 0,
        'eventCode': 504,
        'lat': 39.554127,
        'lng': -105.085052,
        'startTime': '2020-12-07T06:00:00',
        'endTime': '2020-12-07T18:01:00',
        'impacting': false,
        'shortDesc':
            'CO-121 Wadsworth Blvd: shoulder closed between CR-59 Chatfield Ave and CO-470',
        'fullDesc':
            'Shoulder closed due to maintenance work on CO-121 Wadsworth Blvd both ways between CR-59 Chatfield Ave and CO-470.',
        'delayFromFreeFlow': 0.0,
        'delayFromTypical': 0.0,
        'distance': 2.430000066757202,
        'iconURL': 'http://content.mqcdn.com/mqtraffic/const_min.png',
        'parameterizedDescription': {
          'cros


Err(_) => {
                    return Err("No given time");
                }
            };
            if index > hms.len() {
                break;
            }
        }
        Ok(Local::today().and_hms(hms[0], hms[1], hms[2]))
    }

    pub fn get_remaining_seconds(&self) -> i64 {
        self.get_seconds_difference_from_reference(&Local::now())
    }

    pub fn get_seconds_difference_from_reference(&self, reference_date_time: &DateTime<Local>) -> i64 {
        match self.get_time() {
            Ok(time_val) => (time_val - *reference_date_time).num_seconds(),
            Err(_) => 24 * 60 * 60, // 1 day
        }
    }

    pub fn get_difference_from_reference(&self, reference_date_time: &DateTime<Local>) -> time::Duration {
        match self.get_time() {
            Ok(time_val) => (time_val - *reference_date_time).to_std().unwrap(),
            Err(_) => time::Duration::new(24 * 60 * 60, 0),
        }
    }
}

impl fmt::Display for TimeLine {
    // This trait requires `fmt` with this exact signature.
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        // Write strictly the first element into the supplied output
        // stream: `f`. Returns `fmt::Result` which indicates whether the
        // operation succeeded or failed. Note that `write!` uses syntax which
        // is very similar to `println!`.
        write!(f, "{} | {} | {} | {}", self.mission, self.time, self.destination, self.track)
    }
}

pub fn get_time_lines_html<'a, I>(time_lines: I) -> String
where
    I: Iterator<Item = &'a TimeLine>,
{
    let mut strings = time_lines.fold(String::from("
"), |acc, ref mut time_line| {
        acc + &time_line.to_html_table_line().to_string()
    });
    strings.pop();
    strings.push_str("
");
    strings
    // time_lines.map(|time_line| format!("{}", time_line)).collect::<Vec<_>>().join("
\n")
}

pub fn display_time_lines<'a, I>(time_lines: I)
where
    I: Iterator<Item = &'a TimeLine>,
{
    for time_line in time_lines {
        println!("{}", time_line);
    }
}

pub fn first_time_line_for_destination<'a, I>(time_lines: I, destination: &str) -> Option<&'a TimeLine>
where
    I: Iterator<Item = &'a TimeLine>,
{
    for time_line in time_lines {
        if time_line.destination == destination {
            return Some(&time_line);
        }
    }
    None
}
struct Solution;

impl Solution {
    fn minimum_moves(s: String) -> i32 {
        let mut s: Vec<char> = s.chars().collect();
        let n = s.len();
        let mut res = 0;
        for i in 0..n {
            if s[i] == 'X' {
                res += 1;
                s[i] = 'O';
                if i + 1 < n {
                    s[i + 1] = 'O';
                }
                if i + 2 < n {
                    s[i + 2] = 'O';
                }
            }
        }
        res
    }
}

#[test]
fn test() {
    let s = "XXX".to_string();
    let res = 1;
    assert_eq!(Solution::minimum_moves(s), res);
    let s =


variant = _props$variant === void 0 ? \'standard\' : _props$variant,\n      other = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["autoComplete", "autoFocus", "children", "classes", "className", "color", "defaultValue", "disabled", "error", "FormHelperTextProps", "fullWidth", "helperText", "hiddenLabel", "id", "InputLabelProps", "inputProps", "InputProps", "inputRef", "label", "multiline", "name", "onBlur", "onChange", "onFocus", "placeholder", "required", "rows", "rowsMax", "maxRows", "minRows", "select", "SelectProps", "type", "value", "variant"]);\n\n  if (false) {}\n\n  var InputMore = {};\n\n  if (variant === \'outlined\') {\n    if (InputLabelProps && typeof InputLabelProps.shrink !== \'undefined\') {\n      InputMore.notched = InputLabelProps.shrink;\n    }\n\n    if (label) {\n      var _InputLabelProps$requ;\n\n      var displayRequired = (_InputLabelProps$requ = InputLabelProps === null || InputLabelProps === void 0 ? void 0 : InputLabelProps.required) !== null && _InputLabelProps$requ !== void 0 ? _InputLabelProps$requ : required;\n      InputMore.label = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, null, label, displayRequired && "\\xA0*");\n    }\n  }\n\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectProps || !SelectProps.native) {\n      InputMore.id = undefined;\n    }\n\n    InputMore[\'aria-describedby\'] = undefined;\n  }\n\n  var helperTextId = helperText && id ? "".concat(id, "-helper-text") : undefined;\n  var inputLabelId = label && id ? "".concat(id, "-label") : undefined;\n  var InputComponent = variantComponent[variant];\n  var InputElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(InputComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n    "aria-describedby": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    rowsMax: rowsMax,\n    maxRows: maxRows,\n    minRows: minRows,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: inputProps\n  }, InputMore, InputProps));\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_FormControl__WEBPACK_IMPORTED_MODULE_7__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({\n    className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(classes.root, className),\n    disabled: disabled,\n    error: error,\n    fullWidth: fullWidth,\n    hiddenLabel: hiddenLabel,\n    ref: ref,\n    required: required,\n    color: color,\n    variant: variant\n  }, other), label && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_InputLabel__WEBPACK_IMPORTED_MODULE_8__["default"], (0,_babel_runtime_helpers_esm_extends__WEB


peats > 0) {
		for (uint32_t j = 1; j <= repeats; j++) {
			rl->element_info[p_offset + element_total - j].repeat = j;
		}
	}

	if (p_update_buffer) {
		_update_instance_data_buffer(p_render_list);
	}
}

_FORCE_INLINE_ static uint32_t _indices_to_primitives(RS::PrimitiveType p_primitive, uint32_t p_indices) {
	static const uint32_t divisor[RS::PRIMITIVE_MAX] = { 1, 2, 1, 3, 1 };
	static const uint32_t subtractor[RS::PRIMITIVE_MAX] = { 0, 0, 1, 0, 1 };
	return (p_indices - subtractor[p_primitive]) / divisor[p_primitive];
}
void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, const RenderDataRD *p_render_data, PassMode p_pass_mode, bool p_using_sdfgi, bool p_using_opaque_gi, bool p_using_motion_pass, bool p_append) {
	RendererRD::MeshStorage *mesh_storage = RendererRD::MeshStorage::get_singleton();
	uint64_t frame = RSG::rasterizer->get_frame_number();

	if (p_render_list == RENDER_LIST_OPAQUE) {
		scene_state.used_sss = false;
		scene_state.used_screen_texture = false;
		scene_state.used_normal_texture = false;
		scene_state.used_depth_texture = false;
		scene_state.used_lightmap = false;
	}
	uint32_t lightmap_captures_used = 0;

	Plane near_plane = Plane(-p_render_data->scene_data->cam_transform.basis.get_column(Vector3::AXIS_Z), p_render_data->scene_data->cam_transform.origin);
	near_plane.d += p_render_data->scene_data->cam_projection.get_z_near();
	float z_max = p_render_data->scene_data->cam_projection.get_z_far() - p_render_data->scene_data->cam_projection.get_z_near();

	RenderList *rl = &render_list[p_render_list];
	_update_dirty_geometry_instances();

	if (!p_append) {
		rl->clear();
		if (p_render_list == RENDER_LIST_OPAQUE) {
			// Opaque fills motion and alpha lists.
			render_list[RENDER_LIST_MOTION].clear();
			render_list[RENDER_LIST_ALPHA].clear();
		}
	}

	//fill list

	for (int i = 0; i < (int)p_render_data->instances->size(); i++) {
		GeometryInstanceForwardClustered *inst = static_cast<GeometryInstanceForwardClustered *>((*p_render_data->instances)[i]);

		Vector3 center = inst->transform.origin;
		if (p_render_data->scene_data->cam_orthogonal) {
			if (inst->use_aabb_center) {
				center = inst->transformed_aabb.get_support(-near_plane.normal);
			}
			inst->depth = near_plane.distance_to(center) - inst->sorting_offset;
		} else {
			if (inst->use_aabb_center) {
				center = inst->transformed_aabb.position + (inst->transformed_aabb.size * 0.5);
			}
			inst->depth = p_render_data->scene_data->cam_transform.origin.distance_to(center) - inst->sorting_offset;
		}
		uint32_t depth_layer = CLAMP(int(inst->depth * 16 / z_max), 0, 15);

		uint32_t flags = inst->ba


                        Toasts.show(fixContext, TYPE_INFO, "已复制")

                                                val data = profileToString(it.toString())
                                                SyncUtils.runOnUiThread {
                                                    val textView = TextView(fixContext).apply {
                                                        setPadding(32, 32, 32, 32)
                                                        textSize = 16f
                                                        setTextIsSelectable(true)
                                                    }

                                                    val markwon = Markwon.create(fixContext)
                                                    markwon.setMarkdown(textView, data)

                                                    val builder = MaterialAlertDialogBuilder(fixContext)
                                                    builder.setTitle("详细信息")
                                                    builder.setView(textView)
                                                    builder.setNegativeButton("关闭", null)
                                                    builder.show()
                                                }

                                            }
                                        }

                                    }.start()
                                }
                            }
                        }
                    })
                .show()
            return true
        }
    }

    companion object {
        private var QQ: String? = null
        private val mainHandler = Handler(Looper.getMainLooper())
        private val displayMap = linkedMapOf(
            20002u to "昵称",
            20026u  to "注册时间",
            27394u to "QID",
            105u    to "等级",
            20009u to "性别",
            20031u to "生日",
            102u    to "签名",
            27372u  to "在线状态",
            27406u  to "自定义状态",
            20011u  to "手机号(邮箱)",
            20016u  to "手机号",
            20021u  to "学校",
            20003u  to "国家",
            20004u  to "省份",
            20006u  to "地区(可能是)",
            20020u  to "城市",
            20037u  to "年龄",
            101u    to "头像(尺寸640)",
//            104u    to "标签",
        )

        private val statusMap = buildMap {
            put(0, "离线")
            put(1, "在线")
            listOf(3, 268435459).forEach { put(it, "离开") }
            put(4, "隐身/离线")
            put(5, "忙碌")
            put(6, "Q我吧")
            put(7, "请勿打扰")
            listOf(1770497, 270205953).forEach { put(it, "恋爱中") }
        }

        fun profileToString(raw: String): String {
            val rootObj   = JSONObject(raw)
            val code2val  = HashMap<UInt, String>()

            collectCodes(rootObj, code2val)

            val sb = StringBuilder()
            for ((code, cn) in displayMap)
                sb.append("- $cn\n> `````````````````` ${code2val[code] ?: "—"} ``````````````````\n")

            return sb.toString().trimEnd()
        }

        private fun collectCodes(node: Any?, out: MutableMap<UInt, String>) {
            when (node) {
                is JSONObject -> {
                    if (node.has("1") && node.has("2")) {
                        val codeLong = node.optLong("1", -1)
                        if (codeLong > 0) {
                            val code = codeLong.toUInt()
                            if (code in displayMap && code !in setOf(45160u, 45161u)) {
                                val raw = if (code == 102u) node else node.get("2")
                                val v = parseValue(code, raw)
                                if (v.isNotBlank() && out[code].isNullOrBlank()) {
                                    out[code] = v
                                }
                            }
                        }
                    }
                    val it = node.keys()
                    while (it.hasNext()) {
                        collectCodes(node.get(it.next()), out)
                    }
                }

                is org.json.JSONArray -> {
                    for (i in 0 until node.length()) {
                        collectCodes(node.get(i), out)
                    }
                }


.google.cloud.domains.v1.ContactNotice>(
        contactNotices_, contactNotices_converter_);
  }

  /**
   *
   *
   *

   * The list of contact notices that the caller acknowledges. The notices
   * needed here depend on the values specified in
   * `registration.contact_settings`.
   *

   *
   * repeated .google.cloud.domains.v1.ContactNotice contact_notices = 4;
   *
   * @return The count of contactNotices.
   */
  @java.lang.Override
  public int getContactNoticesCount() {
    return contactNotices_.size();
  }

  /**
   *
   *
   *

   * The list of contact notices that the caller acknowledges. The notices
   * needed here depend on the values specified in
   * `registration.contact_settings`.
   *

   *
   * repeated .google.cloud.domains.v1.ContactNotice contact_notices = 4;
   *
   * @param index The index of the element to return.
   * @return The contactNotices at the given index.
   */
  @java.lang.Override
  public com.google.cloud.domains.v1.ContactNotice getContactNotices(int index) {
    return contactNotices_converter_.convert(contactNotices_.get(index));
  }

  /**
   *
   *
   *

   * The list of contact notices that the caller acknowledges. The notices
   * needed here depend on the values specified in
   * `registration.contact_settings`.
   *

   *
   * repeated .google.cloud.domains.v1.ContactNotice contact_notices = 4;
   *
   * @return A list containing the enum numeric values on the wire for contactNotices.
   */
  @java.lang.Override
  public java.util.List<java.lang.Integer> getContactNoticesValueList() {
    return contactNotices_;
  }

  /**
   *
   *
   *

   * The list of contact notices that the caller acknowledges. The notices
   * needed here depend on the values specified in
   * `registration.contact_settings`.
   *

   *
   * repeated .google.cloud.domains.v1.ContactNotice contact_notices = 4;
   *
   * @param index The index of the value to return.
   * @return The enum numeric value on the wire of contactNotices at the given index.
   */
  @java.lang.Override
  public int getContactNoticesValue(int index) {
    return contactNotices_.get(index);
  }

  private int contactNoticesMemoizedSerializedSize;

  public static final int YEARLY_PRICE_FIELD_NUMBER = 5;
  private com.google.type.Money yearlyPrice_;

  /**
   *
   *
   *

   * Required. Yearly price to register or renew the domain.
   * The value that should be put here can be obtained from
   * RetrieveRegisterParameters or SearchDomains calls.
   *

   *
   * .google.type.Money yearly_price = 5 [(.google.api.field_behavior) = REQUIRED];
   *
   * @return Whether the yearlyPrice field is set.
   */
  @java.lang.Override
  public boolean hasYearlyPrice() {
    return ((bitField0_ & 0x00000002) != 0);
  }

  /**
   *
   *
   *

   * Required. Yearly price to register or renew the domain.
   * The value that should be put here can be obtained from
   * RetrieveRegisterParameters or SearchDomains calls.
   *

   *
   * .google.type.Money yearly_price = 5 [(.google.api.field_behavior) = REQUIRED];
   *
   * @return The yearlyPrice


]硫锑锰银矿",
"samsun":"n. 萨姆松（土耳其北部位于亚洲的城市）",
"samsung":"n. 三星电子（韩国电子公司）",
"samudra":" [地名] [印度尼西亚] 苏木都刺",
"samuel":"n. 撒母耳（希伯来先知）；塞缪尔（男子名）",
"Samuel Adams":"[网络] 亚当斯；山缪亚当斯；塞缪尔·亚当斯",
"Samuel Barber":"n. 赛谬尔·巴伯",
"Samuel Beckett":"塞缪尔·贝克特\\n贝克特",
"Samuel Butler":"塞缪尔•巴特勒 （人名）",
"Samuel Clemens":"塞缪尔·克莱门斯（马克·吐温原名）",
"Samuel Dashiell Hammett":"[网络] 达许汉密特；哈米特",
"Samuel de Champlain":"[网络] 尚普兰；法国探险家尚普兰；法国探险家山普伦",
"Samuel F. B. Morse":"[网络] 塞缪尔·B.莫尔斯",
"Samuel Finley Breese Morse":"[网络] 萨缪尔芬利布里斯摩尔斯；摩斯；塞缪尔•莫尔斯",
"Samuel Goldwyn":"[网络] 片商高德温；制片家山缪高德温；戈尔德温",
"Samuel Gompers":"[网络] 冈珀斯；龚帕斯；冈帕斯",
"Samuel Houston":"[网络] 休士顿博士；豪斯顿；休斯敦博士",
"Samuel Huntington":"[网络] 亨廷顿；杭廷顿；杭亭顿",
"Samuel Jackson Snead":"[网络] 史奈德",
"Samuel Johnson":"塞缪尔·约翰逊（18世纪英国作家, 批评家）",
"Samuel Langhorne Clemens":"na. 塞缪尔克莱门斯\\n[网络] 萨缪尔克莱门斯；塞缪尔•兰霍恩•克莱门斯；克里门斯",
"Samuel Morse":"[网络] 莫尔斯；摩斯；摩尔斯",
"Samuel Pepys":"塞缪尔·皮普斯（人名）",
"Samuel Pierpoint Langley":"[网络] 塞缪尔·皮尔蒙特兰利",
"Samuel Rawson Gardiner":"[网络] 历史学家嘉蒂纳",
"Samuel Richardson":"塞缪尔·理查森(人名)",
"Samuel Rosenstock":"[网络] 塞缪尔·罗森斯托克",
"Samuel Smiles":"n. 塞缪尔·斯迈尔斯",
"Samuel Taylor Coleridge":"[网络] 柯勒律治；柯尔律治；塞缪尔·泰勒·柯勒律治",
"Samuel Wiesenthal":"[网络] 塞缪尔·威森塔尔",
"Samuel Wilder":"[网络] 怀尔德；比利怀德",


A23382: 没有

## Q: 每学期跑步打卡的要求是多少公里，可以骑车吗？

- A19286: 没有这个打卡

- A23382: 没有跑步打卡要求。校内允许骑自行车，学生不允许骑电动车。

## Q: 寒暑假放多久，每年小学期有多长？

- A19286: 暑假放两个月寒假因为疫情放的还挺长(每学期十八周

- A23382: 寒假有一个月到一个半月，暑假正好两个月。没有小学期。

## Q: 学校允许点外卖吗，取外卖的地方离宿舍楼多远？

- A19286: 允许 宿舍离西门外卖柜较近 但是高峰期容易放满需要立刻去拿

- A23382: 允许，存在校内外卖。校内外卖送到宿舍楼下，校外外卖送到学校门口的外卖柜，到外卖柜的距离取决于在的宿舍区。

## Q: 学校交通便利吗，有地铁吗，在市区吗，不在的话进城要多久？

- A19286: 在市中心 门口有公交站 距最近的地铁二号线要坐两站

- A23382: 交通便利，在三环内。门口有公交车站（珞喻路马家庄站），门口有 11 号线二期地铁站（在建状态，预计 2024 年年底通车）。

## Q: 宿舍楼有洗衣机吗？

- A19286: 有公共的

- A23382: 在西门宿舍区，每层楼两台公共洗衣机。洗衣价格较贵，个人每周使用三次以上，两个学期的花费够买一台洗衣机。

## Q: 校园网怎么样？

- A19286: 时好时坏建议流量包买多一点的

- A23382: 接入自己购买的宽带后，网络质量较好，但限制接入设备数量（按 MAC 地址识别，限制两台，有多台接入检测，不太好绕）。教学区校园网免费提供，宿舍区校园网需要自行购买运营商的宽带并接入。运营商的宽带需要捆绑湖北校园套餐，总体价格较贵。

## Q: 每天断电断网吗，几点开始断？

- A19286: 停过一次电 平时不会断网断电

- A23382: 不断网，不断电。

## Q: 食堂价格贵吗，会吃出异物吗？

- A19286: 普通一餐大概是14 上限和下限没有具体数丰俭由人，，！

- A23382: 食堂价格比校外便宜一点，但便宜不了多少。


10465923068068/tm2317756d1_8k.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001104659-23-068068/tm2317756d1_8k.htm",
		"cik": "887596",
		"accessionNum": "000110465923068068",
		"docString": "tm2317756d1_8k"
	},
	{
		"version": "2.2",
		"instance_file": "tm2317727d1_8k.htm",
		"link": "?doc=filings/0001104659-23-068071/tm2317727d1_8k.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/1852633/000110465923068071/tm2317727d1_8k.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/1852633/000110465923068071/tm2317727d1_8k.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001104659-23-068071/tm2317727d1_8k.htm",
		"cik": "1852633",
		"accessionNum": "000110465923068071",
		"docString": "tm2317727d1_8k"
	},
	{
		"version": "2.2",
		"instance_file": "tm2317616d1_8k.htm",
		"link": "?doc=filings/0001104659-23-068077/tm2317616d1_8k.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/1562528/000110465923068077/tm2317616d1_8k.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/1562528/000110465923068077/tm2317616d1_8k.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001104659-23-068077/tm2317616d1_8k.htm",
		"cik": "1562528",
		"accessionNum": "000110465923068077",
		"docString": "tm2317616d1_8k"
	},
	{
		"version": "2.2",
		"instance_file": "tm2317645d2_8k.htm",
		"link": "?doc=filings/0001104659-23-068085/tm2317645d2_8k.htm",
		"size": false,
		"sec": "https://www.sec.gov/Archives/edgar/data/1643988/000110465923068085/tm2317645d2_8k.htm",
		"secUrl": "https://www.sec.gov/ix?doc=https://www.sec.gov/Archives/edgar/data/1643988/000110465923068085/tm2317645d2_8k.htm",
		"devLink": "http://172.18.85.157:8080/ixviewer2plus/?doc=?doc=./../ixviewer-2-getter/filings/0001104659-23-068085/tm2317645d2_8k.htm",
		"cik": "1643988",
		"accessionNum": "000110465923068085",
		"docString": "tm2317645d2_8


   },
          head: 'fa2ec220dbf817c07b2119c561ce8d3fe163f03d',
        });
        try {
          await merge(existing, incoming, false, true);
          expect.fail();
        } catch (err: any) {
          expect(err).to.be.instanceOf(MergeConflict);
        }
      });
      it('when incoming is behind should throw ComponentNeedsUpdate', async () => {
        const existing = getComponentObject({
          versions: {
            '0.0.1': '3d4f647fb943437b675e7163ed1e4d1f7c8a8c0e',
            '0.0.5': 'c471678f719783b044ac6d933ccb1da7132dc93d',
          },
          head: 'c471678f719783b044ac6d933ccb1da7132dc93d',
        });
        const incoming = getComponentObject({
          versions: {
            '0.0.1': '3d4f647fb943437b675e7163ed1e4d1f7c8a8c0e',
            '0.0.2': 'fa2ec220dbf817c07b2119c561ce8d3fe163f03d',
          },
          head: 'fa2ec220dbf817c07b2119c561ce8d3fe163f03d',
        });
        try {
          await merge(existing, incoming, false, true, true);
          expect.fail();
        } catch (err: any) {
          expect(err).to.be.instanceOf(ComponentNeedsUpdate);
        }
      });
      it('when incoming is behind and the versions are conflicted, should throw MergeConflict', async () => {
        const existing = getComponentObject({
          versions: {
            '0.0.1': '3d4f647fb943437b675e7163ed1e4d1f7c8a8c0e',
            '0.0.2': 'c471678f719783b044ac6d933ccb1da7132dc93d',
          },
          head: 'c471678f719783b044ac6d933ccb1da7132dc93d',
        });
        const incoming = getComponentObject({
          versions: {
            '0.0.1': '3d4f647fb943437b675e7163ed1e4d1f7c8a8c0e',
            '0.0.2': 'fa2ec220dbf817c07b2119c561ce8d3fe163f03d',
          },
          head: 'fa2ec220dbf817c07b2119c561ce8d3fe163f03d',
        });
        try {
          await merge(existing, incoming, false, true, true);
          expect.fail();
        } catch (err: any) {
          expect(err).to.be.instanceOf(MergeConflict);
        }
      });
    });
  });
});

function getComponentObject(componentObj: Record<string, any>): Component {
  return Component.parse(
    JSON.stringify({
      name: 'foo',
      ...componentObj,
    })
  );
}

async function merge(
  existingComponent: Component,
  incomingComponent: Component,
  isImport: boolean,
  isIncomingFromOrigin: boolean,
  existingHeadIsMissingInIncomingComponent = false
) {
  const modelComponentMerger = new ModelComponentMerger(
    existingComponent,
    incomingComponent,
    isImport,
    isIncomingFromOrigin,
    existingHeadIsMissingInIncomingComponent
  );
  return modelComponentMerger.merge();
}
export interface userPosition {
  coords: {
    latitude: number | undefined;
    longitude: number |


 fetchUser', async () => {
    getUserMock.mockImplementation(
      async (): Promise<User> =>
        ({
          id: 'john',
          name: 'John',
          admin: true,
        } as User)
    );
    const dispatch = jest.fn();
    const getState = jest.fn();
    await fetchUser()(dispatch, getState, undefined);
    expect(dispatch).toBeCalledWith({
      type: USER_SET,
      user: {
        id: 'john',
        name: 'John',
        admin: true,
      },
    });
  });

  it('should set state of user on logIn', async () => {
    logInMock.mockImplementation(
      async (): Promise<User> =>
        ({
          id: 'john',
          name: 'John',
          admin: true,
        } as User)
    );
    const dispatch = jest.fn();
    const getState = jest.fn();
    await logIn({ name: 'google' })(dispatch, getState, undefined);
    expect(dispatch).toBeCalledWith({
      type: USER_SET,
      user: {
        id: 'john',
        name: 'John',
        admin: true,
      },
    });
  });

  it('should NOT set state of user on failed logIn', async () => {
    logInMock.mockImplementation(
      async (): Promise<User> => {
        throw new Error('Unauthorized');
      }
    );
    const dispatch = jest.fn();
    const getState = jest.fn();
    await logIn({ name: 'google' })(dispatch, getState, undefined).catch(() => undefined);
    expect(dispatch).not.toBeCalled();
  });

  it('should unset user on logOut', async () => {
    logOutMock.mockImplementation(async (): Promise<void> => undefined);
    const dispatch = jest.fn();
    const getState = jest.fn();
    await logout()(dispatch, getState, undefined);
    expect(dispatch).toBeCalledWith({
      type: USER_SET,
      user: null,
    });
  });
});
import React from 'react';

type IsCopied = boolean;
type CopyFn = (text: string) => Promise<boolean>;
type IsCopyFn = (flag: boolean) => void;

export const useCopyToClipboard = (): [IsCopied, CopyFn, IsCopyFn] => {
    const [is_copied, setIsCopied] = React.useState(false);

    const copyToClipboard = async (text: string) => {
        if (!navigator?.clipboard) {
            return false;
        }

        try {
            await navigator.clipboard.writeText(text);
            setIsCopied(true);
            return true;
        } catch (error) {
            setIsCopied(false);
            return false;
        }
    };

    return [is_copied, copyToClipboard, setIsCopied];
};
import { validateDotNetIdentifierName } from "../../../../../utils";

import {
  ParseIterator,
  readInt32,
  UnparseIterator,
  readKleiString,
  getReaderPosition,
  writeInt32,
  writeKleiString,
  writeDataLengthBegin,
  writeDataLengthEnd,
} from "../../../../../parser";

import {
  TemplateParser,
  TemplateUnparser,
} from "../../../../type-templates/template-data-parser";

import {
  MinionModifiersExtraData,
  AIAmountInstance,
  AISicknessInstance,
  MinionModificationInstance,
} from "./minion-modifiers";

export function* parseMinionModifiersExtraData(
  templateParser: TemplateParser
): ParseIterator<MinionModifiersExtraData> {
  const amounts: AIAmountInstance[] = yield* parseModifiers<AIAmountInstance>(
    "Klei.AI.AmountInstance",
    templateParser
  );
  const sicknesses: AISicknessInstance[] = yield* parseModifiers<
    AISicknessInstance
  >("Klei.AI.SicknessInstance", templateParser);

  const extraData: MinionModifiersExtraData = {