*/
    fun updateDeviceInfo(
        width: Int? = null,
        height: Int? = null,
        brightness: Int? = null,
        firmwareVersion: String? = null
    ) {
        val currentDevice = _ledDevice.value
        var newResolution = currentDevice.resolution
        var newBrightness = currentDevice.brightness
        var newFirmwareVersion = currentDevice.firmwareVersion

        // 更新分辨率
        if (width != null && height != null) {
            newResolution = LEDDevice.Resolution(width, height)
        }

        // 更新亮度
        if (brightness != null) {
            newBrightness = brightness
        }

        // 更新固件版本
        if (firmwareVersion != null) {
            newFirmwareVersion = firmwareVersion
        }

        _ledDevice.value = currentDevice.copyWith(
            resolution = newResolution,
            brightness = newBrightness,
            firmwareVersion = newFirmwareVersion
        )

        logd(TAG, "设备信息更新: 分辨率=${newResolution}, 亮度=${newBrightness}%, 固件版本=${newFirmwareVersion}")
    }

    /**
     * 更新设备配对状态
     */
    private fun updateDeviceBondingState(isBonded: Boolean) {
        val currentDevice = _ledDevice.value
        val updatedBleDevice = currentDevice.bleDevice.copyWith(isBonded = isBonded)
        _ledDevice.value = currentDevice.copyWith(bleDevice = updatedBleDevice)
        logd(TAG, "设备配对状态更新: $isBonded")
    }

    /**
     * 更新设备MTU信息
     */
    private fun updateDeviceMtu(mtu: Int) {
        val currentDevice = _ledDevice.value
        val updatedBleDevice = currentDevice.bleDevice.copyWith(mtu = mtu)
        _ledDevice.value = currentDevice.copyWith(bleDevice = updatedBleDevice)
        logd(TAG, "设备MTU更新: $mtu")
    }

    /**
     * 更新设备PHY信息
     */
    private fun updateDevicePhy(txPhy: Int, rxPhy: Int) {
        val currentDevice = _ledDevice.value
        val updatedBleDevice = currentDevice.bleDevice.copyWith(txPhy = txPhy, rxPhy = rxPhy)
        _ledDevice.value = currentDevice.copyWith(bleDevice = updatedBleDevice)
        logd(TAG, "设备PHY更新: TX=$txPhy, RX=$rxPhy")
    }
    fun reconnect() {
        logd(TAG, "重新连接")
        // 检查当前连接状态，避免重复连接
        if (connectionState == BLEConnectionState.CONNECTING || connectionState == BLEConnectionState.CONNECTED || connectionState == BLEConnectionState.READY) {
            logd(TAG, "设备正在连接或已连接，跳过重连请求")
            return
        }
        disconnect()
        // 添加延迟避免立即重连
        VTCoroutineUtil.delayInScope("LEDController", 500) {
            connect()
        }
    }

    private fun disconnect() {
        bleController.disconnect()
    }

    /**
     * 检查连接状态并尝试重连
     * 注意：由于现在使用StateFlow自动同步状态，这个方法主要用于重连逻辑
     */
    fun checkConnectionAndReconnect() {
        val currentTime = System.currentTimeMillis()

        // 每5秒检查一次连接状态
        if (currentTime - lastConnectionCheck < BleConstants.CONNECTION_CHECK_INTERVAL_MS) {
            re


/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   ft_lib1.c                                          :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*                                                  +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*                                                     #+#    #+#             */
/*                                                    ###   ########.fr       */
/*                                                                            */
/* ************************************************************************** */

#include "rush02.h"

void	ft_putchar(char c)
{
	write(1, &c, 1);
}

int	ft_putstr(char *str)
{
	int	len;

	len = 0;
	while (str[len])
		len++;
	write(1, str, len);
	return (0);
}

int	ft_count_lines(char *str)
{
	int	i;
	int	count;

	i = 0;
	count = 0;
	while (str[i] != '\0')
		if (str[i++] == '\n')
			count++;
	return (count);
}

char	*ft_strndup(char *src, int n)
{
	int		i;
	char	*dest;

	i = 0;
	dest = malloc(sizeof(char) * (n + 1));
	while (i < n)
	{
		dest[i] = src[i];
		i++;
	}
	dest[i] = '\0';
	return (dest);
}

char	*ft_strcat(char *dest, char *src)
{
	int		c;
	int		d;

	c = 0;
	d = 0;
	while (dest[c] != '\0')
		c++;
	while (src[d] != '\0')
	{
		dest[c] = src[d];
		c++;
		d++;
	}
	dest[c] = '\0';
	return (dest);
}


, days).normalized(), createDuration(hours, minutes, seconds, nanos))

    /**
     * @suppress
     */
    companion object {

        /**
         * TImeSpan of 0
         */
        val ZERO = TimeSpan()

        /**
         * Parse the string that is generated by [TimeSpan.toString] back to an instance of TimeSpan.
         *
         * This is also compliant with the ISO 8601 format for durations:
         *
         * ```
         * P[n]Y[n]M[n]DT[n]H[n]M[n]S
         * ```
         */
        fun parse(text: String): TimeSpan {
            val parts = text.split('T')
            return TimeSpan(Period.parse(parts[0]), Duration.parse("PT" + parts[1]))
        }

        /**
         * Create a [Duration] instance based on hours, seconds and nanos
         */
        private fun createDuration(hours: Int, minutes: Int, seconds: Int, nanos: Long): Duration {
            var result = Duration.ZERO
            if (hours != 0) result = result.plusHours(hours.toLong())
            if (minutes != 0) result = result.plusMinutes(minutes.toLong())
            if (seconds != 0) result = result.plusSeconds(seconds.toLong())
            if (nanos != 0L) result = result.plusNanos(nanos)
            return result
        }

    }

    /**
     * Checks if this is a zero TimeSpan
     */
    val isZero
        get() = period.isZero && duration.isZero

    /**
     * Add an [other] trading period
     */
    operator fun plus(other: TimeSpan) =
        TimeSpan(period.plus(other.period).normalized(), duration.plus(other.duration))

    /**
     * Subtract an [other] trading period
     */
    operator fun minus(other: TimeSpan) =
        TimeSpan(period.minus(other.period).normalized(), duration.minus(other.duration))

    /**
     * String representation
     */
    override fun toString(): String {
        return "$period${duration.toString().substring(1)}"
    }

    /**
     * Only equals if all values are the same
     */
    override fun equals(other: Any?): Boolean {
        if (this === other) return true
        return if (other is TimeSpan) {
            @Suppress("ReplaceCallWithBinaryOperator")
            period.equals(other.period) && duration.equals(other.duration)
        } else {
            false
        }
    }

    /**
     * @see [Object.hashCode]
     */
    override fun hashCode(): Int {
        return period.hashCode() + duration.hashCode()
    }

    /**
     * Resolution based on contained values
     * @return ChronoUnit
     */
    fun resolution() : ChronoUnit {
        return when  {
            duration.toNanosPart() != 0 -> ChronoUnit.NANOS
            duration.toMillisPart() != 0 -> ChronoUnit.MILLIS
            duration.toSecondsPart() != 0 -> ChronoUnit.SECONDS
            duration.toMinutesPart() != 0 -> ChronoUnit.MINUTES
            duration.toHoursPart() != 0 -> ChronoUnit.HOURS
            else -> ChronoUnit.DAYS
        }
    }

}

/*********************************************************************************************
 * Extensions on the Int type to make instantiation of TradingPeriods convenient
 *********************************************************************************************/

/**
 * Convert an Int to a [TimeSpan] of years
 */
val Int.years
    get() = TimeSpan(this)

/**
 * Convert an Int to a [TimeSpan] of months
 */
val Int.months
    get() = TimeSpan(0, this)

/**
 * Convert an Int to a [TimeSpan] of days
 */
val Int.days
    get() = TimeSpan(0, 0, this)

/**
 * Convert an Int to a [TimeSpan] of hours
 */
val Int.hours
    get() = TimeSpan(0, 0, 0, this)

/**
 * Convert an Int to a [Time


my = 0

# class for rectangle testing
class rect:
   def __init__(self, lowx, lowy, upx, upy, desc, url):
       self.lowx, self.lowy, self.upx, self.upy, self.desc, self.url = \
         lowx, lowy, upx, upy, desc, url
   def inside(self, x, y):
       # print((x,y), "inside", self.desc)
       result = self.lowx <= x <= self.upx and self.lowy <= y <= self.upy
       # print(result)
       return result
   def mouse_move(self):
       # print("move", self.desc)
       ax.TxtLinkDescription.Value = coords + " - " + self.desc
   def onclick(self):
       # print("click", self.desc)
       ax.TxtLinkDescription.Value = coords +" click! " + `self.url`
       if self.url: ax.location = self.url

blows = "Blows away "
rects =[rect(12,48,59,101,blows+"Visual Basic", ""),
	rect(107,0,172,58,blows+"Internet Explorer", ""),
	rect(193,0,261,56,blows+"Microsoft Access", ""),
	rect(332,43,392,93,blows+"Microsoft Word", ""),
	rect(457,52,521,99,blows+"Microsoft Excel", ""),
	rect(537,12,613,85,"Python blows them all away!", "http://www.python.org"),
]

default = rect(0,0,0,0,"Click on an icon","")

def Image_MouseMove(s, b, x, y):
    global mx, my, coords
    coords =`(x,y)`
    # print(coords)
    mx, my = x, y
    for r in rects:
        if r.inside(x,y):
           # print(r.desc)
           r.mouse_move()
           break
    else:
        # print(default.desc)
        default.mouse_move()

def Image_OnClick():
    for r in rects:
        if r.inside(mx,my):
           r.onclick()
           break
-->
</SCRIPT>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>The win32com package</TITLE>
<META NAME="Template" CONTENT="D:\Program Files\Microsoft Office\Office\html.dot">

The win32com package

This document describes the win32com package in general terms.

The COM support can be thought of as existing in 2 main portions - the C++ support code (the core PythonCOM module), and helper code, implemented in Python. The total package is known as "win32com".

The win32com support is stand-alone. It does not require Pythonwin.

The win32com package

To facilitate an orderly framework, the Python "ni" module has been used, and the entire package is known as "win32com". As is normal for such packages, win32com itself does not provide any functionality. Some of the modules are described below:

win32com.pythoncom - core C++ support.

This module is rarely used directly by programmers - instead the other "helper" module are used, which themselves draw on the core pythoncom services.</


 be unique.
 *
 * 在一条环路上有 N 个加油站，其中第 i 个加油站有汽油 gas[i] 升。
 * 你有一辆油箱容量无限的的汽车，从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发，开始时油箱为空。
 * 如果你可以绕环路行驶一周，则返回出发时加油站的编号，否则返回 -1
 */

/**
 * @param {number[]} gas
 * @param {number[]} cost
 * @return {number}
 */
var canCompleteCircuit = function(gas, cost) {
  let total = 0
  let current = 0
  let index = 0

  for (let i = 0; i < gas.length; i += 1) {
    total += (gas[i] - cost[i])
    current += (gas[i] - cost[i])
    if (current < 0) {
      index = i + 1
      current = 0
    }
  }
  return total >= 0 ? index : -1
}
/**
 * Difficulty:
 * Hard
 *
 * Desc:
 * Design a data structure that supports all following operations in average O(1) time.
 *
 * Note: Duplicate elements are allowed.
 * 1. insert(val): Inserts an item val to the collection.
 * 2. remove(val): Removes an item val from the collection if present.
 * 3. getRandom: Returns a random element from current collection of elements. The probability of each element being returned is linearly related to the number of same value the collection contains.
 *
 * Example:
 * // Init an empty collection.
 * RandomizedCollection collection = new RandomizedCollection();
 *
 * // Inserts 1 to the collection. Returns true as the collection did not contain 1.
 * collection.insert(1);
 *
 * // Inserts another 1 to the collection. Returns false as the collection contained 1. Collection now contains [1,1].
 * collection.insert(1);
 *
 * // Inserts 2 to the collection, returns true. Collection now contains [1,1,2].
 * collection.insert(2);
 *
 * // getRandom should return 1 with the probability 2/3, and returns 2 with the probability 1/3.
 * collection.getRandom();
 *
 * // Removes 1 from the collection, returns true. Collection now contains [1,2].
 * collection.remove(1);
 *
 * // getRandom should return 1 and 2 both equally likely.
 * collection.getRandom();
 *
 * 设计一个支持在平均 时间复杂度 O(1) 下， 执行以下操作的数据结构。
 * 注意: 允许出现重复元素。
 * 1. insert(val)：向集合中插入元素 val。
 * 2. remove(val)：当 val 存在时，从集合中移除一个 val。
 * 3. getRandom：从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈线性相关。
 *
 * 注意时间复杂度是要 O(1)
 */

/**
 * Initialize your data structure here.
 */
var RandomizedCollection = function() {
  this.map = {}
  this.list = []
}

/**
* Inserts a value to the collection. Returns true if the collection did not already contain the specified element.
* @param {number} val
* @return {boolean}
*/
RandomizedCollection.prototype.insert = function(val) {
  if (!this.map[val]) this.map[val] = new Set()
  this.list.push(val)
  this.map[val].add(this.list.length - 1)
  return this.map[val].size === 1
}

/**
* Removes a value from the collection. Returns true if the collection contained the specified element.
* @param {number} v


dified by the application, and used as the source for GL drawing and image specification commands.

     *
READ - The data store contents are modified by reading data from the GL, and used to return that data when queried by the application.

     *
COPY - The data store contents are modified by reading data from the GL, and used as the source for GL drawing and image specification commands.

     *

     *
     * @param target the target buffer object. One of:

{@link #GL_ARRAY_BUFFER ARRAY_BUFFER}	{@link #GL_ELEMENT_ARRAY_BUFFER ELEMENT_ARRAY_BUFFER}	{@link GL21#GL_PIXEL_PACK_BUFFER PIXEL_PACK_BUFFER}	{@link GL21#GL_PIXEL_UNPACK_BUFFER PIXEL_UNPACK_BUFFER}

{@link GL30#GL_TRANSFORM_FEEDBACK_BUFFER TRANSFORM_FEEDBACK_BUFFER}	{@link GL31#GL_UNIFORM_BUFFER UNIFORM_BUFFER}	{@link GL31#GL_TEXTURE_BUFFER TEXTURE_BUFFER}	{@link GL31#GL_COPY_READ_BUFFER COPY_READ_BUFFER}

{@link GL31#GL_COPY_WRITE_BUFFER COPY_WRITE_BUFFER}	{@link GL40#GL_DRAW_INDIRECT_BUFFER DRAW_INDIRECT_BUFFER}	{@link GL42#GL_ATOMIC_COUNTER_BUFFER ATOMIC_COUNTER_BUFFER}	{@link GL43#GL_DISPATCH_INDIRECT_BUFFER DISPATCH_INDIRECT_BUFFER}

{@link GL43#GL_SHADER_STORAGE_BUFFER SHADER_STORAGE_BUFFER}	{@link ARBIndirectParameters#GL_PARAMETER_BUFFER_ARB PARAMETER_BUFFER_ARB}

     * @param size   the size in bytes of the buffer object's new data store
     * @param usage  the expected usage pattern of the data store. One of:

{@link #GL_STREAM_DRAW STREAM_DRAW}	{@link #GL_STREAM_READ STREAM_READ}	{@link #GL_STREAM_COPY STREAM_COPY}	{@link #GL_STATIC_DRAW STATIC_DRAW}	{@link #GL_STATIC_READ STATIC_READ}	{@link #GL_STATIC_COPY STATIC_COPY}	{@link #GL_DYNAMIC_DRAW DYNAMIC_DRAW}

{@link #GL_DYNAMIC_READ DYNAMIC_READ}	{@link #GL_DYNAMIC_COPY DYNAMIC_COPY}

     *
     * @see Reference Page
     */
    public static void glBufferData(@NativeType("GLenum") int target, @NativeType("GLsizeiptr") long size, @NativeType("GLenum") int usage) {
        nglBufferData(target, size, NULL, usage);
    }

    /**
     * Creates and initializes a buffer object's data store.
     *
     *
{@code usage} is a hint to the GL implementation as to how a buffer object's data store will be accessed. This enables the GL implementation to make
     * more intelligent decisions that may significantly impact buffer object performance. It does not, however, constrain the actual usage of the data store.
     * {@code usage} can be broken down into two parts: first, the frequency of access (modification and usage), and second, the nature of that access. The
     * frequency of access may be one of these:

     *
     *

     *
STREAM - The data store contents will be modified once and used at most a few times.

     *
STATIC - The data store contents will be modified once and used many times.

     *
DYNAMIC - The data store contents will be modified repeatedly and used many times.

     *

     *
     *
The nature of


e_alsink_require_uclock(upipe);
            return UBASE_ERR_NONE;
        case UPIPE_REGISTER_REQUEST: {
            struct urequest *request = va_arg(args, struct urequest *);
            return upipe_alsink_register_request(upipe, request);
        }
        case UPIPE_UNREGISTER_REQUEST: {
            struct urequest *request = va_arg(args, struct urequest *);
            return upipe_alsink_unregister_request(upipe, request);
        }
        case UPIPE_SET_FLOW_DEF: {
            struct uref *flow_def = va_arg(args, struct uref *);
            return upipe_alsink_set_flow_def(upipe, flow_def);
        }
        case UPIPE_GET_URI: {
            const char **uri_p = va_arg(args, const char **);
            return upipe_alsink_get_uri(upipe, uri_p);
        }
        case UPIPE_SET_URI: {
            const char *uri = va_arg(args, const char *);
            return upipe_alsink_set_uri(upipe, uri);
        }
        case UPIPE_FLUSH:
            return upipe_alsink_flush(upipe);
        default:
            return UBASE_ERR_UNHANDLED;
    }
}

/** @This frees a upipe.
 *
 * @param upipe description structure of the pipe
 */
static void upipe_alsink_free(struct upipe *upipe)
{
    struct upipe_alsink *upipe_alsink = upipe_alsink_from_upipe(upipe);
    upipe_alsink_close(upipe);
    upipe_throw_dead(upipe);

    struct uchain *uchain, *uchain_tmp;
    ulist_delete_foreach (&upipe_alsink->urequests,
                          uchain, uchain_tmp) {
        struct upipe_alsink_request *proxy =
            upipe_alsink_request_from_uchain(uchain);
        ulist_delete(uchain);
        free(proxy);
    }

    free(upipe_alsink->uri);
    upipe_alsink_clean_uclock(upipe);
    upipe_alsink_clean_upump(upipe);
    upipe_alsink_clean_upump_mgr(upipe);
    upipe_alsink_clean_input(upipe);
    upipe_alsink_clean_urefcount(upipe);
    upipe_alsink_free_void(upipe);
}

/** module manager static descriptor */
static struct upipe_mgr upipe_alsink_mgr = {
    .refcount = NULL,
    .signature = UPIPE_ALSINK_SIGNATURE,

    .upipe_alloc = upipe_alsink_alloc,
    .upipe_input = upipe_alsink_input,
    .upipe_control = upipe_alsink_control,

    .upipe_mgr_control = NULL
};

/** @This returns the management structure for all file sink pipes.
 *
 * @return pointer to manager
 */
struct upipe_mgr *upipe_alsink_mgr_alloc(void)
{
    return &upipe_alsink_mgr;
}


      // The rightmost EDIFACT edge always contains an unlatch character
        if (this.mode !== Mode.EDF) {
          throw new Error('Cannot switch from EDF to ' + this.mode);
        }
        break;
    }
    return new Uint8Array(0);
  }

  // Important: The function does not return the length bytes (one or two) in case of B256 encoding
  getDataBytes(): Uint8Array {
    switch (this.mode) {
      case Mode.ASCII:
        if (this.input.isECI(this.fromPosition)) {
          return Edge.getBytes(
            241,
            this.input.getECIValue(this.fromPosition) + 1
          );
        } else if (
          MinimalEncoder.isExtendedASCII(
            this.input.charAt(this.fromPosition),
            this.input.getFNC1Character()
          )
        ) {
          return Edge.getBytes(235, this.input.charAt(this.fromPosition) - 127);
        } else if (this.characterLength === 2) {
          return Edge.getBytes(
            this.input.charAt(this.fromPosition) * 10 +
              this.input.charAt(this.fromPosition + 1) +
              130
          );
        } else if (this.input.isFNC1(this.fromPosition)) {
          return Edge.getBytes(232);
        } else {
          return Edge.getBytes(this.input.charAt(this.fromPosition) + 1);
        }
      case Mode.B256:
        return Edge.getBytes(this.input.charAt(this.fromPosition));
      case Mode.C40:
        return this.getC40Words(true, this.input.getFNC1Character());
      case Mode.TEXT:
        return this.getC40Words(false, this.input.getFNC1Character());
      case Mode.X12:
        return this.getX12Words();
      case Mode.EDF:
        return this.getEDFBytes();
    }
  }
}

class Input extends MinimalECIInput {
  constructor(
    stringToEncode: string,
    priorityCharset: Charset,
    fnc1: number,
    private readonly shape: SymbolShapeHint,
    private readonly macroId: number
  ) {
    super(stringToEncode, priorityCharset, fnc1);
  }

  getMacroId(): number {
    return this.macroId;
  }

  getShapeHint(): SymbolShapeHint {
    return this.shape;
  }
}
/// <reference types="cypress" />

import { createMutResMessage, SupplementalItemRecord, toFormattedString } from "../../../support/commands";
import { codeMessageError } from "../../../support/mutationTests";

// TEST COUNT: 18
describe('Mutation: updateManufacturer', () => {
    var id = '';
    var updateCount = 0;	// TODO: Appraise whether this is really useful or not
    var itemCount = 1;
    var extraIds = [] as SupplementalItemRecord[];
    const mutationName = 'updateManufacturer';
    const createName = 'createManufacturer';
    const deleteMutName = "deleteManufacturer";
    const queryName = "manufacturers";
    const itemPath = 'manufacturer';
    const infoName = "manufacturerInfo";
    const standardMutationBody = `
        ${codeMessageError}
        ${itemPath} {
            id
            ${infoName} {
                name
                description
                languageCode
            }
        }
    `;
    var alreadyDeleted = false;

    const addExtraItemIds = (extIds: SupplementalItemRecord[]) => {
        extIds.forEach((id) => {
            extraIds.push(id);
        });
    };

    var deleteItemsAfter = undefined as boolean |


dark-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-dark-small>.jstree-striped{background-size:auto 36px}.jstree-default-dark-small.jstree-rtl .jstree-node{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");background-position:100% 1px;background-repeat:repeat-y}.jstree-default-dark-small.jstree-rtl .jstree-last{background:transparent}.jstree-default-dark-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-dark-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-dark-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:transparent}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-dark-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-dark-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-dark-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url("throbber.gif") center center no-repeat}.jstree-default-dark-small .jstree-file{background:url("32px.png") -103px -71px no-repeat}.jstree-default-dark-small .jstree-folder{background:url("32px.png") -263px -7px no-repeat}.jstree-default-dark-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-dark-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-dark-small .jstree-ok,#jstree-dnd.jstree-default-dark-small .jstree-er{background-image:url("32px.png");background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-dark-small i{background:transparent;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-dark-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-dark-small .jstree-er{background-position:-39px -71px}.jstree-default-da


L(
                "java/lang/String",
                "replace",
                "(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"
            )
            LDC("=")
            LDC("e")
            LABEL(L["label24"])
            INVOKEVIRTUAL(
                "java/lang/String",
                "replace",
                "(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"
            )
            LDC("+")
            LDC("p")
            LABEL(L["label25"])
            INVOKEVIRTUAL(
                "java/lang/String",
                "replace",
                "(Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/lang/String;"
            )
            ASTORE(1)
            LABEL(L["label4"])
            GOTO(L["label26"])
            LABEL(L["label5"])
            FRAME(Opcodes.F_SAME1, 0, null, 1, arrayOf("java/lang/Exception"))
            ASTORE(2)
            LABEL(L["label27"])
            LDC("Unknown HWID")
            ASTORE(1)
            LABEL(L["label28"])
            if (showHWIDWhenFailed) {
                NEW(frameUtil)
                DUP
                ALOAD(1)
                INVOKESPECIAL(frameUtil, "<init>", "(Ljava/lang/String;)V")
                ICONST_0
                INVOKEVIRTUAL(frameUtil, "setVisible", "(Z)V")
            }
            ALOAD(0)
            LCONST_0
            LCONST_0
            INVOKEVIRTUAL("sun/misc/Unsafe", "putAddress", "(JJ)V")
            LABEL(L["label26"])
            FRAME(Opcodes.F_APPEND, 1, arrayOf("java/lang/String"), 0, null)
            GETSTATIC(fieldOwner, fieldName, "Ljava/util/List;")
            ALOAD(1)
            INVOKEINTERFACE("java/util/List", "contains", "(Ljava/lang/Object;)Z")
            IFEQ(L["label29"])
            ICONST_1
            GOTO(L["label30"])
            LABEL(L["label29"])
            FRAME(Opcodes.F_SAME, 0, null, 0, null)
            ICONST_0
            LABEL(L["label30"])
            FRAME(Opcodes.F_SAME1, 0, null, 1, arrayOf(Opcodes.INTEGER))
            ISTORE(2)
            LABEL(L["label31"])
            ILOAD(2)
            ICONST_1
            IADD
            ICONST_2
            IF_ICMPGE(L["label32"])
            LABEL(L["label33"])
            if (showHWIDWhenFailed) {
                NEW(frameUtil)
                DUP
                ALOAD(1)
                INVOKESPECIAL(frameUtil, "<init>", "(Ljava/lang/String;)V")
                ICONST_0
                INVOKEVIRTUAL(frameUtil, "setVisible", "(Z)V")
            }
            ALOAD(0)
            LCONST_0
            LCONST_0
            INVOKEVIRTUAL("sun/misc/Unsafe", "putAddress", "(JJ)V")
            LABEL(L["label32"])
            FRAME(Opcodes.F_APPEND, 1, arrayOf(Opcodes.INTEGER), 0, null)
            RETURN
            LABEL(L["label34"])
            LOCALVAR(
                "unsafeClass",
                "Ljava/lang/Class;",
                "Ljava/lang/Class<Lsun/misc/Unsafe;>;",
                L["label6"],
                L["label1"],
                1
            )
            LOCALVAR("unsafeField", "Ljava/lang/reflect/


 ul { list-style-type: square; }
dir ol ul { list-style-type: square; }
dir ul ul { list-style-type: square; }
menu dir ul { list-style-type: square; }
menu menu ul { list-style-type: square; }
menu ol ul { list-style-type: square; }
menu ul ul { list-style-type: square; }
ol dir ul { list-style-type: square; }
ol menu ul { list-style-type: square; }
ol ol ul { list-style-type: square; }
ol ul ul { list-style-type: square; }
ul dir ul { list-style-type: square; }
ul menu ul { list-style-type: square; }
ul ol ul { list-style-type: square; }
ul ul ul { list-style-type: square; }

var { font-style: italic; }
video { object-fit: contain; }
xmp { display: block; font-family: monospace; margin-bottom: 1em; margin-top: 1em; /* unicode-bidi: isolate; */ white-space: pre; }

::footnote-call { content: counter(footnote); vertical-align: super; font-size: smaller; line-height: inherit; }
::footnote-marker { content: counter(footnote) '. '; }

@page {
    /* `size: auto` (the initial) is A4 portrait */
    margin: 75px;
    @footnote { margin-top: 1em }
    @top-left-corner     { text-align: right;  vertical-align:  middle }
    @top-left            { text-align: left;   vertical-align:  middle }
    @top-center          { text-align: center; vertical-align:  middle }
    @top-right           { text-align: right;  vertical-align:  middle }
    @top-right-corner    { text-align: left;   vertical-align:  middle }
    @left-top            { text-align: center; vertical-align:  top    }
    @left-middle         { text-align: center; vertical-align:  middle }
    @left-bottom         { text-align: center; vertical-align:  bottom }
    @right-top           { text-align: center; vertical-align:  top    }
    @right-middle        { text-align: center; vertical-align:  middle }
    @right-bottom        { text-align: center; vertical-align:  bottom }
    @bottom-left-corner  { text-align: right;  vertical-align:  middle }
    @bottom-left         { text-align: left;   vertical-align:  middle }
    @bottom-center       { text-align: center; vertical-align:  middle }
    @bottom-right        { text-align: right;  vertical-align:  middle }
    @bottom-right-corner { text-align: left;   vertical-align:  middle }
}

/* Counters: https://www.w3.org/TR/css-counter-styles-3/#predefined-c


 (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) {
        return;
      }

      dismissWith(DismissReason.close);
    };
  };
  /**
   * @param {*} innerParams
   * @returns {boolean}
   */

  const isAnyButtonShown = innerParams => {
    return innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton;
  };

  let ignoreOutsideClick = false;

  const handleModalMousedown = domCache => {
    domCache.popup.onmousedown = () => {
      domCache.container.onmouseup = function (e) {
        domCache.container.onmouseup = undefined; // We only check if the mouseup target is the container because usually it doesn't
        // have any other direct children aside of the popup

        if (e.target === domCache.container) {
          ignoreOutsideClick = true;
        }
      };
    };
  };

  const handleContainerMousedown = domCache => {
    domCache.container.onmousedown = () => {
      domCache.popup.onmouseup = function (e) {
        domCache.popup.onmouseup = undefined; // We also need to check if the mouseup target is a child of the popup

        if (e.target === domCache.popup || domCache.popup.contains(e.target)) {
          ignoreOutsideClick = true;
        }
      };
    };
  };

  const handleModalClick = (instance, domCache, dismissWith) => {
    domCache.container.onclick = e => {
      const innerParams = privateProps.innerParams.get(instance);

      if (ignoreOutsideClick) {
        ignoreOutsideClick = false;
        return;
      }

      if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) {
        dismissWith(DismissReason.backdrop);
      }
    };
  };

  const isJqueryElement = elem => typeof elem === 'object' && elem.jquery;

  const isElement = elem => elem instanceof Element || isJqueryElement(elem);

  const argsToParams = args => {
    const params = {};

    if (typeof args[0] === 'object' && !isElement(args[0])) {
      Object.assign(params, args[0]);
    } else {
      ['title', 'html', 'icon'].forEach((name, index) => {
        const arg = args[index];

        if (typeof arg === 'string' || isElement(arg)) {
          params[name] = arg;
        } else if (arg !== undefined) {
          error("Unexpected type of ".concat(name, "! Expected \"string\" or \"Element\", got ").concat(typeof arg));
        }
      });
    }

    return params;
  };

  function fire() {
    const Swal = this; // eslint-disable-line @typescript-eslint/no-this-alias

    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    return new Swal(...args);
  }

  /**
   * Returns an extended version of `Swal` containing `params` as defaults.
   * Useful for reusing Swal configuration.
   *
   * For example:
   *
   * Before:
   * const textPromptOptions = { input: 'text', showCancelButton: true }
   * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' })
   * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' })
   *
   * After:
   * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true })
   * const {value: firstName} = await TextPrompt('What is your first name?')
   * const {value: lastName} = await TextPrompt('What is your last name?')
   *
   * @param mixinParams
   */
  function mixin(mixinParams) {
    class MixinSwal extends this {


ities(value));
              out('"');
            }
          });
          out('>');
        }
      },
      end: function(tag) {
        tag = lowercase(tag);
        if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {
          out('</');
          out(tag);
          out('>');
        }
        // eslint-disable-next-line eqeqeq
        if (tag == ignoreCurrentElement) {
          ignoreCurrentElement = false;
        }
      },
      chars: function(chars) {
        if (!ignoreCurrentElement) {
          out(encodeEntities(chars));
        }
      }
    };
  }

  /**
   * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare
   * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want
   * to allow any of these custom attributes. This method strips them all.
   *
   * @param node Root element to process
   */
  function stripCustomNsAttrs(node) {
    if (node.nodeType === window.Node.ELEMENT_NODE) {
      var attrs = node.attributes;
      for (var i = 0, l = attrs.length; i < l; i++) {
        var attrNode = attrs[i];
        var attrName = attrNode.name.toLowerCase();
        if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {
          node.removeAttributeNode(attrNode);
          i--;
          l--;
        }
      }
    }

    var nextNode = node.firstChild;
    if (nextNode) {
      stripCustomNsAttrs(nextNode);
    }

    nextNode = node.nextSibling;
    if (nextNode) {
      stripCustomNsAttrs(nextNode);
    }
  }
}

function sanitizeText(chars) {
  var buf = [];
  var writer = htmlSanitizeWriter(buf, noop);
  writer.chars(chars);
  return buf.join('');
}

// define ngSanitize module and register $sanitize service
angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);

/**
 * @ngdoc filter
 * @name linky
 * @kind function
 *
 * @description
 * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and
 * plain email address links.
 *
 * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
 *
 * @param {string} text Input text.
 * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.
 * @param {object|function(url)} [attributes] Add custom attributes to the link element.
 *
 *    Can be one of:
 *
 *    - `object`: A map of attributes
 *    - `function`: Takes the url as a parameter and returns a map of attributes
 *
 *    If the map of attributes contains a value for `target`, it overrides the value of
 *    the target parameter.
 *
 *
 * @returns {string} Html-linkified and {@link $sanitize sanitized} text.
 *
 * @usage

 *
 * @example
   <example module="linkyExample" deps="angular-sanitize.js" name="linky-filter">
     <file name="index.html">

       Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>

           Filter
           Source


Epoch1, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | 777Burn, Epoch1, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_QA006_WhoIsToby_2025-05-03_EN.md | None | None | BaseChain | BaseChain |
| TOBY_QA006_WhoIsToby.md | None | None | ProofOfTime | ProofOfTime |
| TOBY_QR076_FlywheelEternity_2025-08-08_EN-ZH.md | None | None | 777Burn, BaseChain, Epoch4, LilyPad, PatienceToken, ProofOfTime, Season0, Season1, Season2, Season3 | 777Burn, BaseChain, Epoch4, Eternity, Flywheel, GasFeesLoop, LilyPad, PatienceToken, ProofOfTime, Season0, Season1, Season2, Season3, Seasons |
| TOBY_QA007_WhatIsTOBY_2025-05-03_EN.md | None | None | BaseChain | BaseChain |
| TOBY_QA007_WhatIsL001.md | None | None | ProofOfTime | ProofOfTime |
| TOBY_QA009_WhyLeafOfYield_2025-05-03_EN.md | None | None | BaseChain, Epoch2, ProofOfTime, Satoby, Taboshi | BaseChain, Epoch2, ProofOfTime, Satoby, Taboshi |
| TOBY_QA010_WhatIsTobyworld_2025-05-03_EN.md | None | None | BaseChain, Epoch1, Epoch2, Epoch3 | BaseChain, Epoch1, Epoch2, Epoch3 |
| TOBY_QA011_WhatIsTaboshi_Reinforced_2025-05-03_EN.md | None | None | 777Burn, BaseChain, Epoch1, Epoch2, ProofOfTime, Satoby, Taboshi | #LeafOfYield, #Lore, #Taboshi, #Tobyworld, 777Burn, BaseChain, Epoch1, Epoch2, ProofOfTime, Satoby, Taboshi |
| TOBY_QA013_WhatIs777.md | None | None | 777Burn, PatienceToken, ProofOfTime, Taboshi | 777Burn, PatienceToken, ProofOfTime, Taboshi |
| TOBY_QA016_WhatIsTaboshi1_FIX_2025-05-05_EN.md | None | None | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_F002_SatobyAccessFacts_2025-05-03_EN-ZH.md | None | None | Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_F004_Tatoshi1SatobyEligibility_2025-05-03_EN-ZH.md | None | None | 777Burn, Epoch1, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | 777Burn, Epoch1, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_F005_SatobyRulesSummary_2025-05-03_EN-ZH.md | None | None | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_F007_SatobyQuickFacts_2025-05-03_EN-ZH.md | None | None | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi | 777Burn, Epoch2, Epoch3, ProofOfTime, Satoby, Taboshi |
| TOBY_F008_Fix_TaboshiConfusion_2025-05-03_EN-ZH.md | None | None | 777Burn, BaseChain, Epoch1, Epoch2, ProofOfTime,


"""
Preset Menus
++++++++++++

Preset menus are simply a convention that uses a menu sub-class
to perform the common task of managing presets.

This example shows how you can add a preset menu.

This example uses the object draw options,
however you can use properties defined by your own scripts too.
"""

import bpy
from bpy.types import Operator, Menu
from bl_operators.presets import AddPresetBase

class OBJECT_MT_draw_presets(Menu):
    bl_label = "Object Draw Presets"
    preset_subdir = "object/draw"
    preset_operator = "script.execute_preset"
    draw = Menu.draw_preset

class AddPresetObjectDraw(AddPresetBase, Operator):
    '''Add a Object Draw Preset'''
    bl_idname = "camera.object_draw_preset_add"
    bl_label = "Add Object Draw Preset"
    preset_menu = "OBJECT_MT_draw_presets"

    # variable used for all preset values
    preset_defines = [
        "obj = bpy.context.object"
        ]

    # properties to store in the preset
    preset_values = [
        "obj.draw_type",
        "obj.show_bounds",
        "obj.draw_bounds_type",
        "obj.show_name",
        "obj.show_axis",
        "obj.show_wire",
        ]

    # where to store the preset
    preset_subdir = "object/draw"

# Draw into an existing panel
def panel_func(self, context):
    layout = self.layout

    row = layout.row(align=True)
    row.menu(OBJECT_MT_draw_presets.__name__, text=OBJECT_MT_draw_presets.bl_label)
    row.operator(AddPresetObjectDraw.bl_idname, text="", icon='ZOOMIN')
    row.operator(AddPresetObjectDraw.bl_idname, text="", icon='ZOOMOUT').remove_active = True

classes = (
    OBJECT_MT_draw_presets,
    AddPresetObjectDraw,
    )

def register():
    for cls in classes:
        bpy.utils.register_class(cls)
    bpy.types.OBJECT_PT_display.prepend(panel_func)

def unregister():
    for cls in classes:
        bpy.utils.unregister_class(cls)
    bpy.types.OBJECT_PT_display.remove(panel_func)

if __name__ == "__main__":
    register()


MPL Aggregate Verify 1',
        () => expect(
            AugSchemeMPL.aggregateVerify(
                [pk1, pk2], [message, message2], agg_sig),
            isTrue));
    var seed3 = [3] + seed.sublist(1);
    var sk3 = AugSchemeMPL.keyGen(seed3);
    var pk3 = sk3.getG1();
    var message3 = [100, 2, 254, 88, 90, 45, 23];
    var sig3 = AugSchemeMPL.sign(sk3, message3);
    var agg_sig_final = AugSchemeMPL.aggregate([agg_sig, sig3]);
    test(
        'AugSchemeMPL Aggregate Verify 2',
        () => expect(
            AugSchemeMPL.aggregateVerify(
                [pk1, pk2, pk3], [message, message2, message3], agg_sig_final),
            isTrue));
    var pop_sig1 = PopSchemeMPL.sign(sk1, message);
    var pop_sig2 = PopSchemeMPL.sign(sk2, message);
    var pop_sig3 = PopSchemeMPL.sign(sk3, message);
    var pop1 = PopSchemeMPL.popProve(sk1);
    var pop2 = PopSchemeMPL.popProve(sk2);
    var pop3 = PopSchemeMPL.popProve(sk3);
    test('PopSchemeMPL Prove', () {
      expect(PopSchemeMPL.popVerify(pk1, pop1), isTrue);
      expect(PopSchemeMPL.popVerify(pk2, pop2), isTrue);
      expect(PopSchemeMPL.popVerify(pk3, pop3), isTrue);
    });
    var pop_sig_agg = PopSchemeMPL.aggregate([pop_sig1, pop_sig2, pop_sig3]);
    test(
        'PopSchemeMPL Fast Aggregate Verify',
        () => expect(
            PopSchemeMPL.fastAggregateVerify(
                [pk1, pk2, pk3], message, pop_sig_agg),
            isTrue));
    var pop_agg_pk = pk1 + pk2 + pk3;
    test(
        'PopSchemeMPL Verify',
        () => expect(
            PopSchemeMPL.verify(pop_agg_pk, message, pop_sig_agg), isTrue));
    var pop_agg_sk = PrivateKey.aggregate([sk1, sk2, sk3]);
    test(
        'PopSchemeMPL Aggregate Sign',
        () => expect(
            PopSchemeMPL.sign(pop_agg_sk, message) == pop_sig_agg, isTrue));
    var master_sk = AugSchemeMPL.keyGen(seed);
    var child = AugSchemeMPL.deriveChildSk(master_sk, 152);
    AugSchemeMPL.deriveChildSk(child, 952);
    var master_pk = master_sk.getG1();
    var child_u = AugSchemeMPL.deriveChildSkUnhardened(master_sk, 22);
    var grandchild_u = AugSchemeMPL.deriveChildSkUnhardened(child_u, 0);
    var child_u_pk = AugSchemeMPL.deriveChildPkUnhardened(master_pk, 22);
    var grandchild_u_pk = AugSchemeMPL.deriveChildPkUnhardened(child_u_pk, 0);
    test('AugSchemeMPL Child Keys',
        () => expect(grandchild_u_pk == grandchild_u.getG1(), isTrue));
  });

  test('Current', () {
    var seed = [
      0,
      50,
      6,
      244,
      24,
      199,
      1,
      25,
      52,
      88,
      192,
      19,
      18,
      12,
      89,
      6,
      220,
      18,
      102,
      58,
      209,
      82,
      12,
      62,
      89,
      110,
      182,
      9,
      44,
      20,
      254,
      22,
    ];
    var sk = AugSchemeMPL.keyGen(seed);


import scrapy

from locations.items import Feature

class TwoMenAndATruckSpider(scrapy.Spider):
    name = "two_men_and_a_truck"
    item_attributes = {"brand": "Two Men and a Truck", "brand_wikidata": "Q7859087"}
    allowed_domains = ["twomenandatruck.com", "twomenandatruck.ca"]

    def start_requests(self):
        urls = [
            "https://twomenandatruck.com/feed/locations",
            "https://twomenandatruck.ca/feed/locations",
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        data = response.json()
        for place in data["locations"]:
            properties = {
                "name": place["location_name"],
                "ref": place["location_id"],
                "addr_full": place["address_street"],
                "city": place["address_city"],
                "state": place["address_state_province"],
                "postcode": place["address_postal_code"],
                "country": place["address_country"],
                "phone": place["phone_office"],
                "website": place["web_display_url"],
                "lat": place["coordinates_latitude"],
                "lon": place["coordinates_longitude"],
            }

            item = Feature(**properties)
            item["street_address"] = item.pop("addr_full", None)
            yield item


static void bytes2Lanes(byte[] s, long[] m) {
        int sOfs = 0;
        // Conversion traverses along x-axis before y-axis
        for (int y = 0; y < DM; y++, sOfs += 40) {
            b2lLittle(s, sOfs, m, DM*y, 40);
        }
    }

    /**
     * Utility function for transforming the specified array of
     * lanes 'm' into a byte array 's' as defined in section 3.1.3.
     */
    private static void lanes2Bytes(long[] m, byte[] s) {
        int sOfs = 0;
        // Conversion traverses along x-axis before y-axis
        for (int y = 0; y < DM; y++, sOfs += 40) {
            l2bLittle(m, DM*y, s, sOfs, 40);
        }
    }

    /**
     * Step mapping Theta as defined in section 3.2.1 .
     */
    private static long[] smTheta(long[] a) {
        long c0 = a[0]^a[5]^a[10]^a[15]^a[20];
        long c1 = a[1]^a[6]^a[11]^a[16]^a[21];
        long c2 = a[2]^a[7]^a[12]^a[17]^a[22];
        long c3 = a[3]^a[8]^a[13]^a[18]^a[23];
        long c4 = a[4]^a[9]^a[14]^a[19]^a[24];
        long d0 = c4 ^ Long.rotateLeft(c1, 1);
        long d1 = c0 ^ Long.rotateLeft(c2, 1);
        long d2 = c1 ^ Long.rotateLeft(c3, 1);
        long d3 = c2 ^ Long.rotateLeft(c4, 1);
        long d4 = c3 ^ Long.rotateLeft(c0, 1);
        for (int y = 0; y < a.length; y += DM) {
            a[y] ^= d0;
            a[y+1] ^= d1;
            a[y+2] ^= d2;
            a[y+3] ^= d3;
            a[y+4] ^= d4;
        }
        return a;
    }

    /**
     * Merged Step mapping Rho (section 3.2.2) and Pi (section 3.2.3).
     * for performance. Optimization is achieved by precalculating
     * shift constants for the following loop
     *   int xNext, yNext;
     *   for (int t = 0, x = 1, y = 0; t <= 23; t++, x = xNext, y = yNext) {
     *        int numberOfShift = ((t + 1)*(t + 2)/2) % 64;
     *        a[y][x] = Long.rotateLeft(a[y][x], numberOfShift);
     *        xNext = y;
     *        yNext = (2 * x + 3 * y) % DM;
     *   }
     * and with inplace permutation.
     */
    private static long[] smPiRho(long[] a) {
        long tmp = Long.rotateLeft(a[10], 3);
        a[10] = Long.rotateLeft(a[1], 1);
        a[1] = Long.rotateLeft(a[6], 44);
        a[6] = Long.rotateLeft(a[9], 20);
        a[9] = Long.rotateLeft(a[22], 61);
        a[22] = Long.rotateLeft(a[14], 39);
        a[14] = Long.rotateLeft(a[20], 18);
        a[20] = Long.rotateLeft(a[2], 62);
        a[2] = Long.rotateLeft(a[12], 43);
        a[12] = Long.rotateLeft(a[13], 25);
        a[13] = Long.rotateLeft(a[19], 8);
        a[19] = Long.rotateLeft(a[23], 56);
        a[23] = Long.rotateLeft(a[15], 41);
        a[15] = Long.rotateLeft(a[4], 27);
        a[4] = Long.rotateLeft(a[24], 14);
        a[24] = Long.rotateLeft(a[21], 2);
        a[21] = Long.rotateLeft(a[8], 55);
        a[8] = Long.rotateLeft(a[16


 Block for debugging with
                    BC6HBlockEncoder* blockEncode;
                    BYTE              output[16];
                    if (CMP_InitializeBCLibrary() == BC_ERROR_NONE)
                    {
                        CMP_BC6H_BLOCK_PARAMETERS user_settings;
                        user_settings.fQuality       = 1.0;
                        user_settings.bUsePatternRec = false;
                        if (m_acImageView->m_debugFormat == "BC6H")
                            user_settings.bIsSigned = false;
                        else
                            user_settings.bIsSigned = true;
                        user_settings.fExposure = 1.00;
                        if (CMP_CreateBC6HEncoder(user_settings, &blockEncode) == BC_ERROR_NONE)
                        {
                            if (m_OriginalMipImages->mipset->m_ChannelFormat != CF_Compressed)
                            {
                                CMP_EncodeBC6HBlock(blockEncode, in, output);
                                // Feed compressed output to be decoded into dec_out
                                CMP_DecodeBC6HBlock(output, dec_out);
                            }
                            else
                            {
                                CMP_DecodeBC6HBlock(cmp_in, dec_out);
                            }
                            CMP_DestroyBC6HEncoder(blockEncode);
                        }
                        CMP_ShutdownBCLibrary();
                    }
                }
            }
            else if (m_acImageView->m_debugFormat == "BC7")
            {
                // Encoder input to fill with data
                double in[16][4];
                double dec_out[16][4];

                // Get origin data pointer
                BYTE* data = mipLevel->m_pbData;
                int   d    = 0;
                for (int row = 0; row < 4; row++)
                {
                    index = (row * row_stride) + start_index;
                    for (int col = 0; col < 4; col++)
                    {
                        in[d][0] = data[index];
                        in[d][1] = data[index + 1];
                        in[d][2] = data[index + 2];
                        in[d][3] = data[index + 3];
                        d++;
                        index += 4;
                    }
                }
                hasData = true;

                if (hasData)
                {
                    // Use SDK interface to Encode a Block for debugging with
                    BC7BlockEncoder* blockEncode;
                    BYTE             output[16];
                    if (CMP_InitializeBCLibrary() == BC_ERROR_NONE)
                    {
                        CMP_BC6H_BLOCK_PARAMETERS user_settings;
                        user_settings.fQuality       = 1.0;
                        user_settings.bUsePatternRec = false;
                        user_settings.bIsSigned      = false;
                        user_settings.fExposure      = 1.00;
                        if (CMP_CreateBC7Encoder(0.05, false, false, 0xCF, 1.0, &blockEncode) == BC_ERROR_NONE)
                        {
                            CMP_EncodeBC7Block(blockEncode, in, output);
                            // Feed compressed output to be decoded into dec_out
                            CMP_DecodeBC7Block(output, dec_out);
                            CMP_DestroyBC7Encoder(blockEncode);
                        }
                        CMP_ShutdownBCLibrary();
                    }
                }
            }


mov r0, r5
	add r1, r4, #0x6
	bl make_ciphertext
	mov r2, #0x0
	add r1, r0, #0x6
	mov r0, r4
	mov r3, r2
	str r6, [sp, #0x0]
	bl CPSi_TcpWrite2Raw
	ldr r1, _020A10F0 ; =CPSiFree
	mov r0, r4
	ldr r1, [r1, #0x0]
	blx r1
	add sp, sp, #0x8
	ldmia sp!, {r4-r6,lr}
	bx lr
	.balign 4
_020A10EC: .word CPSiAlloc
_020A10F0: .word CPSiFree

	arm_func_start send_server_hello
send_server_hello:
	stmdb sp!, {r4-r9,lr}
	sub sp, sp, #0x4
	mov r9, r0
	ldr r7, [r9, #0xc]
	ldr r4, [r7, #0x820]
	cmp r4, #0x0
	ldrne r8, [r4, #0x0]
	moveq r8, #0x0
	bl date2sec
	mov r1, r0, lsr #0x18
	strb r1, [r7, #0x54]
	mov r1, r0, lsr #0x10
	strb r1, [r7, #0x55]
	mov r1, r0, lsr #0x8
	strb r1, [r7, #0x56]
	strb r0, [r7, #0x57]
	add r0, r7, #0x58
	mov r1, #0x1c
	bl set_random
	ldr r1, _020A1360 ; =CPSiAlloc
	add r0, r8, #0x9d
	ldr r1, [r1, #0x0]
	blx r1
	movs r6, r0
	moveq r0, #0x9
	streqb r0, [r7, #0x455]
	addeq sp, sp, #0x4
	moveq r0, #0x1
	ldmeqia sp!, {r4-r9,lr}
	bxeq lr
	mov r0, #0x2
	add r5, r6, #0x5
	strb r0, [r6, #0x5]
	mov r3, #0x0
	strb r3, [r5, #0x1]
	strb r3, [r5, #0x2]
	mov r0, #0x46
	strb r0, [r5, #0x3]
	mov r0, #0x3
	strb r0, [r5, #0x4]
	add r0, r7, #0x54
	add r1, r5, #0x6
	mov r2, #0x20
	strb r3, [r5, #0x5]
	bl MI_CpuCopy8
	mov r2, #0x20
	strb r2, [r5, #0x26]
	ldrb r0, [r7, #0x30]
	cmp r0, #0x0
	beq _020A11D8
	add r0, r7, #0x74
	add r1, r5, #0x27
	bl MI_CpuCopy8
	mov r0, #0x1
	strb r0, [r7, #0x31]
	add r5, r5, #0x47
	b _020A1238
_020A11D8:
	add r0, r5, #


box:border-box!important;transform-box:border-box!important;will-change:unset!important}.panel-group[data-v-37f2f4c2]{margin-top:18px}.panel-group .card-panel-col[data-v-37f2f4c2]{margin-bottom:32px}.panel-group .card-panel[data-v-37f2f4c2]{height:108px;cursor:pointer;font-size:12px;position:relative;overflow:hidden;color:#666;background:#fff;-webkit-box-shadow:4px 4px 40px rgba(0,0,0,.05);box-shadow:4px 4px 40px rgba(0,0,0,.05);border-color:rgba(0,0,0,.05)}.panel-group .card-panel:hover .card-panel-icon-wrapper[data-v-37f2f4c2]{color:#fff}.panel-group .card-panel:hover .icon-people[data-v-37f2f4c2]{background:#40c9c6}.panel-group .card-panel:hover .icon-message[data-v-37f2f4c2]{background:#36a3f7}.panel-group .card-panel:hover .icon-money[data-v-37f2f4c2]{background:#f4516c}.panel-group .card-panel:hover .icon-shopping[data-v-37f2f4c2]{background:#34bfa3}.panel-group .card-panel .icon-people[data-v-37f2f4c2]{color:#40c9c6}.panel-group .card-panel .icon-message[data-v-37f2f4c2]{color:#36a3f7}.panel-group .card-panel .icon-money[data-v-37f2f4c2]{color:#f4516c}.panel-group .card-panel .icon-shopping[data-v-37f2f4c2]{color:#34bfa3}.panel-group .card-panel .card-panel-icon-wrapper[data-v-37f2f4c2]{float:left;margin:14px 0 0 14px;padding:16px;-webkit-transition:all .38s ease-out;transition:all .38s ease-out;border-radius:6px}.panel-group .card-panel .card-panel-icon[data-v-37f2f4c2]{float:left;font-size:48px}.panel-group .card-panel .card-panel-description[data-v-37f2f4c2]{float:right;font-weight:700;margin:26px 26px 26px 0}.panel-group .card-panel .card-panel-description .card-panel-text[data-v-37f2f4c2]{line-height:18px;color:rgba(0,0,0,.45);font-size:16px;margin-bottom:12px}.panel-group .card-panel .card-panel-description .card-panel-num[data-v-37f2f4c2]{font-size:20px}.todoapp{font:14px Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1.4em;color:#4d4d4d;min-width:230px;max-width:550px;margin:0 auto;font-weight:300;background:#fff;z-index:1;position:relative}.todoapp,.todoapp button{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.todoapp button{margin:0;padding:0;border:0;background:none;font-size:100%;vertical-align:baseline;font-family:inherit;font-weight:inherit;color:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none}.todoapp :focus{outline:0}.todoapp .hidden{display:none}.todoapp .todoapp{background:#fff;margin:130px 0 40px;position:relative;-webkit-box-shadow:0 2px 4px 0 rgba(0,


css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
<link rel="home" href="../../../index.html" title="Asio">
<link rel="up" href="../generic__datagram_protocol.html" title="generic::datagram_protocol">
<link rel="prev" href="operator_eq__eq_.html" title="generic::datagram_protocol::operator==">
<link rel="next" href="socket.html" title="generic::datagram_protocol::socket">

generic::datagram_protocol::protocol

Obtain
          an identifier for the protocol.

int protocol() const;

Copyright © 2003-2021 Christopher
      M. Kohlhoff

        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

<a accesskey="n" h


符（像方便面里的脱水蔬菜，充数用的）

---

### Ⅲ. **数据管道：打造文本流水线**
#### 1. 文本向量化函数（文字→数字）
```python
text_pipeline = lambda x: [vocab[token] for token in tokenizer(x)]
label_pipeline = lambda x: 1 if x == 'pos' else 0

# 测试效果
print(text_pipeline("I love PyTorch!"))  # 输出: [23, 56, 345]
print(label_pipeline('pos'))             # 输出: 1
```

#### 2. 封装DataLoader（自动分批+填充）
```python
from torch.utils.data import DataLoader
from torch.nn.utils.rnn import pad_sequence

def collate_batch(batch):
    text_list, label_list = [], []
    for (_text, _label) in batch:
        text = torch.tensor(text_pipeline(_text), dtype=torch.int64)
        text_list.append(text)
        label_list.append(label_pipeline(_label))

    # 填充到相同长度（像整理不同高度的书架）
    padded_text = pad_sequence(text_list, padding_value=vocab['<pad>'])
    return padded_text.T, torch.tensor(label_list)

# 创建DataLoader
train_loader = DataLoader(train_data, batch_size=32, shuffle=True, collate_fn=collate_batch)
```

**技术吐槽**：
"pad_sequence就像给不同身高的学生发增高鞋垫！"

---

### Ⅳ. **模型构建：组装情绪分析机甲**
```python
import torch.nn as nn

class EmotionDetector(nn.Module):
    def __init__(self, vocab_size, embed_dim, hidden_size):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim, padding_idx=vocab['<pad>'])
        self.lstm = nn.LSTM(embed_dim, hidden_size, batch_first=True, bidirectional=True)
        self.fc = nn.Linear(hidden_size*2, 1)  # 双向LSTM需要*2
        self.dropout = nn.Dropout(0.5)

    def forward(self, x):
        # x形状: [batch_size, seq_len]
        embedded = self.embedding(x)          # → [batch, seq, embed]
        lstm_out, _ = self.lstm(embedded)     # → [batch, seq, hidden*2]
        # 取最后时刻的输出（情绪累积结果）
        last_output = lstm_out[:, -1, :]      # → [batch, hidden*2]
        return self.fc(self.dropout(last_output))

# 初始化模型
model = EmotionDetector(len(vocab), 128, 256)
print(model)
```

**机甲部件解析**：
1. **Embedding层**：把单词变成128维向量（文字→数学坐标）
2. **Bi-LSTM**：双


Lang',
  'Garcia',
  'Wheeler',
  'Russo',
  'Gilbert',
  'Browning',
  'Woodward',
  'Rivera',
  'Carrillo',
  'Wyatt',
  'Velez',
  'Berger',
  'Mullins',
  'Roberson',
  'Abbott',
  'Bird',
  'Berg',
  'Kline',
  'Bowen',
  'Shea',
  'Meyer',
  'Bell',
  'Mills',
  'Velazquez',
  'Zhang',
  'Ruiz',
  'Green',
  'Hays',
  'Norman',
  'Shelton',
  'Carr',
  'Mueller',
  'Walton',
  'Cohen',
  'Moody',
  'Farley',
  'Moses',
  'Bernard',
  'Hale',
  'Sanchez',
  'Andersen',
  'Townsend',
  'Frank',
  'Richmond',
  'Ware',
  'Krueger',
  'Hughes',
  'Bowman',
  'Hurst',
  'Barajas',
  'Tran',
  'Dickson',
  'Davies',
  'Melton',
  'Stephenson',
  'Keith',
  'Gallagher',
  'Buck',
  'Haynes',
  'Moon',
  'Cooke',
  'Hill',
  'Hoffman',
  'Reilly',
  'Garza',
  'Roman',
  'Stokes',
  'Spencer',
  'Beck',
  'Galvan',
  'Chung',
  'Mccormick',
  'Weiss',
  'Villanueva',
  'Porter',
  'Oneal',
  'Faulkner',
  'Wang',
  'Zimmerman',
  'Shepard',
  'Braun',
  'Stone',
  'King',
  'Weaver',
  'Simon',
  'Joyce',
  'Villa',
  'Roberts',
  'Valentine',
  'Booth',
  'Scott',
  'Warren',
  'Ochoa',
  'Yates',
  'Raymond',
  'Burch',
  'Conrad',
  'Vega',
  'Parsons',
  'Robinson',
  'Friedman',
  'Doyle',
  'Dillon',
  'Edwards',
  'Adkins',
  'Blair',
  'Morrow',
  'Norton',
  'Warner',
  'Duke',
  'Ballard',
  'Byrd',
  'Odonnell',
  'Wise',
  'Sheppard',
  'Burgess',
  'Pollard',
  'Mccoy',
  'Rollins',
  'Short',
  'Fritz',
  'Gonzales',
  'Tanner',
  'Mata',
];
part of 'create_inventory_cubit.dart';

class CreateInventoryState extends Equatable {
  final InventoryModel inventory;
  final bool isEditing;
  final bool success;

  final String? nameError;
  final String? descriptionError;
  final String? locationError;
  final String? noteError;

  const CreateInventoryState({
    required this.inventory,
    this.success = false,
    this.isEditing = false,
    this.nameError,
    this.descriptionError,
    this.locationError,
    this.noteError,
  });

  factory CreateInventoryState.initial() {
    return CreateInventoryState(
      inventory: InventoryModel.empty(),
    );
  }

  CreateInventoryState copyWith({
    InventoryModel? inventory,
    bool? success,
    bool? isEditing,
    String? nameError,
    String? descriptionError,
    String? locationError,
    String? noteError,
  }) {
    return CreateInventoryState(
      inventory: inventory ?? this.inventory,
      success: success ?? this.success,
      isEditing: isEditing ?? this.isEditing,
      nameError: nameError,
      descriptionError: descriptionError,
      locationError: locationError,
      noteError: noteError,
    );
  }

  @override
  List<Object?> get props => [
        inventory,
        success,
        isEditing,
        nameError,
        descriptionError,
        locationError,
        noteError,
      ];
}
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:gap/gap.dart';
import 'package:rfid_inventory_app/core/cubits/reader/reader_


由为 [`/tsinghua/lib/zydt/yg`](https://rsshub.app/tsinghua/lib/zydt/yg)。
:::

| 已购 | 试用 |
| ---- | ---- |
| yg   | sy   |

### 清华新闻 <Site url="www.tsinghua.edu.cn/news.htm" size="sm" />

<Route namespace="tsinghua" :data='{"path":"/news/:category?","categories":["university"],"example":"/tsinghua/news","parameters":{"category":"分类，可在对应分类页 URL 中找到，留空为 `zxdt`"},"features":{"requireConfig":false,"requirePuppeteer":false,"antiCrawler":false,"supportBT":false,"supportPodcast":false,"supportScihub":false},"name":"清华新闻","radar":[{"source":["www.tsinghua.edu.cn/news/:category"]}],"maintainers":["TonyRL"],"url":"www.tsinghua.edu.cn/news.htm","location":"news.ts","heat":0,"topFeeds":[]}' :test='{"code":1,"message":"AssertionError: expected 503 to be 200 // Object.is equality\n    at /home/runner/work/RSSHub/RSSHub/lib/routes.test.ts:79:41\n    at processTicksAndRejections (node:internal/process/task_queues:105:5)\n    at file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:533:5\n    at runTest (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1056:11)\n    at async Promise.all (index 2345)\n    at runSuite (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1191:13)\n    at runSuite (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1205:15)\n    at runFiles (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1262:5)\n    at startTests (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/@vitest+runner@2.1.9/node_modules/@vitest/runner/dist/index.js:1271:3)\n    at file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/vitest@2.1.9_@types+node@24.7.0_jsdom@27.0.0_bufferutil@4.0.9_postcss@8.5.6_utf-8-valid_7a9f9ab30ae2494ce58bc7fcf1b9ad61/node_modules/vitest/dist/chunks/runBaseTests.3qpJUEJM.js:126:11\n    at withEnv (file:///home/runner/work/RSSHub/RSSHub/node_modules/.pnpm/vitest@2.1.9_@types+node@24.7.0_jsdom@27.0.0_bufferutil@4.0.9_postcss@8.5.6_utf-8-valid_7a9f9ab30ae2494ce58bc7fcf1b9ad61/node_modules


, 0x4c(r1)
/* 80345444 003410A4  83 C1 00 48 */	lwz r30, 0x48(r1)
/* 80345448 003410A8  7C 08 03 A6 */	mtlr r0
/* 8034544C 003410AC  38 21 00 50 */	addi r1, r1, 0x50
/* 80345450 003410B0  4E 80 00 20 */	blr

.global gpiPeerFinishTransferMessage
gpiPeerFinishTransferMessage:
/* 80345454 003410B4  94 21 FF C0 */	stwu r1, -0x40(r1)
/* 80345458 003410B8  7C 08 02 A6 */	mflr r0
/* 8034545C 003410BC  2C 05 00 00 */	cmpwi r5, 0
/* 80345460 003410C0  90 01 00 44 */	stw r0, 0x44(r1)
/* 80345464 003410C4  93 E1 00 3C */	stw r31, 0x3c(r1)
/* 80345468 003410C8  7C DF 33 78 */	mr r31, r6
/* 8034546C 003410CC  93 C1 00 38 */	stw r30, 0x38(r1)
/* 80345470 003410D0  7C BE 2B 78 */	mr r30, r5
/* 80345474 003410D4  93 A1 00 34 */	stw r29, 0x34(r1)
/* 80345478 003410D8  7C 9D 23 78 */	mr r29, r4
/* 8034547C 003410DC  93 81 00 30 */	stw r28, 0x30(r1)
/* 80345480 003410E0  7C 7C 1B 78 */	mr r28, r3
/* 80345484 003410E4  40 82 00 08 */	bne lbl_8034548C
/* 80345488 003410E8  3B CD 91 A0 */	addi r30, r13, lbl_8063E460-_SDA_BASE_
lbl_8034548C:
/* 8034548C 003410EC  2C 06 FF FF */	cmpwi r6, -1
/* 80345490 003410F0  40 82 00 10 */	bne lbl_803454A0
/* 80345494 003410F4  7F C3 F3 78 */	mr r3, r30
/* 80345498 003410F8  4B E8 16 CD */	bl strlen
/* 8034549C 003410FC  7C 7F 1B 78 */	mr r31, r3
lbl_803454A0:
/* 803454A0 00341100  3C 80 80 45 */	lis r4, lbl_8044B05C@ha
/* 803454A4 00341104  7F E5 FB 78 */	mr r5, r31
/* 803454A8 00341108  38 61 00 08 */	addi r3, r1, 8
/* 803454AC 0034110C  38 84 B0 5C */	addi r4, r4, lbl_8044B05C@l
/* 803454B0 00341110  4C C6 31 82 */	crclr 6
/* 803454B4 00341114  4B E8 76 49 */	bl sprintf
/* 803454B8 00341118  7F 83 E3 78 */	mr r3, r28
/* 803454BC 0034111C  7F A4 EB 78 */	mr r4, r29
/* 803454C0 00341120  38 A1 00 08 */	addi r5, r1, 8
/* 803454C4 00341124  4B FF A3 35 */	bl func_8033F7F8
/* 803454C8 00341128  2C 03 00 00 */	cmpwi r3, 0
/* 803454CC 0034112C  41 82 00 08 */	beq lbl


]
    upstreamRequestFilter --> requestBodyFilter[request_body_filter]
    requestBodyFilter --> upstreamResponseFilter[upstream_response_filter]
    upstreamResponseFilter --> responseFilter[response_filter]
    responseFilter --> upstreamResponseBodyFilter[upstream_response_body_filter]
    upstreamResponseBodyFilter --> responseBodyFilter[response_body_filter]
    responseBodyFilter --> logging[logging]
    logging --> endRequest[请求结束]
    endRequest --> newCtx
```

## 关键过滤器详解

让我们详细解析一些重要的过滤器：

### 1. 初始化和请求处理

- **new_ctx**: 为每个请求创建一个新的上下文对象，用于在整个请求生命周期中共享状态。
- **early_request_filter**: 在任何下游模块执行之前处理请求，提供对模块行为的精细控制。
- **request_filter**: 在下游模块执行后处理请求，可用于验证、速率限制、访问控制等。如果返回`Ok(true)`，代理会直接返回响应并结束请求处理。

### 2. 缓存相关

- **request_cache_filter**: 决定请求是否可缓存及使用哪个缓存后端。
- **is_purge**: 判断请求是否用于清除缓存。

### 3. 上游连接和请求修改

- **proxy_upstream_filter**: 决定请求是否应该继续转发到上游服务器。
- **upstream_peer**: 定义代理应该将请求发送到哪里，返回包含目标信息的`HttpPeer`。
- **connected_to_upstream**: 在成功连接到上游服务器后调用，可用于记录时间和连接相关信息。
- **upstream_request_filter**: 在请求发送到上游之前修改请求，例如添加或修改请求头。

### 4. 请求体和响应处理

- **request_body_filter**: 处理传入的请求体片段。
- **upstream_response_filter**: 修改来自上游的响应头，这发生在缓存之前。
- **response_filter**: 在响应发送到下游之前修改响应头，对所有响应(包括缓存的)调用。
- **upstream_response_body_filter**: 处理从上游接收的响应体片段。
- **response_body_filter**: 在响应体发送到下游之前处理响应体片段。

### 5. 完成和错误处理

- **logging**: 在响应成功发送到下游或有致命错误终止请求时调用，用于收集指标和发送访问日志。
- **fail_to_proxy**: 在请求遇到致命错误时调用，可以向下游写入错误响应。
- **error_while_proxy**: 在与上游建立连接后发生错误时调用。
- **fail_to_connect**: 在与上游建立连接过程中出错时调用，可以决定错误是否可重试。

## 实现示例分析

在控制台输出中，我们可以看到一个具体请求的处理流程，从中可以得出以下信息：

1. 请求是一个POST请求，目标是`/users`，使用HTTP/2。
2. 在`


 host
    pub ticket: HostData,

    /// voice / video talk configuration(?)
    pub trailer: Trailer,

    /// voice / video talk high resolution configuration(?)
    #[serde(rename = "trailer.h")]
    pub trailer_high: TrailerHigh,
}

/// Additional config
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Trailer {
    #[serde(rename = "tokenExpireTime")]
    pub token_expire_time: i32,

    pub resolution: i32,

    #[serde(rename = "resolutionHD")]
    pub resolution_hd: i32,

    #[serde(rename = "compRatio")]
    pub compress_ratio: i8,

    #[serde(rename = "compRatioHD")]
    pub compress_ratio_hd: i8,

    #[serde(rename = "downMode")]
    pub down_mode: i8,

    /// Concurrent file download limit
    #[serde(rename = "concurrentDownLimit")]
    pub concurrent_down_limit: i16,

    /// Concurrent file upload limit
    #[serde(rename = "concurrentUpLimit")]
    pub concurrent_up_limit: i16,

    #[serde(rename = "maxRelaySize")]
    pub max_relay_size: i32,

    #[serde(rename = "downCheckSize")]
    pub down_check_size: i32,

    /// Maximium attachment upload size
    #[serde(rename = "upMaxSize")]
    pub up_max_size: i32,

    #[serde(rename = "videoUpMaxSize")]
    pub video_up_max_size: i32,

    #[serde(rename = "vCodec")]
    pub video_codec: i8,

    #[serde(rename = "vFps")]
    pub video_fps: i16,

    #[serde(rename = "aCodec")]
    pub audio_codec: i8,

    /// Period that server store uploaded files
    #[serde(rename = "contentExpireTime")]
    pub content_expire_time: i32,

    #[serde(rename = "vResolution")]
    pub video_resolution: i32,

    #[serde(rename = "vBitrate")]
    pub video_bitrate: i32,

    #[serde(rename = "aFrequency")]
    pub audio_frequency: i32,
}

/// High speed trailer configuration
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TrailerHigh {
    #[serde(rename = "vResolution")]
    pub video_resolution: i32,

    #[serde(rename = "vBitrate")]
    pub video_bitrate: i32,

    #[serde(rename = "aFrequency")]
    pub audio_frequency: i32,
}
mod imp;

use gtk::glib;
use gtk::prelude::*;
use gtk::subclass::prelude::*;

glib::wrapper! {
    pub struct CustomBuildable(ObjectSubclass<imp::CustomBuildable>) @extends gtk::Widget, @implements gtk::Buildable;
}

impl CustomBuildable {
    pub fn add_suffix<T: glib::IsA<gtk::Widget>>(&self, widget: &T) {
        let imp = self.imp();
        imp.suffixes.append(widget);
        imp.suffixes.show();
    }

    pub fn add_prefix<T: glib::IsA<gtk::Widget>>(&self, widget: &T) {
        let imp = self.imp();
        imp.prefixes.append(widget);
        imp.prefixes.show();
    }
}
// -*- mode: rust; -*-
//
// This file is part of schnorrkel.
// Copyright (c) 2017-2019 <NAME>
// See LICENSE for licensing information.
//
// Authors:
// - <NAME> <<EMAIL>>
// - <NAME> <<EMAIL>>

//! Schnorr signature variants using Ristretto point compression.
//!
//! # Example
//!
//! Creating a signat


ble_values(&["chinese-simplified", "chinese-traditional", "english", "french", "italian", "japanese", "korean", "spanish"])
        .default_value("english")
}
fn wallet_argument_mnemonic_languages_match<'a>(
    matches: &ArgMatches<'a>,
) -> Vec<impl cardano::bip::bip39::dictionary::Language> {
    let mut languages = Vec::new();
    for lan in matches.values_of("MNEMONIC_LANGUAGES").unwrap() {
        let value = match lan {
            "chinese-simplified" => cardano::bip::bip39::dictionary::CHINESE_SIMPLIFIED,
            "chinese-traditional" => cardano::bip::bip39::dictionary::CHINESE_TRADITIONAL,
            "english" => cardano::bip::bip39::dictionary::ENGLISH,
            "french" => cardano::bip::bip39::dictionary::FRENCH,
            "italian" => cardano::bip::bip39::dictionary::ITALIAN,
            "japanese" => cardano::bip::bip39::dictionary::JAPANESE,
            "korean" => cardano::bip::bip39::dictionary::KOREAN,
            "spanish" => cardano::bip::bip39::dictionary::SPANISH,
            _ => unreachable!(), // clap knows the default values
        };
        languages.push(value);
    }
    languages
}
fn wallet_argument_mnemonic_language<'a, 'b>() -> Arg<'a, 'b> {
    Arg::with_name("MNEMONIC_LANGUAGE")
        .help("the language of the mnemonic words to recover the wallet from.")
        .long("mnemonics-language")
        .takes_value(true)
        .possible_values(&[
            "chinese-simplified",
            "chinese-traditional",
            "english",
            "french",
            "italian",
            "japanese",
            "korean",
            "spanish",
        ])
        .default_value("english")
}
fn wallet_argument_mnemonic_language_match<'a>(
    matches: &ArgMatches<'a>,
) -> impl cardano::bip::bip39::dictionary::Language {
    match matches.value_of("MNEMONIC_LANGUAGE").unwrap() {
        "chinese-simplified" => cardano::bip::bip39::dictionary::CHINESE_SIMPLIFIED,
        "chinese-traditional" => cardano::bip::bip39::dictionary::CHINESE_TRADITIONAL,
        "english" => cardano::bip::bip39::dictionary::ENGLISH,
        "french" => cardano::bip::bip39::dictionary::FRENCH,
        "italian" => cardano::bip::bip39::dictionary::ITALIAN,
        "japanese" => cardano::bip::bip39::dictionary::JAPANESE,
        "korean" => cardano::bip::bip39::dictionary::KOREAN,
        "spanish" => cardano::bip::bip39::dictionary::SPANISH,
        _ => unreachable!(), // clap knows the default values
    }
}
fn wallet_argument_derivation_scheme<'a, 'b>() -> Arg<'a, 'b> {
    Arg::with_name("DERIVATION_SCHEME")
        .help("derivation scheme")
        .long("derivation-scheme")
        .takes_value(true)
        .possible_values(&["v1", "v2"])
        .default_value("v2")
}
fn wallet_argument_derivation_scheme_match<'a>(
    matches: &ArgMatches<'a>,
) -> cardano::hdwallet::DerivationScheme {
    match matches.value_of("DERIVATION_SCHEME") {
        Some("v1") => cardano::hdwallet::DerivationScheme::V1,
        Some("v2") => cardano::hdwallet::DerivationScheme::V2,
        _ => unreachable!(), // default is "v2"
    }
}
fn wallet_argument_mnemonic_size<'a, 'b>() -> Arg<'a, 'b> {


.add(p_72954_1_);
    }

    /**
     * Removes a worldAccess from the worldAccesses object
     */
    public void removeWorldAccess(IWorldAccess p_72848_1_) {
        this.worldAccesses.remove(p_72848_1_);
    }

    /**
     * Returns a list of bounding boxes that collide with aabb excluding the passed
     * in entity's collision. Args: entity,
     * aabb
     */
    public List<AxisAlignedBB> getCollidingBoundingBoxes(Entity p_72945_1_, AxisAlignedBB p_72945_2_) {
        this.collidingBoundingBoxes.clear();
        int var3 = MathHelper.floor_double(p_72945_2_.minX);
        int var4 = MathHelper.floor_double(p_72945_2_.maxX + 1.0D);
        int var5 = MathHelper.floor_double(p_72945_2_.minY);
        int var6 = MathHelper.floor_double(p_72945_2_.maxY + 1.0D);
        int var7 = MathHelper.floor_double(p_72945_2_.minZ);
        int var8 = MathHelper.floor_double(p_72945_2_.maxZ + 1.0D);

        for (int var9 = var3; var9 < var4; ++var9) {
            for (int var10 = var7; var10 < var8; ++var10) {
                if (this.blockExists(var9, 64, var10)) {
                    for (int var11 = var5 - 1; var11 < var6; ++var11) {
                        Block var12;

                        if (var9 >= -30000000 && var9 < 30000000 && var10 >= -30000000 && var10 < 30000000) {
                            var12 = this.getBlock(var9, var11, var10);
                        } else {
                            var12 = Blocks.stone;
                        }

                        var12.addCollisionBoxesToList(this, var9, var11, var10, p_72945_2_, this.collidingBoundingBoxes,
                                p_72945_1_);
                    }
                }
            }
        }

        double var14 = 0.25D;
        List var15 = this.getEntitiesWithinAABBExcludingEntity(p_72945_1_, p_72945_2_.expand(var14, var14, var14));

        for (int var16 = 0; var16 < var15.size(); ++var16) {
            AxisAlignedBB var13 = ((Entity) var15.get(var16)).getCollidingBoundingBox();

            if (var13 != null && var13.intersectsWith(p_72945_2_)) {
                this.collidingBoundingBoxes.add(var13);
            }

            var13 = p_72945_1_.getCollisionBox((Entity) var15.get(var16));

            if (var13 != null && var13.intersectsWith(p_72945_2_)) {
                this.collidingBoundingBoxes.add(var13);
            }
        }

        return this.collidingBoundingBoxes;
    }

    public List<AxisAlignedBB> func_147461_a(AxisAlignedBB p_147461_1_) {
        this.collidingBoundingBoxes.clear();
        int var2 = MathHelper.floor_double(p_147461_1_.minX);
        int var3 = MathHelper.floor_double(p_147461_1_.maxX + 1.0D);
        int var4 = MathHelper.floor_double(p_147461_1_.minY);
        int var5 = MathHelper.floor_double(p_147461_1_.maxY + 1.0D);
        int var6 = MathHelper.floor_double(p_147461_1_.minZ);


statement(tuple_stmt)
    assert __create_source_from_ast(statement_to_ast_visitor.ast_node) == "var_0 = ()"

def test_statement_to_ast_dict_single(statement_to_ast_visitor, default_test_case):
    dict_stmt = stmt.DictStatement(
        default_test_case,
        default_test_case.test_cluster.type_system.convert_type_hint(dict[int, int]),
        [
            (
                stmt.IntPrimitiveStatement(default_test_case, 5).ret_val,
                stmt.IntPrimitiveStatement(default_test_case, 5).ret_val,
            )
        ],
    )
    statement_to_ast_visitor.visit_dict_statement(dict_stmt)
    assert __create_source_from_ast(statement_to_ast_visitor.ast_node) == "var_0 = {var_1: var_2}"

def test_statement_to_ast_dict_empty(statement_to_ast_visitor, default_test_case):
    dict_stmt = stmt.DictStatement(
        default_test_case,
        default_test_case.test_cluster.type_system.convert_type_hint(dict[int, int]),
        [],
    )
    statement_to_ast_visitor.visit_dict_statement(dict_stmt)
    assert __create_source_from_ast(statement_to_ast_visitor.ast_node) == "var_0 = {}"

def test_statement_to_ast_ast_assign(statement_to_ast_visitor, default_test_case):
    """Test the visit_ast_assign_statement method."""
    # Create a simple AST node (constant)
    ast_node = ast.Constant(value=42)
    ref_dict = {}

    # Create the ASTAssignStatement
    ast_assign_stmt = stmt.ASTAssignStatement(default_test_case, ast_node, ref_dict)

    # Visit the statement
    statement_to_ast_visitor.visit_ast_assign_statement(ast_assign_stmt)

    # Verify the generated AST node
    assert __create_source_from_ast(statement_to_ast_visitor.ast_node) == "var_0 = 42"


он, большой посох истребления",
[71799] = "Символ удара в спину",
[71805] = "Королевский гранат",
[71806] = "Светолит",
[71807] = "Иолит Подземья",
[71808] = "Лавовый коралл",
[71809] = "Сумрачная шпинель",
[71810] = "Эльфийский хризолит",
[71817] = "Прочный иолит Подземья",
[71818] = "Грозовой иолит Подземья",
[71819] = "Искрящийся иолит Подземья",
[71820] = "Цельный иолит Подземья",
[71821] = "Эскиз: прочный иолит Подземья",
[71822] = "Смутный эльфийский хризолит",
[71823] = "Прожигающий эльфийский хризолит",
[71824] = "Молниевый эльфийский хризолит",
[71825] = "Эльфийский хризолит сенсея",
[71826] = "Заряженный эльфийский хризолит",
[71827] = "Дзэн-эльфийский хризолит",
[71828] = "Сбалансированный эльфийский хризолит",
[71829] = "Насыщенный эльфийский хризолит",
[71830] = "Померкший эльфийский хризолит",
[71831] = "Светозарный эльфийский хризолит",
[71832] = "Раздробленный эльфийский хризолит",
[71833] = "Усиленный эльфийский хризолит",
[71834] = "Зазубренный эльфийский хризолит",
[71835] = "Монарший эльфийский хризолит",
[71836] = "Мощный эльфийский хризолит",
[71837] = "Живой эльфийский хризолит",
[71838] = "Всевластный эльфийский хризолит",
[71839] = "Неизменный эльфийский хризолит",
[71840] = "Смертоносный лавовый коралл",
[71841] = "Коварный лавовый коралл",
[71842] = "Могущественный лавовый коралл",
[71843] = "Покрытый письменами лавовый коралл",
[71844] = "Полированный лавовый коралл",
[71845] = "Затвердевший лавовый коралл",
[71846] = "Стойкий лавовый коралл",
[71847] = "Лавовый коралл воителя",
[71848] = "Лавовый коралл проворства",
[71849] = "Гибельный лавовый коралл",
[71850] = "Тревожный лавовый коралл",
[71851] = "Броский лавовый коралл",
[71852] = "Лавовый коралл адепта",
[71853] = "Острый лавовый коралл",
[71854] = "Искусный лав


tersection.NO_INTERSECTION_0;
    }

    private void setLine(int i, LineSegment lineSegment) {
        lineSegments.set(i, lineSegment);
    }

    public void addCircle(double dx, double dy, double dr, LineColor ic) {
        circles.add(new Circle(dx, dy, dr, ic));
    }

    public void addCircle(Point t, double dr) {
        addCircle(t.getX(), t.getY(), dr, LineColor.BLACK_0);
    }

    //Generates a circle with a radius of 0 at the intersection of circles -------------------------------
    public void applyCircleCircleIntersection(int imin, int imax, int jmin, int jmax) {
        for (int i = imin; i <= imax; i++) {
            Circle ei = new Circle();
            ei.set(circles.get(i));
            if (ei.getR() > Epsilon.UNKNOWN_1EN7) {//Circles with a radius of 0 are not applicable
                for (int j = jmin; j <= jmax; j++) {

                    Circle ej = new Circle();
                    ej.set(circles.get(j));
                    if (ej.getR() > Epsilon.UNKNOWN_1EN7) {//Circles with a radius of 0 are not applicable
                        if (OritaCalc.distance(ei.determineCenter(), ej.determineCenter()) < Epsilon.UNKNOWN_1EN6) {
                            //Two circles are concentric and do not intersect
                        } else if (Math.abs(OritaCalc.distance(ei.determineCenter(), ej.determineCenter()) - ei.getR() - ej.getR()) < Epsilon.UNKNOWN_1EN4) {
                            //Two circles intersect at one point
                            addCircle(OritaCalc.internalDivisionRatio(ei.determineCenter(), ej.determineCenter(), ei.getR(), ej.getR()), 0.0);
                        } else if (OritaCalc.distance(ei.determineCenter(), ej.determineCenter()) > ei.getR() + ej.getR()) {
                            //Two circles do not intersect
                        } else if (Math.abs(OritaCalc.distance(ei.determineCenter(), ej.determineCenter()) - Math.abs(ei.getR() - ej.getR())) < Epsilon.UNKNOWN_1EN4) {
                            //Two circles intersect at one point
                            addCircle(OritaCalc.internalDivisionRatio(ei.determineCenter(), ej.determineCenter(), -ei.getR(), ej.getR()), 0.0);
                        } else if (OritaCalc.distance(ei.determineCenter(), ej.determineCenter()) < Math.abs(ei.getR() - ej.getR())) {
                            //Two circles do not intersect
                        } else {//Two circles intersect at two points
                            LineSegment lineSegment = OritaCalc.circle_to_circle_no_intersection_wo_musubu_lineSegment(ei, ej);

                            addCircle(lineSegment.getA(), 0.0);
                            addCircle(lineSegment.getB(), 0.0);
                        }
                    }
                }
            }
        }
    }

    //A circle with a radius of 0 is generated at the intersection of the circle and the polygonal line.
    public void


 Handle keyboard accessibility for traversing menu.
					SUBMENUS[ i ].addEventListener( 'keydown', function( e ) {
						// These specific selectors help us only select items that are visible.
						var focusSelector = 'ul.toggle-show > li > a, ul.toggle-show > li > .dropdown-nav-special-toggle';

						// 9 is tab KeyMap
						if ( 9 === e.keyCode ) {
							if ( e.shiftKey ) {
								// Means we're tabbing out of the beginning of the submenu.
								if ( window.kadence.isfirstFocusableElement (SUBMENUS[ i ], document.activeElement, focusSelector ) ) {
									window.kadence.toggleSubMenu( SUBMENUS[ i ].parentNode, false );
								}
								// Means we're tabbing out of the end of the submenu.
							} else if ( window.kadence.islastFocusableElement( SUBMENUS[ i ], document.activeElement, focusSelector ) ) {
								window.kadence.toggleSubMenu( SUBMENUS[ i ].parentNode, false );
							}
						}
					} );

					SUBMENUS[ i ].parentNode.classList.add( 'menu-item--has-toggle' );
				}
			}
		},
		/**
		 * Toggle submenus open and closed, and tell screen readers what's going on.
		 * @param {Object} parentMenuItem Parent menu element.
		 * @param {boolean} forceToggle Force the menu toggle.
		 * @return {void}
		 */
		 toggleSubMenu: function( parentMenuItem, forceToggle ) {
			var toggleButton = parentMenuItem.querySelector( '.dropdown-nav-special-toggle' ),
				subMenu = parentMenuItem.querySelector( 'ul' );
			let parentMenuItemToggled = parentMenuItem.classList.contains( 'menu-item--toggled-on' );
			var dropdown_label = parentMenuItem.querySelector( '.nav-drop-title-wrap' ).firstChild.textContent.trim();
			// Will be true if we want to force the toggle on, false if force toggle close.
			if ( undefined !== forceToggle && 'boolean' === ( typeof forceToggle ) ) {
				parentMenuItemToggled = ! forceToggle;
			}

			// Toggle aria-expanded status.
			toggleButton.setAttribute( 'aria-expanded', ( ! parentMenuItemToggled ).toString() );

			/*
			* Steps to handle during toggle:
			* - Let the parent menu item know we're toggled on/off.
			* - Toggle the ARIA label to let screen readers know will expand or collapse.
			*/
			if ( parentMenuItemToggled ) {
				// Toggle "off" the submenu.
				parentMenuItem.classList.remove( 'menu-item--toggled-on' );
				subMenu.classList.remove( 'toggle-show' );
				toggleButton.setAttribute( 'aria-label', ( dropdown_label ? kadenceConfig.screenReader.expandOf + ' ' + dropdown_label : kadenceConfig.screenReader.expand ) );

				// Make sure all children are closed.
				var subMenuItemsToggled = parentMenuItem.querySelectorAll( '.menu-item--toggled-on' );
				for ( let i = 0; i < subMenuItemsToggled.length; i++ ) {
					window.kadence.toggleSubMenu( subMenuItemsToggled[ i ], false );
				}
			} else {
				// Make sure siblings are closed.
				var parentMenuItemsToggled = parentMenuItem.parentNode.querySelectorAll( 'li.menu-item--toggled-on' );
				for ( let i = 0; i < parentMenuItemsToggled.length; i++ ) {
					window.kadence.toggleSubMenu( parentMenuItemsToggled[ i ], false );
				}

				// Toggle "on" the submenu.
				parentMenuItem.classList.add( 'menu-item--toggled-on' );
				subMenu.classList.add( 'toggle-show' );
				toggleButton.setAttribute( 'aria-label', ( dropdown_label ? kadenceConfig.screenReader.collapseOf + ' ' + dropdown_label : kadenceConfig.screenReader.collapse ) );
			}
		},
		/**
		 * Returns true if element is the
		 *


using OpenMacroBoard.SDK;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;

namespace StreamDeckSharp.Internals
{
    internal class CachedHidClient : BasicHidClient
    {
        private readonly Task _writerTask;
        private readonly ConcurrentBufferedQueue<int, byte[]> _imageQueue;
        private readonly ConditionalWeakTable<KeyBitmap, byte[]> _cacheKeyBitmaps = new();

        public CachedHidClient(IStreamDeckHid deckHid, IHardwareInternalInfos hardwareInformation)
            : base(deckHid, hardwareInformation)
        {
            _imageQueue = new ConcurrentBufferedQueue<int, byte[]>();
            _writerTask = StartBitmapWriterTask();
        }

        public override void SetKeyBitmap(int keyId, KeyBitmap bitmapData)
        {
            ThrowIfAlreadyDisposed();
            keyId = HardwareInfo.ExtKeyIdToHardwareKeyId(keyId);

            var payload = _cacheKeyBitmaps.GetValue(bitmapData, HardwareInfo.GeneratePayload);
            _imageQueue.Add(keyId, payload);
        }

        protected override void Shutdown()
        {
            _imageQueue.CompleteAdding();
            _writerTask.Wait();
        }

        protected override void Dispose(bool dispo


ox_head.seg_conv[0][0].in_channels
        assert bbox_cfg.part_in_channels == bbox_head.part_conv[0][
            0].in_channels

def check_h3d_roi_head(config, head):
    assert config['type'] == head.__class__.__name__

    # check seg_roi_extractor
    primitive_z_cfg = config.primitive_list[0]
    primitive_z_extractor = head.primitive_z
    _check_primitive_extractor(primitive_z_cfg, primitive_z_extractor)

    primitive_xy_cfg = config.primitive_list[1]
    primitive_xy_extractor = head.primitive_xy
    _check_primitive_extractor(primitive_xy_cfg, primitive_xy_extractor)

    primitive_line_cfg = config.primitive_list[2]
    primitive_line_extractor = head.primitive_line
    _check_primitive_extractor(primitive_line_cfg, primitive_line_extractor)

    # check bbox head infos
    bbox_cfg = config.bbox_head
    bbox_head = head.bbox_head
    _check_h3d_bbox_head(bbox_cfg, bbox_head)

def _check_primitive_extractor(config, primitive_extractor):
    assert config['type'] == primitive_extractor.__class__.__name__
    assert (config.num_dims == primitive_extractor.num_dims)
    assert (config.num_classes == primitive_extractor.num_classes)

def _check_h3d_bbox_head(bbox_cfg, bbox_head):
    assert bbox_cfg['type'] == bbox_head.__class__.__name__
    assert bbox_cfg.num_proposal * \
        6 == bbox_head.surface_center_matcher.num_point[0]
    assert bbox_cfg.num_proposal * \
        12 == bbox_head.line_center_matcher.num_point[0]
    assert bbox_cfg.suface_matching_cfg.mlp_channels[-1] * \
        18 == bbox_head.bbox_pred[0].in_channels


4 tile rows would be requested by setting the <samp>tile-rows</samp>
option to 2.

<samp>frame-parallel</samp>

Enable frame parallel decodability features.

<samp>aq-mode</samp>

Set adaptive quantization mode (0: off (default), 1: variance 2: complexity, 3:
cyclic refresh, 4: equator360).

<samp>colorspace color-space</samp>

Set input color space. The VP9 bitstream supports signaling the following
colorspaces:

<samp>‘<samp>rgb</samp>’ sRGB</samp>

<samp>‘<samp>bt709</samp>’ bt709</samp>

<samp>‘<samp>unspecified</samp>’ unknown</samp>

<samp>‘<samp>bt470bg</samp>’ bt601</samp>

<samp>‘<samp>smpte170m</samp>’ smpte170</samp>

<samp>‘<samp>smpte240m</samp>’ smpte240</samp>

<samp>‘<samp>bt2020_ncl</samp>’ bt2020</samp>

<samp>row-mt <var>boolean</var></samp>

Enable row based multi-threading.

<samp>tune-content</samp>

Set content type: default (0), screen (1), film (2).

<samp>corpus-complexity</samp>

Corpus VBR mode is a variant of standard VBR where the complexity distribution
midpoint is passed in rather than calculated for a specific clip or chunk.

The valid range is [0, 10000]. 0 (default) uses standard VBR.

<samp>enable-tpl <var>boolean</var></samp>

Enable temporal dependency model.

<samp>ref-frame-config</samp>

Using per-frame metadata, set members of the structure vpx_svc_ref_frame_config_t in vpx/vp8cx.h to fine-control referencing schemes and frame buffer management.

Use a :-separated list of key=value pairs.
For example,

av_dict_set(&av_frame->metadata, "ref-frame-config", \
"rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");

<samp>rfc_update_buffer_slot</samp>

Indicates the buffer slot number to update

<samp>rfc_update_last</samp>

Indicates whether to update the LAST frame

<samp>rfc_update_golden</samp>

Indicates whether to update GOLDEN frame

<samp>rfc_update_a


templates/icon"                      -}}

  {{ partial $IconTemplate $Collapsing }}
  {{ partial $IconTemplate $Expanding  }}
{{- end -}}{{/*
  Writes the required properties section for an object with a heading followed by an unordered list
  of each property linking to the documentation for that property. The unordered list has the
  `schematize-required-properties-list` class.

  This partial uses the parameters from the object's own documentation partial. The parameters are
  expected to include:

  - `property` - Mandatory. The objects's schema data
  - `page`     - Mandatory. The hugo Page object for the webpage the documentation is being written
    on, for resolving references.
  - `_level` - Optional. The current hierarchy level of the page. Used for determining what heading
    level to write. If unspecified, it's assumed that this is a top-level object, documenting a full
    schema.
  - `_id` - Optional. The ID this property belongs to. If specified, used as the prefix for this
    object's properties. This value should be null for a top-level object and set for any nested
    objects, like properties of a top-level object.
*/}}
{{- $params             := .                      -}}
{{- $data               := $params.property       -}}
{{- $level              := add 1 $params._level   -}}
{{- $prefix             := default "" $params._id -}}
{{- $requiredProperties := $data.required         -}}

{{ with $requiredProperties }}
  {{/* Define the heading for required properties as the first item in the render strings */}}
  {{- $headingParams := dict  "level" $level "title" "Required Properties" -}}
  {{- $renderStrings := slice (partial "schematize/utils/headings/arbitrary" $headingParams)
                        | append ""
  -}}

  {{/* Build the unordered list of required properties, linking to their heading */}}
  {{- range $property := $requiredProperties -}}
    {{- $title        := (index $data.properties $property).title                   -}}
    {{- $id           := $property | lower | urlize                                 -}}
    {{- $link         := printf "%s#%s%s" $params.page.Permalink $prefix $id        -}}
    {{- $renderStrings = $renderStrings | append (printf "- [%s](%s)" $title $link) -}}
  {{- end -}}
  {{- $renderStrings = $renderStrings | append "{.schematize-required-properties-list}" -}}

  {{/* Render */}}
  {{- delimit $renderStrings "\n" | safeHTML -}}
{{- end -}}
{{/*
  Resolve the reference to a references schema data. This is only supported for locally defined
  schemas and may behave strangely if accidentally called for external schemas.
*/}}
{{- $params     := .                                               -}}
{{- $property   := $params.property                                -}}
{{- $refPath    := replaceRE "\\.yaml" "" (index $property "$ref") -}}
{{- $HomeRelRef := relref $params.page (dict "path" "/_index.md")  -}}
{{- $pointer    := ""                                              -}}

{{- $PagePath := $params.page.File.Path -}}

{{- if in $refPath "#/" -}}
  {{- $Parts  := split $refPath "#/"            -}}
  {{- $refPath = index $Parts 0                 -}}
  {{- $pointer = printf "#/%s" (index $Parts 1) -}}
{{- end -}}

{{- $refPath = relref $params.page (dict "path" $refPath) | print -}}
{{/*  Support sites with base URLs that have a suffix, like https://foo.com/bar - replaces '/


bool isRightSealed = right.IsEffectivelySealed(_settings.IncludeInternalSymbols);

            if (!isLeftSealed && isRightSealed)
            {
                differences.Add(new CompatDifference(
                    leftMetadata,
                    rightMetadata,
                    DiagnosticIds.CannotSealType,
                    string.Format(GetResourceStringForTypeState(right), right.ToDisplayString(SymbolExtensions.DisplayFormat), rightMetadata, leftMetadata),
                    DifferenceType.Changed,
                    right));
            }
            else if (_settings.StrictMode && !isRightSealed && isLeftSealed)
            {
                differences.Add(new CompatDifference(
                    leftMetadata,
                    rightMetadata,
                    DiagnosticIds.CannotSealType,
                    string.Format(GetResourceStringForTypeState(left), left.ToDisplayString(SymbolExtensions.DisplayFormat), leftMetadata, rightMetadata),
                    DifferenceType.Changed,
                    left));
            }
        }

        private static string GetResourceStringForTypeState(ISymbol symbol) =>
            symbol.IsSealed ? Resources.TypeIsActuallySealed : Resources.TypeIsEffectivelySealed;
    }
}


9, U+cc2c, U+cc2e,
    U+cc30, U+cc38-cc39, U+cc3b-cc3e, U+cc44-cc45, U+cc48, U+cc4c, U+cc54-cc55, U+cc57-cc59, U+cc60,
    U+cc64, U+cc66, U+cc68, U+cc70-cc71, U+cc75, U+cc98-cc99, U+cc9c, U+cca0, U+cca8-cca9,
    U+ccab-ccad, U+ccb4-ccb5, U+ccb8, U+ccbc, U+ccc4-ccc5, U+ccc7, U+ccc9, U+ccd0, U+ccd4, U+cce4,
    U+ccec, U+ccf0, U+cd01, U+cd08-cd09, U+cd0c, U+cd10, U+cd18-cd19, U+cd1b, U+cd1d, U+cd24,
    U+cd28, U+cd2c, U+cd39, U+cd5c, U+cd60, U+cd64, U+cd6c-cd6d, U+cd6f, U+cd71, U+cd78, U+cd88,
    U+cd94-cd95, U+cd98, U+cd9c, U+cda4-cda5, U+cda7, U+cda9, U+cdb0, U+cdc4, U+cdcc, U+cdd0,
    U+cde8, U+cdec, U+cdf0, U+cdf8-cdf9, U+cdfb, U+cdfd, U+ce04, U+ce08, U+ce0c, U+ce14, U+ce19,
    U+ce20-ce21;
}
@font-face {
  font-family: 'LXGW WenKai Screen';
  src:
    local('LXGW WenKai Screen'),
    url('./0f57abe5e71ade7124dddc10ffd5b829.woff2') format('woff2');
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  unicode-range:
    U+c5c5-c5ca, U+c5cc, U+c5ce, U+c5d0-c5d1, U+c5d4, U+c5d8, U+c5e0-c5e1, U+c5e3, U+c5e5,
    U+c5ec-c5ee, U+c5f0, U+c5f4, U+c5f6-c5f7, U+c5fc-c601, U+c605-c608, U+c60c, U+c610, U+c618-c619,
    U+c61b-c61c, U+c624-c625, U+c628, U+c62c-c62e, U+c630, U+c633-c635, U+c637, U+c639, U+c63b,
    U+c640-c641, U+c644, U+c648, U+c650-c651, U+c653-c655, U+c65c-c65d, U+c660, U+c664, U+c66c,
    U+c66f, U+c671, U+c678-c679, U+c67c, U+c680, U+c688-c689, U+c68b, U+c68d, U+c694-c695, U+c698,
    U+c69c, U+c6a4-c6a5, U+c6a7, U+c6a9, U+c6ac, U+c6b0-c6b1, U+c6b4


"+1.1%"
				},
				{
					"19.4%",
					"+1.1%"
				},
				{
					"20.5%",
					"+1.1%"
				},
				{
					"21.6%",
					"+1.1%"
				},
				{
					"22.7%",
					"+1.1%"
				},
				{
					"23.8%",
					"+1.2%"
				},
				{
					"25.0%"
				}
			}
		}
	},
	[9090] = {
		desc_get = "",
		name = "所羅門的傳說",
		desc = "每20秒，有$1的機率发动，我方巡洋舰炮击、命中提升$2，受到攻擊时，受到伤害降低$3，持续8秒",
		type = 3,
		max_level = 8,
		id = 9090,
		system_transform = {},
		desc_get_add = {
			{
				"30.0%",
				"60.0%"
			},
			{
				"10.0%",
				"25.0%"
			},
			{
				"5.0%",
				"15.0%"
			}
		},
		desc_add = {
			{
				{
					"30.0%",
					"+3.3%"
				},
				{
					"33.3%",
					"+3.3%"
				},
				{
					"36.6%",
					"+3.3%"
				},
				{
					"39.9%",
					"+3.3%"
				},
				{
					"43.2%",
					"+3.3%"
				},
				{
					"46.5%",
					"+3.3%"
				},
				{
					"49.8%",
					"+3.3%"
				},
				{
					"53.1%",
					"+3.3%"
				},
				{
					"56.4%",
					"+3.6%"
				},
				{
					"60.0%"
				}
			},
			{
				{
					"10.0%",
					"+1.2%"
				},
				{
					"11.2%",
					"+1.2%"
				},
				{
					"12.4%",
					"+1.6%"
				},
				{
					"14.0%",
					"+1.5%"
				},
				{
					"15.5%",
					"+1.5%"
				},
				{
					"17.0%",
					"+2.0%"
				},
				{
					"19.0%",
					"+1.8%"
				},
				{
					"20.8%",
					"+1.8%"
				},
				{
					"22.6%",
					"+2.4%"
				},
				{
					"25.0%"
				}
			},
			{
				{
					"5.0%",
					"+1.1%"
				},
				{
					"6.1%",
					"+1.1%"
				},
				{
					"7.2%",
					"+1.1%"
				},
				{
					"8.3%",
					"+1.1%"
				},
				{
					"9.4%",
					"+1.1%"
				},
				{
					"10.5%",
					"+1.1%"
				},
				{
					"11.6%",
					"+1.1%"
				},
				{
					"12.7%",
					"+1.1%"
				},
				{
					"13.8%",
					"+1.2%"
				},
				{
					"15.0%"
				}
			}
		}
	},
	[9101] = {