007-2024 UMI 209 UMMISCO IRD/SU & Partners (IRIT, MIAT, TLU, CTU)
 *
 * Visit https://github.com/gama-platform/gama for license information and contacts.
 *
 ********************************************************************************************************/
package gama.ui.display.opengl.scene.layers;

import java.util.List;

import gama.ui.display.opengl.OpenGL;
import gama.ui.display.opengl.renderer.IOpenGLRenderer;
import gama.ui.display.opengl.scene.AbstractObject;

/**
 * The Class StaticLayerObject.
 */
public class StaticLayerObject extends LayerObject {

	/**
	 * The Class World.
	 */
	public static abstract class World extends StaticLayerObject {

		/**
		 * Instantiates a new world.
		 *
		 * @param renderer
		 *            the renderer
		 */
		public World(final IOpenGLRenderer renderer) {
			super(renderer);
		}

		@Override
		public boolean canSplit() {
			return false;
		}

		@Override
		public void computeScale(final Trace list) {}

		@Override
		public void computeOffset(final Trace list) {}

		@Override
		public boolean isLightInteraction() { return false; }

		@Override
		public void draw(final OpenGL gl) {
			if (currentList.isEmpty()) { fillWithObjects(currentList); }
			gl.suspendZTranslation();
			final boolean previous = gl.setDisplayLighting(false);
			super.draw(gl);
			gl.setDisplayLighting(previous);
			gl.resumeZTranslation();

		}

		/**
		 * Fill with objects.
		 *
		 * @param list
		 *            the list
		 */
		public abstract void fillWithObjects(List<AbstractObject<?, ?>> list);
	}

	/**
	 * Instantiates a new static layer object.
	 *
	 * @param renderer
	 *            the renderer
	 */
	public StaticLayerObject(final IOpenGLRenderer renderer) {
		super(renderer, null);
	}

	@Override
	public boolean isStatic() { return true; }

	@Override
	public void clear(final OpenGL gl) {}

	@Override
	public boolean isPickable() { return false; }

}/*******************************************************************************************************
 *
 * KeystoneShaderProgram.java, in gama.ui.display.opengl, is part of the source code of the
 * GAMA modeling and simulation platform .
 *
 * (c) 2007-2024 UMI 209 UMMISCO IRD/SU & Partners (IRIT, MIAT, TLU, CTU)
 *
 * Visit https://github.com/gama-platform/gama for license information and contacts.
 *
 ********************************************************************************************************/
package gama.ui.display.opengl.renderer.shaders;

import com.jogamp.opengl.GL2;

/**
 * The Class KeystoneShaderProgram.
 */
public class KeystoneShaderProgram extends AbstractPostprocessingShader {

	/**
	 * Instantiates a new keystone shader program.
	 *
	 * @param gl the gl
	 * @param vertexFile the vertex file
	 * @param fragmentFile the fragment file
	 */
	public KeystoneShaderProgram(final GL2 gl, final String vertexFile, final String fragmentFile) {
		super(gl, vertexFile, fragmentFile);
	}

	@Override
	protected void bindAttributes() {
		super.bindAttribute(UVMAPPING_ATTRIBUTE_IDX, "attribute_TextureCoords3D");
	}
}
/*******************************************************************************************************
 *
 * AbstractShader.java, in gama.ui.display.opengl, is part of the source code of the
 * GAMA modeling and simulation platform .
 *
 * (c) 2007-2024 UMI 209 UMMISCO IRD/SU & Partners (IRIT, MI


lf32-littlearm")
OUTPUT_ARCH(arm)

MEMORY
{
    ram : ORIGIN = KERNEL_VADDR_BASE, LENGTH = KERNEL_VADDR_SIZE
    sram : ORIGIN = 0x40000000, LENGTH = 0x1000
    user_ram : ORIGIN = 0x1000000, LENGTH = 0x100000
}
SECTIONS
{
    /DISCARD/ : { *(.comment .note) }

    .ram_vectors TEXT_BASE : {
        __ram_vectors_vma = .;
        KEEP (*(.vectors))
    } > ram
    __ram_vectors_lma = LOADADDR(.ram_vectors);
}

USER_INIT_VM_START = 0x1000000;
***********************************************/
/*
https://www.jianshu.com/p/42823b3b7c8e
https://sourceware.org/binutils/docs/ld/MEMORY.html
MEMORY：内存布局,描述板上的存储器位置
语法为
NAME1 [(ATTR)] : ORIGIN = ORIGIN1, LENGTH = LEN2

NAME ：存储区域的名字。（自己可以随意命名）
ATTR ：定义该存储区域的属性。ATTR属性内可以出现以下7 个字符：
	R 只读section
	W 读/写section
	X 可执行section
	A 可分配的section
	I 初始化了的section
	L 同I
	! 不满足该字符之后的任何一个属性的section
ORIGIN ：关键字，区域的开始地址，可简写成org 或o
LENGTH ：关键字，区域的大小，可简写成len 或l
*/

#include "los_vm_zone.h"
#define TEXT_BASE  KERNEL_VADDR_BASE //代码区为内核起始地址

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)

MEMORY //链接器的默认配置允许分配所有可用内存,描述链接器可以使用哪些内存区域
{ //ram,sram为存储区域的名字,可以随意取
    ram : ORIGIN = KERNEL_VADDR_BASE, LENGTH = KERNEL_VADDR_SIZE //内核运行空间范围
    sram : ORIGIN = 0x40000000, LENGTH = 0x1000
    user_ram : ORIGIN = 0x1000000, LENGTH = 0x100000 //用户运行空间范围 USER_ASPACE_BASE ,此大小不是真正最后映射到用户空间的大小
}
SECTIONS
{
    /DISCARD/ : { *(.comment .note) } //过滤掉所有输入文件的 .comment .note 段

    .ram_vectors TEXT_BASE : { //内核中断向量区开始位置,此处用 TEXT_BASE 宏有误导嫌疑, 因为真正的(.text)并不在此 @notethinking
        __ram_vectors_vma = .; //定位到当前位置,即TEXT_BASE处
        KEEP (*(.vectors)) //告诉链接器 强制保留所有输入文件中的 .vectors 节
    } > ram //中断向量是开机代码的位置 , 可翻看 鸿蒙内核源码分析(开机启动篇) 和 (中断管理篇)
    __ram_vectors_lma = LOADADDR(.ram_vectors);//启动时对向量的初始化,加载地址和链接地址一致,说明内核设计者希望从加载地址处运行指令
}
//LMA：加载存储地址，指加载到存储器的地址，即加载或烧写到哪里
//VMA：虚拟存储地址，也就是链接地址，即代码和数据运行的时候应在哪里
USER_INIT_VM_START = 0x1000000; //用户空间初始地址


height);
								bgTextureMiddle:SetTexCoord(0, 1, firstRowTexCoordOffset, ( height/BG_TEXTURE_HEIGHT + firstRowTexCoordOffset) );
								bgTextureMiddle:Show();
								remainingRows = remainingRows - ROWS_IN_BG_TEXTURE;
								middleBgHeight = middleBgHeight + height;
							else
								-- If not its a huge bag
								bgTextureMiddle:Show();
								height = remainingRows*rowHeight-firstRowPixelOffset;
								bgTextureMiddle:SetHeight(height);
								bgTextureMiddle:SetTexCoord(0, 1, firstRowTexCoordOffset, ( height/BG_TEXTURE_HEIGHT + firstRowTexCoordOffset) );
								middleBgHeight = middleBgHeight + height;
							end
						end
						-- Position bottom texture
						bgTextureBottom:SetPoint("TOP", bgTextureMiddle:GetName(), "BOTTOM", 0, 0);
						bgTextureBottom:Show();
					end
					-- Set the frame height
					frame:SetHeight(bgTextureTop:GetHeight()+bgTextureBottom:GetHeight()+middleBgHeight);
		        end
                frame:SetWidth(CONTAINER_WIDTH);
                getglobal(name.."Name"):SetText(theBag.name );
                getglobal(name.."Portrait"):SetTexture(theBag.T);

--[[
				--Special case code for keyrings
				if ( id == KEYRING_CONTAINER ) then
					getglobal(frame:GetName().."Name"):SetText(KEYRING);
					SetPortraitToTexture(frame:GetName().."Portrait", "Interface\\ContainerFrame\\KeyRing-Bag-Icon");
				else
					getglobal(frame:GetName().."Name"):SetText(GetBagName(id));
					SetBagPortaitTexture(getglobal(frame:GetName().."Portrait"), id);
				end
]]--

               for j=1, size, 1 do
						local index = size - j + 1;
						item = theBag[index];
						itemButton = getglobal(name.."Item"..j);
						-- Set first button
                  if( j == 1 ) then
						-- Anchor the first item differently if its the backpack frame
							if ( id == 0 ) then
								itemButton:SetPoint("BOTTOMRIGHT", name, "BOTTOMRIGHT", -12, 30);
							else
								itemButton:SetPoint("BOTTOMRIGHT", name, "BOTTOMRIGHT", -12, 9);
							end
						else
							if ( mod((j-1), columns) == 0 ) then
								itemButton:SetPoint("BOTTOMRIGHT", name.."Item"..(j - columns), "TOPRIGHT", 0, 4);
							else
								itemButton:SetPoint("BOTTOMRIGHT", name.."Item"..(j - 1), "BOTTOMLEFT", -5, 0);
							end
						end
					end

                for j = 1, size do
                    index = size - (j - 1);
                    getglobal(name.."Item"..j):SetID(100 * id + index + 100 );
                    item = theBag[index];
                    itemButton = getglobal(name.."Item"..j);
                    if( item ) then
                        SetItemButtonTexture(itemButton, item.T);
                        SetItemButtonCount(itemButton, item.C);
                    else
                        SetItemButtonTexture(itemButton,"");
                        SetItemButtonCount(itemButton, nil);
                    end
						  itemButton:Show();
                end
					for j=size + 1, 36, 1 do
						getglobal(name.."Item"..j):Hide();
					end
               frame:Show();
                --PlaySound("igBackPackOpen");
            end;

            Toggle = function ()                                                -- CharactersViewer.Bag.Toggle
                if(CharactersViewerConfig["Bag_Display"] == true) then
                    CharactersViewerConfig["Bag_Display"] = false;
                    CharactersViewer.Bag.Hide();
                else
                    CharactersViewerConfig["Bag_Display"] = true;
                    CharactersViewer.Bag.


verify("test_mula: ", i, a0[i], (short)((short)(ADD_INIT+i)*VALUE));
      }

      test_divc(a0, a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_divc: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
      }
      test_divv(a0, a1, (short)VALUE);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_divv: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
      }
      test_diva(a0, a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_diva: ", i, a0[i], (short)((short)(ADD_INIT+i)/VALUE));
      }

      test_mulc_n(a0, a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_mulc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
      }
      test_mulv(a0, a1, (short)-VALUE);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_mulv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
      }
      test_mula(a0, a1, a3);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_mula_n: ", i, a0[i], (short)((short)(ADD_INIT+i)*(-VALUE)));
      }

      test_divc_n(a0, a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_divc_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
      }
      test_divv(a0, a1, (short)-VALUE);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_divv_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
      }
      test_diva(a0, a1, a3);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_diva_n: ", i, a0[i], (short)((short)(ADD_INIT+i)/(-VALUE)));
      }

      test_andc(a0, a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_andc: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
      }
      test_andv(a0, a1, (short)BIT_MASK);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_andv: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
      }
      test_anda(a0, a1, a4);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_anda: ", i, a0[i], (short)((short)(ADD_INIT+i)&BIT_MASK));
      }

      test_orc(a0, a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_orc: ", i, a0[i], (short)((short)(ADD_INIT+i)|BIT_MASK));
      }
      test_orv(a0, a1, (short)BIT_MASK


s = true
            },
            new RowSeries<int>
            {
                Values = values2,
                DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Middle,
                DataLabelsSize = 14,
                ShowDataLabels = true
            },
            new RowSeries<int>
            {
                Values = values3,
                DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Start,
                DataLabelsSize = 14,
                ShowDataLabels = true
            }
        };

        cartesianChart = new CartesianChart
        {
            Series = series,
        };

        Content = cartesianChart;
    }
}


, [bits[12]:0xba5, bits[12]:0xba7], [bits[1]:0])";
  XLS_ASSERT_OK_AND_ASSIGN(Value v, Parser::ParseTypedValue(input));
  Value expected = Value::Tuple({
      Value(UBits(0xf00, /*bit_count=*/32)),
      Value::ArrayOrDie({
          Value(UBits(0xba5, /*bit_count=*/12)),
          Value(UBits(0xba7, /*bit_count=*/12)),
      }),
      Value::ArrayOrDie({Value(UBits(0, /*bit_count=*/1))}),
  });
  EXPECT_EQ(expected, v);
}

TEST(IrParserErrorTest, ParsesTokenType) {
  const std::string input = "token";
  XLS_ASSERT_OK_AND_ASSIGN(Value v, Parser::ParseTypedValue(input));
  Value expected = Value::Token();
  EXPECT_EQ(expected, v);
}

TEST(IrParserErrorTest, ParsesComplexValueWithEmbeddedTokens) {
  const std::string input =
      "(bits[32]:0xf00, [bits[12]:0xba5, bits[12]:0xba7], [token, token], "
      "[bits[1]:0], token)";
  XLS_ASSERT_OK_AND_ASSIGN(Value v, Parser::ParseTypedValue(input));
  Value expected = Value::Tuple({
      Value(UBits(0xf00, /*bit_count=*/32)),
      Value::ArrayOrDie({
          Value(UBits(0xba5, /*bit_count=*/12)),
          Value(UBits(0xba7, /*bit_count=*/12)),
      }),
      Value::ArrayOrDie({Value::Token(), Value::Token()}),
      Value::ArrayOrDie({Value(UBits(0, /*bit_count=*/1))}),
      Value::Token(),
  });
  EXPECT_EQ(expected, v);
}

// TODO(leary): 2019-08-01 Figure out if we want to reify the type into the
// empty array Value.
TEST(IrParserErrorTest, DISABLED_ParsesEmptyArray) {
  const std::string input = "[]";
  Package p("test_package");
  auto* u1 = p.GetBitsType(1);
  auto* array_0xu1 = p.GetArrayType(0, u1);
  XLS_ASSERT_OK_AND_ASSIGN(Value v, Parser::ParseValue(input, array_0xu1));
  Value expected = Value::ArrayOrDie({});
  EXPECT_EQ(expected, v);
}

TEST(IrParserErrorTest, BigOrdinalAnnotation) {
  std::string program = R"(
package test

fn main() -> bits[1] {
  ret literal.1000: bits[1] = literal(value=0, id=1000)
}
)";
  XLS_ASSERT_OK_AND_ASSIGN(auto package, Parser::ParsePackage(program));
  EXPECT_GT(package->next_node_id(), 1000);
}

TEST(IrParserErrorTest, TrivialProc) {
  std::string program = R"(
package test

proc foo(my_token: token, my_state: bits[32], init={token, 42}) {
  next (my_token, my_state)
}
)";
  XLS_ASSERT_OK_AND_ASSIGN(auto package, Parser::ParsePackage(program));
  EXPECT_EQ(package->functions().size(), 0);
  EXPECT_EQ(package->procs().size(), 1);
  XLS_ASSERT_OK_AND_ASSIGN(Proc * proc, package->GetProc("foo"));
  EXPECT_EQ(proc->node_count(), 4);
  EXPECT_EQ(proc->StateElements().size(), 2);
  EXPECT_EQ(proc->GetStateElement(int64_t{0})->initial_value().ToString(),
            "token");
  EXPECT_EQ(proc->GetStateElement(int64_t{0})->type()->ToString(), "token");
  EXPECT_EQ(proc->GetStateElement(1)->initial_value().ToString(),


ng trackCoolDownMs);
            if (capi.World.ElapsedMilliseconds < trackCoolDownMs)
            {
                return false;
            }

            if (SchematicCode != null)
            {
                int regionX = pos.X / capi.World.BlockAccessor.RegionSize;
                int regionZ = pos.Z / capi.World.BlockAccessor.RegionSize;
                var region = capi.World.BlockAccessor.GetMapRegion(regionX, regionZ);
                if (region == null) return false;

                bool isInStructure = false;
                foreach (var structure in region.GeneratedStructures)
                {
                    if (structure.Code.Contains(SchematicCode) && structure.Location.Contains(pos))
                    {
                        isInStructure = true;
                        break;
                    }
                }

                if (!isInStructure) return false;
            }

            return true;
        }
    }
}


_READ_FLT_NOT_SUPPORTED

/// The copy offload write operation is not supported by a filter.
pub const OFFLOAD_WRITE_FLT_NOT_SUPPORTED : ErrorCode = ErrorCode::from_constant(4441); // ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED

/// The copy offload read operation is not supported for the file.
pub const OFFLOAD_READ_FILE_NOT_SUPPORTED : ErrorCode = ErrorCode::from_constant(4442); // ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED

/// The copy offload write operation is not supported for the file.
pub const OFFLOAD_WRITE_FILE_NOT_SUPPORTED : ErrorCode = ErrorCode::from_constant(4443); // ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED

/// This file is currently associated with a different stream id.
pub const ALREADY_HAS_STREAM_ID : ErrorCode = ErrorCode::from_constant(4444); // ERROR_ALREADY_HAS_STREAM_ID

/// The volume must undergo garbage collection.
pub const SMR_GARBAGE_COLLECTION_REQUIRED : ErrorCode = ErrorCode::from_constant(4445); // ERROR_SMR_GARBAGE_COLLECTION_REQUIRED

/// The WOF driver encountered a corruption in WIM image's Header.
pub const WOF_WIM_HEADER_CORRUPT : ErrorCode = ErrorCode::from_constant(4446); // ERROR_WOF_WIM_HEADER_CORRUPT

/// The WOF driver encountered a corruption in WIM image's Resource Table.
pub const WOF_WIM_RESOURCE_TABLE_CORRUPT : ErrorCode = ErrorCode::from_constant(4447); // ERROR_WOF_WIM_RESOURCE_TABLE_CORRUPT

/// The WOF driver encountered a corruption in the compressed file's Resource Table.
pub const WOF_FILE_RESOURCE_TABLE_CORRUPT : ErrorCode = ErrorCode::from_constant(4448); // ERROR_WOF_FILE_RESOURCE_TABLE_CORRUPT

/// Single Instance Storage is not available on this volume.
pub const VOLUME_NOT_SIS_ENABLED : ErrorCode = ErrorCode::from_constant(4500); // ERROR_VOLUME_NOT_SIS_ENABLED

/// System Integrity detected that policy rollback has been attempted.
pub const SYSTEM_INTEGRITY_ROLLBACK_DETECTED : ErrorCode = ErrorCode::from_constant(4550); // ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED

/// Your organization used Device Guard to block this app. Contact your support person for more info.
pub const SYSTEM_INTEGRITY_POLICY_VIOLATION : ErrorCode = ErrorCode::from_constant(4551); // ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION

/// The System Integrity policy is invalid.
pub const SYSTEM_INTEGRITY_INVALID_POLICY : ErrorCode = ErrorCode::from_constant(4552); // ERROR_SYSTEM_INTEGRITY_INVALID_POLICY

/// The System Integrity policy is either not signed or is signed by a non-trusted signer.
pub const SYSTEM_INTEGRITY_POLICY_NOT_SIGNED : ErrorCode = ErrorCode::from_constant(4553); // ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED

/// The number of System Integrity policies is out of limit.
pub const SYSTEM_INTEGRITY_TOO_MANY_POLICIES : ErrorCode = ErrorCode::from_constant(4554); // ERROR_SYSTEM_INTEGRITY_TOO_MANY_POLICIES

/// The Code Integrity supplemental policy is not authorized by a Code Integrity base policy.
pub const SYSTEM_INTEGRITY_SUPPLEMENTAL_POLICY_NOT_AUTHORIZED : ErrorCode = ErrorCode::from_constant(4555); //


 binding the contract method 0xa39272a1.
//
// Solidity: function getBitcoinAddressBalance(string btcAddress) view returns(uint256 balance)
func (_L2ReadBalances *L2ReadBalancesSession) GetBitcoinAddressBalance(btcAddress string) (*big.Int, error) {
	return _L2ReadBalances.Contract.GetBitcoinAddressBalance(&_L2ReadBalances.CallOpts, btcAddress)
}

// GetBitcoinAddressBalance is a free data retrieval call binding the contract method 0xa39272a1.
//
// Solidity: function getBitcoinAddressBalance(string btcAddress) view returns(uint256 balance)
func (_L2ReadBalances *L2ReadBalancesCallerSession) GetBitcoinAddressBalance(btcAddress string) (*big.Int, error) {
	return _L2ReadBalances.Contract.GetBitcoinAddressBalance(&_L2ReadBalances.CallOpts, btcAddress)
}

// GetBitcoinLastHeader is a free data retrieval call binding the contract method 0xf4cdc289.
//
// Solidity: function getBitcoinLastHeader() view returns(bytes result)
func (_L2ReadBalances *L2ReadBalancesCaller) GetBitcoinLastHeader(opts *bind.CallOpts) ([]byte, error) {
	var out []interface{}
	err := _L2ReadBalances.contract.Call(opts, &out, "getBitcoinLastHeader")

	if err != nil {
		return *new([]byte), err
	}

	out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte)

	return out0, err

}

// GetBitcoinLastHeader is a free data retrieval call binding the contract method 0xf4cdc289.
//
// Solidity: function getBitcoinLastHeader() view returns(bytes result)
func (_L2ReadBalances *L2ReadBalancesSession) GetBitcoinLastHeader() ([]byte, error) {
	return _L2ReadBalances.Contract.GetBitcoinLastHeader(&_L2ReadBalances.CallOpts)
}

// GetBitcoinLastHeader is a free data retrieval call binding the contract method 0xf4cdc289.
//
// Solidity: function getBitcoinLastHeader() view returns(bytes result)
func (_L2ReadBalances *L2ReadBalancesCallerSession) GetBitcoinLastHeader() ([]byte, error) {
	return _L2ReadBalances.Contract.GetBitcoinLastHeader(&_L2ReadBalances.CallOpts)
}

// SendBitcoinAddressBalanceToL1 is a paid mutator transaction binding the contract method 0x6d030e37.
//
// Solidity: function sendBitcoinAddressBalanceToL1(address l1ReadBalancesAddress, string btcAddress) returns()
func (_L2ReadBalances *L2ReadBalancesTransactor) SendBitcoinAddressBalanceToL1(opts *bind.TransactOpts, l1ReadBalancesAddress common.Address, btcAddress string) (*types.Transaction, error) {
	return _L2ReadBalances.contract.Transact(opts, "sendBitcoinAddressBalanceToL1", l1ReadBalancesAddress, btcAddress)
}

// SendBitcoinAddressBalanceToL1 is a paid mutator transaction binding the contract method 0x6d030e37.
//
// Solidity: function sendBitcoinAddressBalanceToL1(address l1ReadBalancesAddress, string btcAddress) returns()
func (_L2ReadBalances *L2ReadBalancesSession) SendBitcoinAddressBalanceToL1(l1ReadBalancesAddress common.Address, btcAddress string) (*types.Transaction, error) {
	retur


;
  border-color: #cccccc;
}

/* header of headers */
table th.meta {
  text-align:center;
  font-size: 1.2em;
  background-color:#FFFFFF;
}

/* intermediate header */
table th.inter {
  text-align:left;
  background-color:#FFFFFF;
  background-image:none;
  border-style:solid solid solid solid;
  border-width: 1px;
	border-color: #cccccc;
}

/** class for exemple / output tables **/

table.example {
}

table.example th {
}

table.example td {
  padding: 0.5em 0.5em 0.5em 0.5em;
  vertical-align:top;
}

/* standard class for the manual */

table.manual, table.manual-vl, table.manual-hl {
    padding: 0.2em 0em 0.5em 0em;
}

table.manual th, table.manual-vl th, table.manual-hl th {
  margin: 0em 0em 0.3em 0em;
}

table.manual td, table.manual-vl td, table.manual-hl td {
  padding: 0.3em 0.5em 0.3em 0.5em;
  vertical-align:top;
  border-width: 1px;
}

table.manual td.alt, table.manual tr.alt, table.manual-vl td.alt, table.manual-vl tr.alt {
  background-color: #F4F4E5;
}

table.manual-vl th, table.manual-vl td, table.manual-vl td.alt {
  border-color: #cccccc;
  border-width: 1px;
  border-style: none solid none solid;
}

table.manual-vl th.inter {
  border-style: solid solid solid solid;
}

table.manual-hl td {
  border-color: #cccccc;
  border-width: 1px;
  border-style: solid none solid none;
}

table td.code {
  font-family: monospace;
}

h2 {
  margin-top:2em;
  border-style: none none solid none;
  border-width: 1px;
  border-color: #cccccc;
}

/**** Table of content in the side-nav ****/

div.toc {
  margin:0;
  padding: 0.3em 0 0 0;
  width:100%;
  float:none;
  position:absolute;
  bottom:0;
  border-radius:0px;
  border-style: solid none none none;
}

div.toc h3 {
  margin-left: 0.5em;
  margin-bottom: 0.2em;
}

div.toc ul {
  margin: 0.2em 0 0.4em 0.5em;
}

span.cpp11,span.cpp14,span.cpp17 {
  color: #119911;
  font-weight: bold;
}

/**** old Eigen's styles ****/

table.tutorial_code td {
  border-color: transparent; /* required for Firefox */
  padding: 3pt 5pt 3pt 5pt;
  vertical-align: top;
}

/* Whenever doxygen meets a '\n' or a '
', it will put
 * the text containing the character into a
.
 * This little hack together with table.tutorial_code td.note
 * aims at fixing this issue. */
table.tutorial_code td.note p.starttd {
  margin: 0px;
  border: none;
  padding: 0px;
}

div.eimainmenu {


= {"Натуралист Кус",nil},
[54851] = {"Призыватель ветров Коготь",nil},
[54852] = {"Землепряд Гневвс",nil},
[54853] = {"Королева Азшара",nil},
[54864] = {"Молот божественности",nil},
[54865] = {"Молот божественности",nil},
[54866] = {"Portal Controller",nil},
[54867] = {"Проекция Ноздорму",nil},
[54879] = {"Белый ездовой верблюд",nil},
[54882] = {"Зачарованный волхв","Королевский стражник"},
[54883] = {"Зачарованный волхв","Королевский стражник"},
[54884] = {"Зачарованный волхв","Королевский стражник"},
[54890] = {"Боевой командир Мафуун",nil},
[54891] = {"Шпион Грик'та",nil},
[54893] = {"Защитник Нижнего Города",nil},
[54895] = {"Целитель из Нижнего Города",nil},
[54903] = {"Оскверненный гиппогриф",nil},
[54920] = {"Подавитель из рода Бесконечности",nil},
[54923] = {"Страж из рода Бесконечности",nil},
[54927] = {"Демон-стражник",nil},
[54928] = {"Песочные часы времени",nil},
[54931] = {"Каменный страж Сток'тон",nil},
[54932] = {"Каса'рес",nil},
[54933] = {"Главный разведчик Чадвик",nil},
[54934] = {"Пушкарь",nil},
[54935] = {"Лучник Оплота Чести",nil},
[54938] = {"Архиепископ Бенедикт",nil},
[54939] = {"Око Элуны",nil},
[54940] = {"Око Элуны",nil},
[54941] = {"Око Элуны",nil},
[54942] = {"Око Элуны",nil},
[54945] = {"Пыледемон",nil},
[54949] = {"DMF Test Mirror Image",nil},
[54952] = {"Хрупкий вурдалак",nil},
[54953] = {"Архиепископ Бенедикт",nil},
[54955] = {"Щит небес",nil},
[54962] = {"Guardian Demon Flight Loc PH",nil},
[54968] = {"Азира Убийца Зари",nil},
[54969] = {"Маннорот","Разрушитель"},
[54971] = {"Тралл","Служители Земли"},
[54972] = {"Тралл","Служители Земли"},
[54991] = {"Адская гончая",nil},
[54995] = {"Ледяная гробница",nil},
[55003] = {"Поганый маленький помощник",nil},
[55004] = {"Demon Cleanup Helper PH",nil},
[55007] = {"Экзарх Ларетор",nil},
[55011] = {"Воин из армии Расколотого Солнца",nil},
[55012] = {"Воин из армии Расколотого Солнца",nil},
[55013]


* -ok|-error *result*
///
/// Executes the script expecting either a successful response or an error.
///
/// Note: This is an extremely minimal replacement for tcltest; at some
/// point I'll need something much more robust.
///
/// Note: See the Molt Book for the full syntax.
fn test_cmd(interp: &mut Interp, context_id: ContextID, argv: &[Value]) -> MoltResult {
    // FIRST, check the minimum command line.
    check_args(1, argv, 4, 0, "name description args...")?;

    // NEXT, see which kind of command it is.
    let arg = argv[3].as_str();
    if arg.starts_with('-') {
        fancy_test(interp, context_id, argv)
    } else {
        simple_test(interp, context_id, argv)
    }
}

// The simple version of the test command.
fn simple_test(interp: &mut Interp, context_id: ContextID, argv: &[Value]) -> MoltResult {
    check_args(1, argv, 6, 6, "name description script -ok|-error result")?;

    // FIRST, get the test info
    let mut info = TestInfo::new(argv[1].as_str(), argv[2].as_str());
    info.body = argv[3].to_string();
    info.expect = argv[5].to_string();

    let code = argv[4].as_str();

    info.code = if code == "-ok" {
        Code::Ok
    } else if code == "-error" {
        Code::Error
    } else {
        incr_errors(interp, context_id);
        info.print_helper_error("test command", &format!("invalid option: \"{}\"", code));

        return molt_ok!();
    };

    // NEXT, run the test.
    run_test(interp, context_id, &info);
    molt_ok!()
}

// The fancier, more flexible version of the test.
fn fancy_test(interp: &mut Interp, context_id: ContextID, argv: &[Value]) -> MoltResult {
    check_args(
        1,
        argv,
        4,
        0,
        "name description option value ?option value...?",
    )?;

    // FIRST, get the test tinfo
    let mut info = TestInfo::new(argv[1].as_str(), argv[2].as_str());
    let mut iter = argv[3..].iter();
    loop {
        let opt = iter.next();
        if opt.is_none() {
            break;
        }
        let opt = opt.unwrap().as_str();

        let val = iter.next();
        if val.is_none() {
            incr_errors(interp, context_id);
            info.print_helper_error("test command", &format!("missing value for {}", opt));
            return molt_ok!();
        }
        let val = val.unwrap().as_str();

        match opt {
            "-setup" => info.setup = val.to_string(),
            "-body" => info.body = val.to_string(),
            "-cleanup" => info.cleanup = val.to_string(),
            "-ok" => {
                info.code = Code::Ok;
                info.expect = val.to_string();
            }
            "-error" => {
                info.code = Code::Error;
                info.expect = val.to_string();
            }
            _ => {
                incr_errors(interp, context_id);
                info.print_helper_error("test command", &format!("invalid option: \"{}\"", val));
                return molt_ok!();
            }
        }
    }

    // NEXT, run the test.
    run_test(interp, context_id, &info);
    molt_ok!()
}

// Run the actual test and save the result.
fn run_test(interp: &mut Interp, context_id: ContextID, info: &TestInfo) {
    // FIRST, push a variable scope; -setup, -body, and -cleanup will share it.
    interp.push_scope();


CALL(onNext_, onValue("1"));
  EXPECT_CALL(onNext_, onValue("1000"));
  EXPECT_CALL(onNext_, onValue("2"));
  EXPECT_CALL(onNext_, onValue("2000"));
  EXPECT_CALL(onNext_, onClosed()).Times(2);

  sender1.write(1);
  sender2.write(1000);
  executor_.drain();

  EXPECT_EQ(transform1Executions, 1);
  EXPECT_EQ(transform2Executions, 0);
  controlSender1.write(unit);
  executor_.drain();

  EXPECT_EQ(transform1Executions, 1);
  EXPECT_EQ(transform2Executions, 1);
  controlSender2.write(unit);
  executor_.drain();

  sender2.write(2000);
  sender1.write(2);
  executor_.drain();

  EXPECT_EQ(transform1Executions, 1);
  EXPECT_EQ(transform2Executions, 2);
  controlSender2.write(unit);
  executor_.drain();

  EXPECT_EQ(transform1Executions, 2);
  EXPECT_EQ(transform2Executions, 2);
  controlSender1.write(unit);
  executor_.drain();

  std::move(sender1).close();
  std::move(sender2).close();
  std::move(controlSender1).close();
  std::move(controlSender2).close();
  executor_.drain();
}

class TransformFixtureStress : public Test {
 protected:
  TransformFixtureStress()
      : producer_(std::make_unique<StressTestProducer<int>>(
            [value = 0]() mutable { return value++; })),
        consumer_(std::make_unique<StressTestConsumer<std::string>>(
            ConsumptionMode::CallbackWithHandle,
            [lastReceived = -1](std::string value) mutable {
              EXPECT_EQ(folly::to<int>(value), ++lastReceived);
            })) {}

  static constexpr std::chrono::milliseconds kTestTimeout =
      std::chrono::milliseconds{5000};

  std::unique_ptr<StressTestProducer<int>> producer_;
  std::unique_ptr<StressTestConsumer<std::string>> consumer_;
};

TEST_F(TransformFixtureStress, Close) {
  auto [receiver, sender] = Channel<int>::create();
  producer_->startProducing(std::move(sender), std::nullopt /* closeEx */);

  folly::CPUThreadPoolExecutor transformExecutor(1);
  consumer_->startConsuming(transform(
      std::move(receiver),
      folly::SerialExecutor::create(&transformExecutor),
      [](Try<int> result) -> folly::coro::AsyncGenerator<std::string> {
        co_yield folly::to<std::string>(std::move(result.value()));
      }));

  /* sleep override */
  std::this_thread::sleep_for(kTestTimeout);
  producer_->stopProducing();
  EXPECT_EQ(consumer_->waitForClose().get(), CloseType::NoException);
}

TEST_F(TransformFixtureStress, Cancel) {
  auto [receiver, sender] = Channel<int>::create();
  producer_->startProducing(std::move(sender), std::nullopt /* closeEx */);

  folly::CPUThreadPoolExecutor transformExecutor(1);
  consumer_->startConsuming(transform(
      std::move(receiver),
      folly::SerialExecutor::create(&transformExecutor),
      [](Try<int> result) -> folly::coro::AsyncGenerator<std::string> {
        co_yield folly::to<std::string>(std::move(result.value()));
      }));

  /* sleep override */
  std::this_thread::sleep_for(kTestTimeout);
  consumer_->cancel();
  EXPECT_EQ(consumer_->waitForClose().get(), CloseType::Cancelled);
}

TEST_F(TransformFixtureStress, Close_ThenCancelImmediately) {
  auto [receiver, sender] = Channel<int>::create();


10,
  0,
  0,
  0,
  0,
  0,
  0
];

Z80.prototype.parity_bits = [
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1,
  0,
  1,
  1,
  0,
  0,
  1,
  1,
  0,
  1,
  0,
  0,
  1
];
export declare namespace CgiHub {
    type Static = typeof CgiHub;
    interface RequestLifecycle {
        /**
         * fetch 请求前公共处理方法
         * @lifecycle beforeFetch
         * @param requestOptions 请求参数
         * @return 修改后的请求参数 (支持 Promise)
         * */
        beforeFetch?: (requestOptions: RequestOptions) => PromiseLike<RequestOptions> | RequestOptions;
        /**
         * 发起 fetch 请求公共方法
         * @lifecycle fetch
         * @param requestOptions 请求参数
         * @return 请求响应结果 (支持 Promise)
         * */
        fetch: <TResp>(requestOptions: RequestOptions) => PromiseLike<TResp> | TResp;
        /**
         * fetch 请求后公共处理方法


s = [new Panel(PanelType.FullPage, [minX, page.view[1], maxX, page.view[2]])]
      return {type: PanelLayoutType.SingleColumn, panels: panels}
    }
    var panelLayout: PanelLayout
    var bottomBlocks = bestBreakIdx < 0 ? blocks : blocks.slice(bestBreakIdx+1)
    var leftBottomBlocks = bottomBlocks.filter(b => b.xSpan()[1] <= midX)
    var rightBottomBlocks = bottomBlocks.filter(b => b.xSpan()[0] > midX)
    function xSpanForBlocks(bs: MergedTextBlock[]) {
      var minX = Math.min.apply(null, bs.map(b => b.xSpan()[0]))
      var maxX = Math.max.apply(null, bs.map(b => b.xSpan()[1]))
      return [minX, maxX]
    }
    // HACK (codeviking) If we don't have left / right blocks at this point fallback to a straight
    // split on the midpoint
    if (leftBottomBlocks.length === 0 || rightBottomBlocks.length === 0) {
      leftXSpan = [0, midX]
      rightXSpan = [midX, page.view[2]]
    } else {
      var leftXSpan = xSpanForBlocks(leftBottomBlocks)
      var rightXSpan = xSpanForBlocks(rightBottomBlocks)
    }

    var leftBottom, rightBottom
    if (leftBottomBlocks.length === 0 || rightBottomBlocks.length === 0) {
      leftBottom = page.view[3]
      rightBottom = page.view[3]
    } else {
      // Add 5 pixels for descenders, and another 15 arbitrarily as the bottom crop seems
      // to be consistently tighter
      leftBottom = Math.max.apply(null, leftBottomBlocks.map(b => b.ySpan()[1])) + 15
      rightBottom = Math.max.apply(null, rightBottomBlocks.map(b => b.ySpan()[1])) + 15
    }

    var topOfBottomColumn
    if (leftBottomBlocks.length > 0 && rightBottomBlocks.length > 0) {
      var leftTop = Math.min.apply(null, leftBottomBlocks.map(b => b.ySpan()[0]))
      var rightTop = Math.min.apply(null, rightBottomBlocks.map(b => b.ySpan()[0]))
      topOfBottomColumn = Math.max.apply(null, [leftTop, rightTop])
    } else if(bestBreakScore > 0.2) {
      topOfBottomColumn = sortedHeights[bestBreakIdx]
    }

    //debugger
    if (bestBreakScore > 0.2) {
      // HACK(aria42) Top of 1st page is generally title
      var topXSpan: [number, number]
      if (page.pageNumber == 1) {
        var topBlocks = blocks.slice(0, bestBreakIdx+1)
        topXSpan = xSpanForBlocks(topBlocks)
      } else {
        topXSpan = [0, page.view[2]]
      }
      var bottomOfBreak = sortedHeights[bestBreakIdx]
      var breakBlocks = blocksByYOffset["" + bottomOfBreak]
      var maxHeight = Math.max.apply(null, breakBlocks.map(b => b.maxHeight()))
      var topViewBounds = [topXSpan[0],0,topXSpan[1], bottomOfBreak - maxHeight]
      var topPanel = new Panel(PanelType.TopHeader, topViewBounds)
      // mid-way of top of bottom columns and break
      var topOfBottomColumn
      if (leftBottomBlocks.length > 0 && rightBottomBlocks.length > 0) {
        var leftTop = Math.min.apply(null, leftBottomBlocks.map(b => b.ySpan()[0]))
        var rightTop = Math.min.apply(null, rightBottomBlocks.map(b => b.ySpan()[0]))
        topOfBottomColumn = Math.max.apply(null, [leftTop, rightTop])
      } else {
        topOfBottomColumn = bottomOfBreak
      }
      // 5 pixels makes sure we don't cut off ascenders
      var topBottomBreak = top


{'56902',	'可能也活不久|阶级问题|上面查|暗度陈仓|没封',	'可能也活不久|阶级问题|上面查|暗度陈仓|没封'},
{'56903',	'可能也活不久|堦級問題|上麵査|晻度陳倉|沒封',	'可能也活不久|堦級問題|上麵査|晻度陳倉|沒封'},
{'56904',	'外国人.0,10歧视|黑人.0,10歧视',	'外国人.0,10歧视|黑人.0,10歧视'},
{'56905',	'外國人.0,10歧視|黑人.0,10歧視',	'外國人.0,10歧視|黑人.0,10歧視'},
{'56906',	'咏九',	'咏九'},
{'56907',	'詠九',	'詠九'},
{'56908',	'(反对|抵制).0,5(永居|居留|居住|永留|外国人|wai国人|外人|歪果仁|歪国人|条例|管条|引进|鸠占鹊巢|nigger|尼哥|倪哥|洋大人|洋人)',	'(反对|抵制).0,5(永居|居留|居住|永留|外国人|wai国人|外人|歪果仁|歪国人|条例|管条|引进|鸠占鹊巢|nigger|尼哥|倪哥|洋大人|洋人)'},
{'56909',	'罢工|罢课',	'罢工|罢课'},
{'56910',	'(54|五十四|五四運動|五四|伍肆).0,3(見)',	'(54|五十四|五四運動|五四|伍肆).0,3(見)'},
{'56911',	'(54|五十四|五四运动|五四|伍肆).0,3(见)',	'(54|五十四|五四运动|五四|伍肆).0,3(见)'},
{'56912',	'不愿做奴隶的人们|不願做奴隸的人們',	'不愿做奴隶的人们|不願做奴隸的人們'},
{'56913',	'中国觉醒|中國覺醒',	'中国觉醒|中國覺醒'},
{'56914',	'国误院',	'国误院'},
{'56915',	'國誤院',	'國誤院'},
{'56916',	'国家纵容',	'国家纵容'},
{'56917',	'國傢縱容',	'國傢縱容'},
{'56918',	'獅子會|某十|黑十|红十|红会|某会|红十字',	'獅子會|某十|黑十|红十|红会|某会|红十字'},
{'56919',	'獅子會|某十|黑十|紅十|紅會|某會|紅十字',	'獅子會|某十|黑十


одный брать | kuzyn.

plezuro plaisir | pleasure | Vergnügen | удовольствіе | przyjemność.

horloĝo horloge, montre | clock | Uhr | часы | zegar.

timi craindre | fear | fürchten | бояться | obawiać się.

dormi dormir | sleep | schlafen | спать | spać.

veki réveiller, éveiller | wake, arouse | wecken | будgть | budzić.

scii savoir | know | wissen | знать | wiedzieć.

leciono leçon | lesson | Lektion | урокъ | lekcya.

instrui instruire, enseigner | instruct, teach | lehren | учgть | uczyć.

puni punir | punish | strafen | наказывать | karać.

surda sourd | deaf | taub | глухой | głuchy.

muta muet | dumb | stumm | н мой | niemy.

tuŝi toucher | touch | rühren | трогать | ruszać, dotykać.

spegulo miroir | looking-glass | Spiegel | зеркало | zwierciadło.

kara cher | dear | theuer | дорогой | drogi.

ordoni ordonner | order, command | befehlen | прgказывать |

rozkazywać.

babili babiller | chatter | schwatzen, plaudern | болтать | paplać.

kandelo chandelle | candle | Licht, Kerze | св ча | świeca.

gaja gai | gay, glad | lustig | веселый | wesoły.

danci danser | dance | tanzen | танцовать | tańczyć.

morti mourir | die | sterben | умgрать | umierać.

petoli faire le polisson, faire des bêtises | be mischievous | mutthwillig sein

| шалgть | swawolić.

uj qui porte, qui contient, qui est peuplé de; ex. pomo pomme — pomujo pommier; cigaro cigare — cigarujo porte-cigares; Turko Turc —

Turkujo Turquie | containing, filled with; e. g. cigaro cigar — cigarujo cigar-case; pomo apple — pomujo apple-tree; Turko Turk — Turkujo

Turkey | Behälter, Träger (d. h. Gegenstand worin... aufbewahrt

wird,... Früchte tragende Pflanze, von... bevölkertes Land); z. B.

cigaro Cigarre — cigarujo Cigarrenbüchse; pomo Apfel — pomujo

Apfelbaum; Turko Türke — Turkujo Türkei | вм стgтель, носgтель

(т. е. вещь, въ которой хранgться...; растеніе несущее... gлg

страна, заселенная...); напр. cigaro сgгара — cigarujo портъ-

сgгаръ; pomo яблоко — pomujo яблоня; Turko Турокъ — Turkujo

Турція | zawierający, noszący (t. j. przedmiot, w którym się coś

przechowuje, roślina, która wydaje owoc, lub kraj,

względem

zaludniających go mieszkańców; np. cigaro cygaro — cigarujo

cygarnica; pomo jabłko — pomujo jabł


 number
// back to zero.  Setting the high bit in handoff means that the profiling is over,
// and the goroutine is now in charge of flushing the data left in the hash table
// to the log and returning that data.
//
// The handoff field is manipulated using atomic operations.
// For the most part, the manipulation of handoff is orderly: if handoff == 0
// then the signal handler owns it and can change it to non-zero.
// If handoff != 0 then the goroutine owns it and can change it to zero.
// If that were the end of the story then we would not need to manipulate
// handoff using atomic operations.  The operations are needed, however,
// in order to let the log closer set the high bit to indicate "EOF" safely
// in the situation when normally the goroutine "owns" handoff.

package runtime

const (
	numBuckets      = 1 << 10
	logSize         = 1 << 17
	assoc           = 4
	maxCPUProfStack = 64
)

type cpuprofEntry struct {
	count uintptr
	depth int
	stack [maxCPUProfStack]uintptr
}

type cpuProfile struct {
	on     bool
	wait   note
	count  uintptr
	evicts uintptr
	lost   uintptr

	hash [numBuckets]struct {
		entry [assoc]cpuprofEntry
	}

	log     [2][logSize / 2]uintptr
	nlog    int
	toggle  int32
	handoff uint32

	wtoggle  uint32
	wholding bool
	flushing bool
	eodSent  bool
}
// Copyright 2014 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package runtime

const (
	_NSIG    = 32
	_SI_USER = 1

	_EPERM           = 1
	_ENOENT          = 2
	_ESRCH           = 3
	_EINTR           = 4
	_EIO             = 5
	_ENXIO           = 6
	_E2BIG           = 7
	_ENOEXEC         = 8
	_EBADF           = 9
	_ECHILD          = 10
	_EAGAIN          = 11
	_ENOMEM          = 12
	_EACCES          = 13
	_EFAULT          = 14
	_EBUSY           = 16
	_EEXIST          = 17
	_EXDEV           = 18
	_ENODEV          = 19
	_ENOTDIR         = 20
	_EISDIR          = 21
	_EINVAL          = 22
	_ENFILE          = 23
	_EMFILE          = 24
	_ENOTTY          = 25
	_EFBIG           = 27
	_ENOSPC          = 28
	_ESPIPE          = 29
	_EROFS           = 30
	_EMLINK          = 31
	_EPIPE           = 32
	_ENAMETOOLONG    = 36
	_ENOSYS          = 38
	_EDQUOT          = 122
	_EDOM            = 33
	_ERANGE          = 34
	_EDEADLK         = 35
	_ENOLCK          = 37
	_ENOTEMPTY       = 39
	_ELOOP           = 40
	_ENOMSG          = 42
	_EIDRM           = 43
	_ECHRNG          = 44
	_EL2NSYNC        = 45
	_EL3HLT          = 46
	_EL3RST          = 47
	_ELNRNG          = 48
	_EUNATCH         = 49
	_ENOCSI          = 50
	_EL2HLT          = 51
	_EBADE           = 52
	_EBADR           = 53
	_EXFULL          = 54
	_ENOANO          = 55
	_EBADRQC         = 56
	_EBADSLT         = 57
	_EDEADLOCK       = _EDEADLK
	_EBFONT          = 59
	_ENOSTR          = 60
	_ENODATA         = 61
	_ETIME           = 62
	_ENOSR           = 63
	_ENONET          = 64
	_ENOPKG          = 65
	_EREMOTE         = 66
	_ENOLINK         = 67
	_EADV            = 68
	_ESRMNT          = 69
	_ECOMM           = 70
	_EPROTO          = 71


000001CC
/* 013DC 809E6BAC 860401CA */  lh      $a0, 0x01CA($s0)           ## 000001CA
/* 013E0 809E6BB0 0C01DE1C */  jal     Math_Sins
              ## sins?
/* 013E4 809E6BB4 E7A00048 */  swc1    $f0, 0x0048($sp)
/* 013E8 809E6BB8 860401CE */  lh      $a0, 0x01CE($s0)           ## 000001CE
/* 013EC 809E6BBC 0C01DE1C */  jal     Math_Sins
              ## sins?
/* 013F0 809E6BC0 E7A0004C */  swc1    $f0, 0x004C($sp)
/* 013F4 809E6BC4 C7AE004C */  lwc1    $f14, 0x004C($sp)
/* 013F8 809E6BC8 C7A20048 */  lwc1    $f2, 0x0048($sp)
/* 013FC 809E6BCC 3C0141A0 */  lui     $at, 0x41A0                ## $at = 41A00000
/* 01400 809E6BD0 46007487 */  neg.s   $f18, $f14
/* 01404 809E6BD4 44818000 */  mtc1    $at, $f16                  ## $f16 = 20.00
/* 01408 809E6BD8 46029101 */  sub.s   $f4, $f18, $f2
/* 0140C 809E6BDC C7A80058 */  lwc1    $f8, 0x0058($sp)
/* 01410 809E6BE0 C7B20044 */  lwc1    $f18, 0x0044($sp)
/* 01414 809E6BE4 46048282 */  mul.s   $f10, $f16, $f4
/* 01418 809E6BE8 460A4181 */  sub.s   $f6, $f8, $f10
/* 0141C 809E6BEC 46000207 */  neg.s   $f8, $f0
/* 01420 809E6BF0 46123102 */  mul.s   $f4, $f6, $f18
/* 01424 809E6BF4 C7B2003C */  lwc1    $f18, 0x003C($sp)
/* 01428 809E6BF8 C7A60040 */  lwc1    $f6, 0x0040($sp)
/* 0142C 809E6BFC 46082283 */  div.s   $f10, $f4, $f8
/* 01430 809E6C00 46123100 */  add.s   $f4, $f6, $f18
/* 01434 809E6C04 46048202 */  mul.s   $f8, $f16, $f4
/* 01438 809E6C08 1000002F */  beq     $zero, $zero, .L809E6CC8
/* 0143C 809E6C0C 46085300 */  add.s   $f12, $f10, $f8
.L809E6C10:
/* 01440 809E6C10 2405AAAB */  addiu   $a1, $zero, 0xAAAB         ## $a1 = FFFFAAAB
/* 01444 809E6C14 0C01DE2B */  jal     Math_ApproxUpdateScaledS

/* 01448 809E6C18 24060555 */  addiu   $a2, $zero, 0x0555         ## $a2 = 00000555
/* 0144C 809E6C1C 260401CC */  addiu   $a0, $s0, 0x01CC           ## $a0 = 000001CC
/* 01450 809E6C


ffel Tower", "Louvre Museum", "Notre-Dame Cathedral"],
        "Tokyo": ["Shibuya Crossing", "Tokyo Tower", "Senso-ji Temple"],
        "New York": ["Statue of Liberty", "Central Park", "Times Square"],
    }
    if destination in recommendations:
        for place in recommendations[destination]:
            st.write(f"- {place}")
    else:
        st.write("No specific recommendations available for this destination. Try searching for popular tourist spots!")
else:
    st.write("Enter a destination to get recommendations.")

# Export itinerary as CSV
if not st.session_state.itinerary.empty:
    st.subheader("Export Itinerary")
    csv = st.session_state.itinerary.to_csv(index=False).encode("utf-8")
    st.download_button(
        label="Download Itinerary as CSV",
        data=csv,
        file_name="travel_itinerary.csv",
        mime="text/csv"
    )

# Footer
st.markdown("---")
st.write("Made with ❤ using Streamlit")


Rect())
	and its generated boxes (getClientRects()).

This definition applies to
	the (possibly) multiple boxes
	generated for an element in a named flow
	flowing through a region chain.
	The getClientRects() method
	returns the list of boxes generated
	for each of the element fragments
	laid out in different regions.
	The getBoundingClientRect() method
	operates as specified in the
	CSSOM View Module
	as well and is computed
	from the set of rectangles
	returned by getClientRects().

4.4.2.
offsetTop, offsetLeft,
offsetWidth, offsetHeight and offsetParent

The computation of the
	offset attributes
	for elements laid out in a named flow follow the
	specification
	[CSSOM].
	For the purpose of these algorithms,
	the first CSS layout box associated
	with an element laid out in a named flow
	is the first box generated for the first region the element is laid out into.
	In the offsetParent algorithm,
	the nearest ancestor search skips
	from the topmost named flow elements directly to the body element.

5.
Multi-column regions

A
	multi-column
	[CSS3COL]
	element can be
	assigned to a region chain.
	The element becomes part
	of the region chain
	for the associated named flow,
	and flows its content fragments
	through columns according to
	the multi-column specification
	<span title="CSS Multi-column Layout Module Leve


using System;
using static PKHeX.Core.PIDType;
using static PKHeX.Core.CommonEvent3;
using static PKHeX.Core.CommonEvent3Checker;
using static PKHeX.Core.RandomCorrelationRating;

namespace PKHeX.Core;

/// <summary>
/// Generation 3 Event Gift
/// </summary>
public sealed record EncounterGift3 : IEncounterable, IEncounterMatch, IMoveset, IFatefulEncounterReadOnly,
    IRibbonSetEvent3, IRandomCorrelationEvent3, IFixedTrainer, IMetLevel, IGenerateSeed32
{
    public ushort Species { get; }
    public byte Form => 0;
    public byte Level { get; }
    public GameVersion Version { get; }
    public byte MetLevel { get; }
    public bool IsEgg { get; }

    private const ushort UnspecifiedID = ushort.MaxValue;

    /// <summary>
    /// Matched <see cref="PIDIV"/> Type
    /// </summary>
    public required PIDType Method { get; init; }

    public required Moveset Moves { get; init; }
    public required string OriginalTrainerName { get; init; }
    public GiftGender3 OriginalTrainerGender { get; init; }
    public uint ID32 { get => (uint)(SID16 << 16 | TID16); init => (SID16, TID16) = ((ushort)(value >> 16), (ushort)value); }
    public ushort TID16 { get; init; } = UnspecifiedID;
    public ushort SID16 { get; init; } = UnspecifiedID;
    public byte Language { get; init; } // default 0 for eggs
    public Shiny Shiny { get; init; }
    public bool FatefulEncounter { get; init; }
    public bool RibbonNational { get; set; } // pls don't mutate

    public byte LevelMin => Level;
    public byte LevelMax => Level;
    public ushort Location => 255; // Event
    public ushort EggLocation => 0;
    public Ball FixedBall => Ball.Poke;
    public string Name => "Event Gift";
    public string LongName => Name;

    public byte Generation => 3;
    public EntityContext Context => EntityContext.Gen3;
    public bool IsShiny => Shiny == Shiny.Always;
    public AbilityPermission Ability => AbilityPermission.Any12;
    public PIDType GetSuggestedCorrelation() => Method;
    public bool IsFixedTrainer => !string.IsNullOrWhiteSpace(OriginalTrainerName);

    // Interface dummies
    public bool RibbonEarth { get => false; set { } }
    public bool RibbonCountry { get => false; set { } }
    public bool RibbonChampionBattle { get => false; set { } }
    public bool RibbonChampionRegional { get => false; set { } }
    public bool RibbonChampionNational { get => false; set { } }

    public EncounterGift3(ushort species, byte level, GameVersion version) : this(species, level, version, false, level) { }

    public EncounterGift3(ushort species, byte level, GameVersion version, bool egg, byte met = 0)
    {
        Species = species;
        Level = level;
        Version = version;
        IsEgg = egg;
        MetLevel = met;
    }

    PKM IEncounterConvertible.ConvertToPKM(ITrainerInfo tr) => ConvertToPKM(tr, EncounterCriteria.Unrestricted);
    PKM IEncounterConvertible.ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) => ConvertToPKM(tr, criteria);

    public PK3 ConvertToPKM(ITrainerInfo tr) => ConvertToPKM(tr, EncounterCriteria.Unrestricted);

    public PK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria)
    {
        var pi = PersonalTable.RS[Species];
        PK3 pk = new()
        {
            Species = Species,
            MetLevel = MetL


           "将本应用设置为\"模拟位置信息应用\"，否则无法正常使用",
                    Toast.LENGTH_SHORT
                ).show()
                return
            }
        }
        //启动服务  定位以及悬浮窗
        context.startService(Intent(context, GpsService::class.java).apply {
            parcelable?.let {
                putExtras(
                    Bundle().apply {
                        putParcelable("info", it)
                    })
            }
        })
    }

}package com.huolala.mockgps.widget

import android.app.Dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.baidu.mapapi.model.LatLng
import com.blankj.utilcode.util.ClickUtils
import com.blankj.utilcode.util.ConvertUtils
import com.blankj.utilcode.util.ScreenUtils
import com.blankj.utilcode.util.ToastUtils
import com.huolala.mockgps.R
import com.huolala.mockgps.databinding.DialogInputLatlngBinding

/**
 * @author jiayu.liu
 *
 */
class InputLatLngDialog(
    context: Context,
    listener: InputLatLngDialogListener?
) : Dialog(context) {

    init {
        DataBindingUtil.bind<DialogInputLatlngBinding>(
            LayoutInflater.from(context)
                .inflate(R.layout.dialog_input_latlng, null, false)
        )?.let { dataBinding ->
            setContentView(dataBinding.root)
            window?.run {
                setBackgroundDrawableResource(R.color.transparent)
                val lp = attributes
                lp.width = ScreenUtils.getScreenWidth() - ConvertUtils.dp2px(20f)
                lp.height = ViewGroup.LayoutParams.WRAP_CONTENT
                attributes = lp
            }

            setCanceledOnTouchOutside(false)

            ClickUtils.applySingleDebouncing(dataBinding.btnConfirm) {
                dataBinding.editLatlng.text?.toString()?.let { text ->
                    var input = text
                    if (text.contains("，")) {
                        input = text.replace("，", ",")
                    }

                    val split = input.split(",")

                    if (split.size == 2) {
                        val latLng = try {
                            LatLng(split[0].toDouble(), split[1].toDouble())
                        } catch (e: Exception) {
                            e.printStackTrace()
                            ToastUtils.showShort("请输入正确的经纬度")
                            return@let
                        }
                        listener?.onConfirm(latLng)
                        dismiss()
                    }
                }
            }

            ClickUtils.applySingleDebouncing(dataBinding.btnCancel) {
                dismiss()
            }
        }
    }

    interface InputLatLngDialogListener {
        fun onConfirm(latLng: LatLng)
    }
}package com.huolala.mockgps.widget

import android.app.Dialog
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.blankj.utilcode.util.ClickUtils
import com.blankj.utilcode.util.ConvertUtils
import com.blankj.utilcode.util.ScreenUtils
import com.blankj.utilcode.util.ToastUtils
import com.huolala.mockgps.R
import com.huolala.mockgps.databinding.DialogInputSpeedBinding
import com.huolala.mockgps.utils.MMKVUtils
import kotlinx.android.synthetic.main.dialog_input_speed.view.*

/**
 * @author jiayu.liu
 */
class InputSpeed(context: Context) : Dialog(context) {
    init {
        DataBindingUtil.bind<DialogInputSpeedBinding>(
            LayoutInflater.from(context)
                .inflate(R.layout.dialog_input_speed, null, false)
        )?.let { it ->
            setContentView(it.root)
            window?.run


, 0, 0 }) { } }
    public class AnxiousFaceWithSweat : Emoji { public AnxiousFaceWithSweat() : base("AnxiousFaceWithSweat", EmojiSize.Size32, EmojiGroup.Smileys_Emotion, EmojiSkintone.Default, EmojiStyle.HighContrast, new byte [] { 31, 139, 8, 0, 0, 0, 0, 0, 0, 10, 133, 150, 189, 110, 37, 55, 12, 133, 95, 101, 224, 244, 138, 68, 253, 3, 187, 105, 166, 73, 225, 180, 91, 164, 11, 16, 4, 9, 176, 69, 138, 188, 63, 242, 29, 206, 72, 227, 117, 2, 175, 109, 248, 234, 92, 81, 18, 69, 30, 30, 234, 211, 223, 191, 253, 243, 231, 241, 251, 231, 151, 95, 90, 176, 92, 154, 29, 45, 244, 222, 235, 60, 75, 176, 89, 166, 29, 35, 140, 145, 231, 145, 131, 197, 82, 236, 72, 41, 244, 22, 7, 56, 90, 139, 243, 72, 53, 196, 156, 230, 105, 97, 196, 220, 179, 227, 102, 233, 176, 80, 71, 47, 85, 56, 165, 156, 193, 185, 207, 218, 28, 143, 92, 207, 20, 70, 181, 226, 246, 185, 37, 236, 66, 30, 201, 186, 112, 107, 105, 128, 35, 63, 224, 22, 98, 141, 253, 53, 105, 102, 206, 49, 79, 70, 41, 204, 220, 7, 123, 154, 53, 107, 184, 152, 122, 31, 245, 40, 184, 150, 241, 177, 134, 98, 214, 219, 217, 67, 78, 58, 185, 213, 146, 240, 148, 45, 103, 229, 6, 107, 167, 35, 157, 22, 195, 228, 30, 124, 103, 37, 180, 81, 198, 182, 182, 174, 120, 228, 189, 151, 77, 226, 130, 159, 235, 172, 204, 202, 137, 15, 203, 151, 141, 111, 47, 23, 230, 132, 216, 142, 181, 218, 114, 24, 105, 62, 187, 91, 11, 181, 215, 115, 31, 62, 3, 223, 98, 126, 187, 245, 110, 211, 133, 207, 117, 149, 53, 127, 95, 244, 94, 189, 194, 112, 111, 94, 248, 31, 205, 97, 110, 44, 42, 68, 90, 137, 6, 167, 50, 101, 110, 177, 85, 14, 231, 16, 27, 5, 251, 50, 106, 102, 190, 134, 209, 147, 236, 123, 53, 92, 175, 161, 15, 18, 79, 126, 99, 46, 4, 204, 19, 149, 79, 242, 215, 171, 18, 76, 164, 134, 7, 191, 39, 126, 132, 201, 111, 5, 207, 217, 116, 92, 9, 184, 60, 79, 242, 217, 139, 238, 202, 70, 133, 117, 120, 81, 73, 189, 112, 202, 86, 142, 197, 67, 173, 183, 104, 231, 8, 185, 198, 129, 125, 15, 53, 13, 39, 96, 109, 178, 31, 223, 198, 230, 198, 74, 105, 49, 174, 181, 230, 9, 121, 43, 109, 238, 245, 186, 71, 203, 105, 239, 207, 247, 99, 66, 56, 51, 98, 62, 250, 179, 239, 228, 126, 243, 63, 231, 156, 27, 195, 104, 27, 156, 115, 175, 159, 33, 242, 153, 246, 254, 171, 142, 214, 249, 132, 213, 11, 96, 249, 151, 159, 172, 158, 235, 78, 249, 88, 183, 93, 214, 23


 []
      };
      anon_inv[missing] = undefined;
      expect(Inverter.isInstance(anon_inv)).toBeFalsy();
    }
  );
});

describe("PVSyst inverter parameters typeguard", () => {
  test.each(["Paco", "Pdco", "Vdco", "Pso", "C0", "C1", "C2", "C3", "Pnt"])(
    "pvsyst ip typeguard missing %p",
    missing => {
      const anon_params: { [key: string]: any } = {
        Paco: 0,
        Pdco: 0,
        Vdco: 0,
        Pso: 0,
        C0: 0,
        C1: 0,
        C2: 0,
        C3: 0,
        Pnt: 0
      };
      anon_params[missing] = undefined;
      expect(SandiaInverterParameters.isInstance(anon_params)).toBeFalsy();
    }
  );
});

describe("PVWatts inverter parameters typeguard", () => {
  test.each(["pdc", "pdc0", "eta_inv_nom", "eta_inv_ref"])(
    "pvwatts ip typeguard missing %p",
    missing => {
      const anon_params: { [key: string]: any } = {
        pdc: 0,
        pdc0: 0,
        eta_inv_nom: 0,
        eta_inv_ref: 0
      };
      anon_params[missing] = undefined;
      expect(SandiaInverterParameters.isInstance(anon_params)).toBeFalsy();
    }
  );
});
describe("PVSyst module parameters typeguard", () => {
  test.each([
    "gamma_ref",
    "mu_gamma",
    "I_L_ref",
    "I_o_ref",
    "R_sh_ref",
    "R_sh_0",
    "R_s",
    "alpha_sc",
    "EgRef",
    "cells_in_series",
    "R_sh_exp"
  ])("pvwatts mp typeguard missing %p", missing => {
    const anon_params: { [key: string]: any } = {
      gamma_ref: 0,
      mu_gamma: 0,
      I_L_ref: 0,
      I_o_ref: 0,
      R_sh_ref: 0,
      R_sh_0: 0,
      R_s: 0,
      alpha_sc: 0,
      EgRef: 0,
      cells_in_series: 0,
      R_sh_exp: 0
    };
    anon_params[missing] = undefined;
    expect(PVSystModuleParameters.isInstance(anon_params)).toBeFalsy();
  });
});
describe("PVWatts module parameters typeguard", () => {
  test.each(["pdc0", "gamma_pdc"])(
    "pvwatts mp typeguard missing %p",
    missing => {
      const anon_params: { [key: string]: any } = {
        pdc0: 0,
        gamma_pdc: 0
      };
      anon_params[missing] = undefined;
      expect(PVWattsInverterParameters.isInstance(anon_params)).toBeFalsy();
    }
  );
});
test("Empty pvsyst module parameters init", () => {
  const mp = new PVSystModuleParameters({});
  expect(mp.gamma_ref).toBe(0);
  expect(mp.mu_gamma).toBe(0);
  expect(mp.I_L_ref).toBe(0);
  expect(mp.I_o_ref).toBe(0);
  expect(mp.R_sh_ref).toBe(0);
  expect(mp.R_sh_0).toBe(0);
  expect(mp.R_s).toBe(0);
  expect(mp.alpha_sc).toBe(0);
  expect(mp.EgRef).toBe(1.121);
  expect(mp.R_sh_exp).toBe(5.5);
  expect(mp.cells_in_series).toBe(0);
});

test("Empty pvwatts module parameters init", () => {
  const mp = new PVWattsModuleParameters({});
  expect(mp.pdc0).toBe(0);
  expect(mp.gamma_pdc).toBe(0);
});

test("Empty pvarray in


ROCESSOR
	movq	CPUVAR(GDT),%rax
#else
	movq	_C_LABEL(gdtstore)(%rip),%rax
#endif

	/* Switch address space. */
	movq	PCB_CR3(%r8),%rcx
	movq	%rcx,%cr3

	/* Switch TSS. */
	andl	$~0x0200,4-SEL_KPL(%rax,%rdx,1)
	ltr	%dx

	/* We're always in the kernel, so we don't need the LDT. */

	/* Restore cr0 (including FPU state). */
	movl	PCB_CR0(%r8),%ecx
	movq	%rcx,%cr0

	/* Record new pcb. */
	SET_CURPCB(%r8)

	/* Interrupts are okay again. */
	sti

	/*
	 * Schedule the dead process's vmspace and stack to be freed.
	 * {lpw_}exit2(l). Function still in %rsi (2nd arg), lwp in
	 * %rdi (first arg).
	 */

	call	*%rsi

	/* Jump into cpu_switch() with the right state. */
	xorq	%r13,%r13
	movq	%r13, CPUVAR(CURLWP)
	jmp	idle_start

/*
 * savectx(struct pcb *pcb);
 * Update pcb, saving current processor state.
 */
ENTRY(savectx)
	/* Save stack pointers. */
	movq	%rsp,PCB_RSP(%rdi)
	movq	%rbp,PCB_RBP(%rdi)

	ret

IDTVEC(syscall32)
	sysret		/* go away please */

/*
 * syscall insn entry. This currently isn't much faster, but
 * it can be made faster in the future.
 */
IDTVEC(syscall)
	swapgs
	movq	%r15,CPUVAR(SCRATCH)
	movq	CPUVAR(CURPCB),%r15
	movq	PCB_RSP0(%r15),%r15
	xchgq	%r15,%rsp
	sti

	/*
	 * XXX don't need this whole frame, split of the
	 * syscall frame and trapframe is needed.
	 * First, leave some room for the trapno, error,
	 * ss:rsp, etc, so that all GP registers can be
	 * saved. Then, fill in the rest.
	 */
	pushq	$(LSEL(LUDATA_SEL, SEL_UPL))
	pushq	%r15
	subq	$(TF_RSP-TF_TRAPNO),%rsp
	movq	CPUVAR(SCRATCH),%r15
	subq	$32,%rsp
	INTR_SAVE_GPRS
	movw	%fs,TF_FS(%rsp)
	movw	%gs,TF_GS(%rsp)
	movw	%es,TF_ES(%rsp)
	movw	$(LSEL(LUDATA_SEL, SEL_UPL)),TF_DS(%rsp)
	movq	%r11, TF_RFLAGS(%rsp)	/* old rflags from syscall insn */
	movq	$(LSEL(LUCODE_SEL, SEL_UPL)), TF_CS(%rsp)
	movq	%rcx,TF_RIP(%rsp)
	movq	$2,TF_ERR(%rsp)
	movq	$T_ASTFLT, TF_TRAPNO(%rsp)

	movq	CPUVAR(CURLWP),%r14
	movq	%rsp,L_MD_REGS(%r14)	# save pointer to frame
	movq	L_PROC(%r14),%r15
	andl	$~MDP_IRET,L_MD_FLAGS(%r14)
	movq	%rsp,%rdi
	call	*P_MD_SYSCALL(%r15)
1:	/* Check for ASTs on exit to


v-b3865ac6]{font-size:16px;font-family:Microsoft YaHei;font-weight:400;color:#000;line-height:20px;opacity:.85;text-align:center;margin-bottom:12px}.le-chooseGroup .le-cat__head[data-v-4336cd52] .el-input{width:367px}.le-chooseGroup .le-cat__head[data-v-4336cd52] .el-input-group__append{padding:0 20px}.le-chooseGroup .le-cat__head[data-v-4336cd52] .el-input-group__append .el-button{width:45px;padding:0;height:32px}.le-chooseGroup .le-cat__body[data-v-4336cd52]{width:480px;height:231px;border:1px solid #dcdfe6;border-radius:4px;margin-top:16px}.le-chooseGroup .le-cat__body .le-cat-item__first[data-v-4336cd52]{border-right:1px solid #dcdfe6}.le-chooseGroup .le-cat__body .le-cat-item__search[data-v-4336cd52]{padding:16px 16px 0 16px}.le-chooseGroup .le-cat__body .le-cat-item__search .el-autocomplete[data-v-4336cd52] .el-input{width:207px}.le-chooseGroup .le-cat__body .le-cat-item-bar[data-v-4336cd52]{height:183px;width:239px;padding-top:15px}.le-chooseGroup .le-cat__body .le-cat-item-bar[data-v-4336cd52] .el-scrollbar__wrap{overflow-x:hidden}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item[data-v-4336cd52]:hover{background:#f3f5f7}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item[data-v-4336cd52]{width:239px;height:32px;font-size:14px;font-family:PingFang SC;font-weight:500;line-height:32px;padding:0 11px 0 8px;cursor:pointer;color:rgba(0,0,0,.85)}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item .le-cat-item--check[data-v-4336cd52]{width:28px;height:32px;line-height:32px;text-align:center}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item .le-cat-item--check svg[data-v-4336cd52]{color:#623ceb}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item .le-item-arrow[data-v-4336cd52]{width:7px;height:32px}.le-chooseGroup .le-cat__body .le-cat-item-bar .le-cat-item .le-cat-item-text[data-v-4336cd52]{color:#623ceb}.he-main[data-v-62f97587]{margin:0 0 40px 0}[data-v-62f97587] .el-menu-vertical-demo .el-menu-item{text-align:center}[data-v-62f97587] .el-menu-vertical-demo{height:232px}.he-zoom[data-v-62f97587]{zoom:.32;margin:0 32px 0 64px}.he-poster[data-v-62f97587]{width:750px;height:728px;background-color:#f3f5f7;position:relative}.he-poster__body[data-v-62f97587]{width:686px;height:592px;background:#fff;border-radius:16px;position:absolute;bottom:32px;left:32px;text-align:ce


			size_t operator()(const wstring_view& x) const
			{
				wstring_view::const_iterator p = x.cbegin();
				wstring_view::const_iterator end = x.cend();
				uint32_t result = 2166136261U;
				while (p != end)
					result = (result * 16777619) ^ (uint32_t)*p++;
				return (size_t)result;
			}
		};
	#endif

	#if EASTL_USER_LITERALS_ENABLED && EASTL_INLINE_NAMESPACES_ENABLED
		// Disabling the Clang/GCC/MSVC warning about using user
		// defined literals without a leading '_' as they are reserved
		// for standard libary usage.
		EA_DISABLE_VC_WARNING(4455)
		EA_DISABLE_CLANG_WARNING(-Wuser-defined-literals)
		EA_DISABLE_GCC_WARNING(-Wliteral-suffix)

	    inline namespace literals
	    {
		    inline namespace string_view_literals
		    {
			    EA_CONSTEXPR inline string_view operator ""sv(const char* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline u16string_view operator ""sv(const char16_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline u32string_view operator ""sv(const char32_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline wstring_view operator ""sv(const wchar_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }

				// We've seen _sv trigger the following warning on clang:
				// identifier '_sv' is reserved because it starts with '_' at global scope [-Wreserved-identifier]
				// Temporarily disable the warning until we figure out why it thinks _sv is "at global scope".
				EA_DISABLE_CLANG_WARNING(-Wreserved-identifier)
				// Backwards compatibility.
			    EA_CONSTEXPR inline string_view operator ""_sv(const char* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline u16string_view operator ""_sv(const char16_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline u32string_view operator ""_sv(const char32_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
			    EA_CONSTEXPR inline wstring_view operator ""_sv(const wchar_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
				EA_RESTORE_CLANG_WARNING()	// -Wreserved-identifier

				// C++20 char8_t support.
				#if EA_CHAR8_UNIQUE
					EA_CONSTEXPR inline u8string_view operator ""sv(const char8_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
					EA_CONSTEXPR inline u8string_view operator ""_sv(const char8_t* str, size_t len) EA_NOEXCEPT { return {str, len}; }
				#endif
		    }
	    }

		EA_RESTORE_GCC_WARNING()	// -Wliteral-suffix
		EA_RESTORE_CLANG_WARNING()	// -Wuser-defined-literals
		EA_RESTORE_VC_WARNING()		// warning: 4455
	#endif

} // namespace eastl

EA_RESTORE_VC_WARNING()
#endif // EASTL_STRING_VIEW_H


 co_init() {
    #ifdef LIBCO_MPROTECT
    unsigned long long addr = (unsigned long long)co_swap_function;
    unsigned long long base = addr - (addr % sysconf(_SC_PAGESIZE));
    unsigned long long size = (addr - base) + sizeof co_swap_function;
    mprotect((void*)base, size, PROT_READ | PROT_EXEC);
    #endif
  }
#endif

static void crash() {
  assert(0);  /* called only if cothread_t entrypoint returns */
}

cothread_t co_active() {
  if(!co_active_handle) co_active_handle = &co_active_buffer;
  return co_active_handle;
}

cothread_t co_create(unsigned int size, void (*entrypoint)(void),
                     size_t *out_size){
  cothread_t handle;
  if(!co_swap) {
    co_init();
    co_swap = (void (*)(cothread_t, cothread_t))co_swap_function;
  }

  if(!co_active_handle) co_active_handle = &co_active_buffer;
  size += 512;  /* allocate additional space for storage */
  size &= ~15;  /* align stack to 16-byte boundary */
  *out_size = size;

  if((handle = (cothread_t)malloc(size))) {
    long long *p = (long long*)((char*)handle + size);  /* seek to top of stack */
    *--p = (long long)crash;                            /* crash if entrypoint returns */
    *--p = (long long)entrypoint;                       /* start of function */
    *(long long*)handle = (long long)p;                 /* stack pointer */
  }

  return handle;
}

void co_delete(cothread_t handle) {
  free(handle);
}

void co_switch(cothread_t handle) {
  register cothread_t co_previous_handle = co_active_handle;
  co_swap(co_active_handle = handle, co_previous_handle);
}

#ifdef __cplusplus
}
#endif


or, indicators(cell_index));
    if (myid == 0)
      {
        deallog << "thresholds = " << refine_indicator << ' '
                << coarsen_indicator << std::endl;
      }

    for (Triangulation<2>::active_cell_iterator cell = tr.begin_active();
         cell != tr.end();
         ++cell)
      {
        cell->clear_coarsen_flag();
        cell->clear_refine_flag();
      }
  }
}

int
main(int argc, char *argv[])
{
  Utilities::MPI::MPI_InitFinalize mpi_initialization(argc, argv, 1);

  unsigned int myid = Utilities::MPI::this_mpi_process(MPI_COMM_WORLD);

  deallog.push(Utilities::int_to_string(myid));

  if (myid == 0)
    {
      initlog();

      test();
    }
  else
    test();
}
// ------------------------------------------------------------------------
//
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (C) 2017 - 2022 by the deal.II authors
//
// This file is part of the deal.II library.
//
// Part of the source code is dual licensed under Apache-2.0 WITH
// LLVM-exception OR LGPL-2.1-or-later. Detailed license information
// governing the source code and code contributions can be found in
// LICENSE.md and CONTRIBUTING.md at the top level directory of deal.II.
//
// ------------------------------------------------------------------------

// test for the Partitioner with a smaller ghost index set within a larger one
// regarding the import_from_ghosted_array() calls
#include <deal.II/base/index_set.h>
#include <deal.II/base/partitioner.h>
#include <deal.II/base/utilities.h>

#include <fstream>
#include <iostream>
#include <vector>

#include "../tests.h"

void
test()
{
  unsigned int myid    = Utilities::MPI::this_mpi_process(MPI_COMM_WORLD);
  unsigned int numproc = Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD);
  Assert(numproc > 2, ExcNotImplemented());

  const unsigned int set = 50;
  AssertIndexRange(numproc, set - 2);
  const unsigned int      local_size  = set - myid;
  types::global_dof_index global_size = 0;
  types::global_dof_index my_start    = 0;
  for (unsigned int i = 0; i < numproc; ++i)
    {
      global_size += set - i;
      if (i < myid)
        my_start += set - i;
    }

  // each processor owns some indices and all are ghosting elements from three
  // processors (the second). some entries are right around the border between
  // two processors
  IndexSet local_owned(global_size);
  local_owned.add_range(my_start, my_start + local_size);
  IndexSet local_relevant_1(global_size), local_relevant_2(global_size);
  local_relevant_1                          = local_owned;
  types::global_dof_index ghost_indices[10] = {1,
                                               2,
                                               13,
                                               set - 2,
                                               set - 1,
                                               set,
                                               set + 1,
                                               2 * set,
                                               2 * set + 1,
                                               2 * set + 3};
  local_relevant_1.add_indices(&ghost_indices[0], ghost_indices + 10);
  if (myid > 0)
    local_relevant_1.add_range(my_start - 10, my_start);


, "syl.text", "shape.rmove( 4r, 4r, fx.dur - 400, fx.dur, 1, { 1f } ), tag.clip_shape( Shp ), \"\\\\te(80,400,\\\\fscxyr1.15)\\\\te(0,80,\\\\fscxyr1)\\\\fad(0,120)\"", "Dxy = ceil( (syl.width + syl.height - 2 * l.descent) / ( 2 ^ 0.5 ) );\nPxy = 4r;\nShp = shape.rotate( shape.array( shape.size( shape.rectangle, Dxy + 100r, Pxy ), { 1, ceil( Dxy / Pxy ) }, \"array\" ), -45 )", "Lua", false, false )
	Akimbo_I_D_LT_buttline = effector.create_fx( "LOfx", "Akimbo_I_D_LT_buttline", "Syl", true, false, "#FFFFFF", "#848484", "#454545", "0", "0", "0", "l.start_time + syl.end_time", "l.end_time + 50mid2 + 11f + 300", "", "", "", "", "syl.center", "syl.middle", "", "", "5", "0", "fx.pos_x", "fx.pos_y", "", "ceil( Dxy / Pxy )", "", "syl.text", "shape.rmove( 4r, 4r, fx.dur - 400, fx.dur, 1, { 1f } ), tag.clip_shape( Shp ), \"\\\\te(80,400,\\\\fscxyr1.15)\\\\te(0,80,\\\\fscxyr1)\\\\fad(0,120)\"", "Dxy = ceil( (syl.width + syl.height - 2 * l.descent) / ( 2 ^ 0.5 ) );\nPxy = 4r;\nShp = shape.rotate( shape.array( shape.size( shape.rectangle, Dxy + 100r, Pxy ), { 1, ceil( Dxy / Pxy ) }, \"array\" ), -45 )", "Lua", false, false )
	Akimbo_I_D_LT_inverse = effector.create_fx( "LOfx", "Akimbo_I_D_LT_inverse", "Syl", true, false, "#FFFFFF", "#848484", "#454545", "0", "0", "0", "l.start_time + syl.end_time", "l.end_time - 50lo + 8f + 300", "", "", "", "", "syl.center", "syl.middle", "", "", "5", "0", "fx.pos_x", "fx.pos_y", "", "ceil( Dxy / Pxy )", "", "syl.text", "shape.rmove( 4r, 4r, fx.dur - 400, fx.dur, 1, { 1f } ), tag.clip_shape( Shp ), \"\\\\te(80,400,\\\\fscxyr1.15)\\\\te(0,80,\\\\fscxyr1)\\\\fad(0,120)\"", "Dxy = ceil( (syl.width + syl.height - 2 * l.descent) / ( 2 ^ 0.5 ) );\nPxy = 4r;\nShp = shape.rotate( shape.array( shape.size( shape.rectangle, Dxy + 100r, Pxy ), { 1, ceil( Dxy / Pxy ) }, \"array\" ), -45 )", "Lua", false, false )
	Akimbo_I_D_LT_midline = effector.create_fx( "LOfx", "Akimbo_I_D_LT_midline", "Syl", true, false, "#FFFFFF", "#848484", "#454545", "0", "0", "0", "l.start_time + syl.end_time", "l.end_time + 50mid1 + 11f + 300", "", "", "", "", "syl.center", "syl.middle", "", "", "5", "


W2(40);
"Insufficient funds"

W1(40);
10
```

注意到`W1`和`W2`是完全独立的对象，每个都有自己的局部状态变量`balance`。从其中一个退出不会影响另一个。

我们还可以创建处理存款和取款的对象，因此我们可以表示简单的银行账户。下面是一个返回具有指定初始余额的“银行帐户对象”的函数:

```js
function make_account(balance) {
    function withdraw(amount) {
        if (balance >= amount) {
            balance = balance - amount;
            return balance;
        } else {
            return "Insufficient funds";
        }
    }
    function deposit(amount) {
        balance = balance + amount;
        return balance;
    }
    function dispatch(m) {
        return m === "withdraw"
               ? withdraw
               : m === "deposit"
               ? deposit
               : error(m, "unknown request – make_account");
    }
    return dispatch;
}
```

对`make_account`的每次调用都用本地状态变量`balance`建立一个环境。在这个环境中，`make_account`定义了访问`balance`的函数`deposit`和`withdraw`，以及一个附加函数`dispatch`，该函数将“消息”作为输入并返回两个本地函数之一。`dispatch`函数本身作为代表银行账户对象的值返回。这正是我们在 2.4.3 节中看到的消息传递风格的编程，尽管这里我们将它与修改局部变量的能力结合使用。

功能`make_account`可以如下使用:

```js
const acc = make_account(100);

acc("withdraw")(50);
50

acc("withdraw")(60);
"Insufficient funds"

acc("deposit")(40);
90

acc("withdraw")(60);
30
```

对`acc`的每次调用都返回本地定义的`deposit`或`withdraw`函数，然后应用于指定的`amount`。与`make_withdraw`的情况一样，对`make_account`的另一个调用

```js
const acc2 = make_account(100);
```

会产生一个完全独立的 account 对象，它维护自己的本地`balance`。

##### 练习 3.1

累加器是一个用单个数字参数重复调用的函数，它将参数累加成一个和。每次调用它时，它都返回当前累计的总和。编写一个生成累加器的函数`make_acc


}

        /// <summary>
        /// Center
        /// </summary>
        /// <value>
        /// Center
        /// </value>
        public static DatalabelsAnchor Center
        { get { return new DatalabelsAnchor("center"); } }

        /// <summary>
        /// End
        /// </summary>
        /// <value>
        /// End
        /// </value>
        public static DatalabelsAnchor End
        { get { return new DatalabelsAnchor("end"); } }

        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <value>
        /// The value.
        /// </value>
        public string Value { get; private set; }
    }
}


 clockwise arc to
				x - radius, // left
				y - radius, // top
				x + radius, // right
				y + radius, // bottom
				x + radius * cosStart, // start x
				y + radius * sinStart, // start y
				x + radius * cosEnd, // end x
				y + radius * sinEnd  // end y
			];

			if (options.open && !innerRadius) {
				ret.push(
					'e',
					M,
					x,// - innerRadius,
					y// - innerRadius
				);
			}

			ret.push(
				'at', // anti clockwise arc to
				x - innerRadius, // left
				y - innerRadius, // top
				x + innerRadius, // right
				y + innerRadius, // bottom
				x + innerRadius * cosEnd, // start x
				y + innerRadius * sinEnd, // start y
				x + innerRadius * cosStart, // end x
				y + innerRadius * sinStart, // end y
				'x', // finish path
				'e' // close
			);

			ret.isArc = true;
			return ret;

		},
		// Add circle symbol path. This performs significantly faster than v:oval.
		circle: function (x, y, w, h, wrapper) {

			if (wrapper) {
				w = h = 2 * wrapper.r;
			}

			// Center correction, #1682
			if (wrapper && wrapper.isCircle) {
				x -= w / 2;
				y -= h / 2;
			}

			// Return the path
			return [
				'wa', // clockwisearcto
				x, // left
				y, // top
				x + w, // right
				y + h, // bottom
				x + w, // start x
				y + h / 2,     // start y
				x + w, // end x
				y + h / 2,     // end y
				//'x', // finish path
				'e' // close
			];
		},
		/**
		 * Add rectangle symbol path which eases rotation and omits arcsize problems
		 * compared to the built-in VML roundrect shape
		 *
		 * @param {Number} left Left position
		 * @param {Number} top Top position
		 * @param {Number} r Border radius
		 * @param {Object} options Width and height
		 */

		rect: function (left, top, width, height, options) {

			var right = left + width,
				bottom = top + height,
				ret,
				r;

			// No radius, return the more lightweight square
			if (!defined(options) || !options.r) {
				ret = SVGRenderer.prototype.symbols.square.apply(0, arguments);

			// Has radius add arcs for the corners
			} else {

				r = mathMin(options.r, width, height);
				ret = [
					M,
					left + r, top,

					L,
					right - r, top,
					'wa',
					right - 2 * r, top,
					right, top + 2 * r,
					right - r, top,
					right, top + r,

					L,
					right, bottom - r,
					'wa',
					right - 2 * r, bottom - 2 * r,
					right, bottom,
					right, bottom - r,
					right - r, bottom,

					L,
					left + r, bottom,
					'wa',
					left, bottom - 2 * r,
					left + 2 * r, bottom,
					left + r, bottom,
					left, bottom - r,

					L,
					left, top + r,
					'wa',
					left, top,
					left + 2 * r, top + 2 * r,
					left, top + r,
					left + r, top,

					'x',
					'e'
				];
			}
			return ret;
		}
	}
};
Highcharts.VMLRenderer = VMLRenderer = function () {
	this.init.apply(this, arguments);
};
VMLRenderer.prototype = merge(SVGRenderer.prototype, VMLRendererExtension);

	// general renderer
	Renderer = VMLRenderer;
}

/* ****************************************************************************
 *                                                                            *
 * END OF INTERNET EXPLORER <= 8 SPECIFIC CODE                                *
 *                                                                            *
 *****************************************************************************/
/* ****************************************************************************
 *


ll && !diff) {
    // Cell deleted
    for (let o of base) {
      models.push(new OutputDiffModel(o, null));
    }
  } else if (base === null) {
    // Cell added
    for (let o of remote) {
      models.push(new OutputDiffModel(null, o));
    }
  } else if (remote === base) {
    // Outputs unchanged
    for (let o of base) {
      models.push(new OutputDiffModel(o, o));
    }
  } else if (diff) {
    // Outputs' patched, remote will be null
    let consumed = 0;
    let skip = 0;
    for (let d of diff) {
      let index = d.key as number;
      for (let o of base.slice(consumed, index)) {
        // Add unchanged outputs
        models.push(new OutputDiffModel(o, o));
      }
      if (d.op === DiffOp.SEQINSERT) {
        // Outputs added
        for (let o of (d as IDiffAddRange).valuelist) {
          models.push(new OutputDiffModel(null, o));
        }
        skip = 0;
      } else if (d.op === DiffOp.SEQDELETE) {
        // Outputs removed
        let len = (d as IDiffRemoveRange).length;
        for (let i = index; i < index + len; i++) {
          models.push(new OutputDiffModel(base[i], null));
        }
        skip = len;
      } else if (d.op === DiffOp.PATCH) {
        // Output changed
        models.push(new OutputDiffModel(
          base[index], null, (d as IDiffPatch).diff));
        skip = 1;
      } else {
        throw 'Invalid diff operation: ' + d;
      }
      consumed = Math.max(consumed, index + skip);
    }
    for (let o of base.slice(consumed)) {
      // Add unchanged outputs
      models.push(new OutputDiffModel(o, o));
    }
  } else {
    throw 'Invalid arguments to OutputsDiffModel';
  }
  return models;
}

/**
 * Diff model for a Jupyter Notebook
 */
export class NotebookDiffModel {

  /**
   * Create a new NotebookDiffModel from a base notebook and a list of diffs.
   *
   * The base as well as the diff entries are normally supplied by the nbdime
   * server.
   */
  constructor(base: nbformat.INotebookContent, diff: IDiffEntry[]) {
    // Process global notebook metadata field
    let metaDiff = getDiffKey(diff, 'metadata');
    if (base.metadata && metaDiff) {
      this.metadata = createPatchDiffModel(base.metadata, metaDiff);
    } else {
      this.metadata = null;
    }
    if (this.metadata) {
      this.metadata.collapsible = true;
      this.metadata.collapsibleHeader = 'Notebook metadata changed';
      this.metadata.startCollapsed = true;
    }
    // The notebook metadata MIME type is used for determining the MIME type
    // of source cells, so store it easily accessible:
    try {
      this.mimetype = base.metadata.language_info.mimetype;
    } catch (e) {
      // missing metadata, guess python (probably old notebook)
      this.mimetype = 'text/python';
    }

    // Build cell diff models. Follows similar logic to patching code:
    this.cells = [];
    var take = 0;
    var skip = 0;
    for (var e of getDiffKey(diff, 'cells')) {
      var op = e.op;
      var index = e.key as number;

      // diff is sorted on index, so take any preceding cells as unchanged:
      for (var i=take; i < index; i++) {
        this.cells.push(createUnchangedCellDiffModel(
          base.cells[i], this.mimetype));


perty="og:url" content="https://analytics.vvhan.com/" />

<!DOCTYPE html>

  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />

  <meta name="description"
    content="Tinter is a simple design tool to generate color/hue variation of images with custom fine tuning. Change Hue Online without any privacy concerns, no server uploads." />
  <meta name="title"
    content="Tinter - Generate color image variations. Change hue online without server uploads. Privacy focused." />
  <title>Tinter - Generate color image variations. Change hue online</title>
  <meta property="og:type" content="website" />
  <meta property="og:url" content="https://www.tinter.uxie.io" />
  <meta property="og:title"
    content="Tinter - Generate color image variations. Change hue online without server uploads. Privacy focused." />
  <meta property="og:description"
    content="Tinter is a simple design tool to generate color/hue variation of images with custom fine tuning. Change Hue Online without any privacy concerns, no server uploads. Generate monoTone Images" />
  <meta property="og:image" content="https://i.ibb.co/YRZrTyR/Screenshot-2021-06-11-at-3-20-21-AM.png" />
  <meta property="twitter:card" content="Tinter (Uxie.io). Generate color variation of Images." />
  <meta property="twitter:url" content="https://www.tinter.uxie.io" />
  <meta property="twitter:title"
    content="Tinter (Uxie.io). Generate color variation of Images. Change hue online (privately)." />
  <meta property="twitter:description"
    content="Tinter is a simple design tool to generate color/hue variation of images with custom fine tuning. Change Hue Online without any privacy concerns, no server uploads. Generate monoTone Images" />
  <meta property="twitter:image" content="./assets/ss.jpeg" />
  <link rel="preconnect" href="https://fonts.gstatic.com" />
  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@500;600;700&display=swap" rel="stylesheet" />


isXposedEnvironment } ?: HookApiProperty.type(YukiXposedModuleStatus.executorName)

            /**
             * 获取当前 Hook Framework 的 API 版本
             *
             * - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
             * @return [Int] 无法获取会返回 -1
             */
            val apiLevel get() = HookApiProperty.apiLevel.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorApiLevel

            /**
             * 获取当前 Hook Framework 版本名称
             *
             * - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
             * @return [String] 无法获取会返回 unknown - 不支持会返回 unsupported
             */
            val versionName get() = HookApiProperty.versionName.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorVersionName

            /**
             * 获取当前 Hook Framework 版本号
             *
             * - 在模块环境中需要启用 [InjectYukiHookWithXposed.isUsingXposedModuleStatus]
             * @return [Int] 无法获取会返回 -1 - 不支持会返回 0
             */
            val versionCode get() = HookApiProperty.versionCode.takeIf { isXposedEnvironment } ?: YukiXposedModuleStatus.executorVersionCode
        }
    }

    /**
     * 配置 [YukiHookAPI]
     */
    object Configs {

        /**
         * 配置 [YLog.Configs] 相关参数
         * @param initiate 方法体
         */
        inline fun debugLog(initiate: YLog.Configs.() -> Unit) = YLog.Configs.apply(initiate).build()

        /**
         * 这是一个调试日志的全局标识
         *
         * - 此方法已弃用 - 在之后的版本中将直接被删除
         *
         * - 请现在迁移到 [debugLog] 并使用 [YLog.Configs.tag]
         */
        @Deprecated(message = "请使用新方式来实现此功能")
        var debugTag
            get() = YLog.Configs.tag
            set(value) {
                YLog.Configs.tag = value
            }

        /**
         * 是否启用调试模式 - 默认不启用
         *
         * 启用后将交由日志输出管理器打印详细 Hook 日志到控制台
         *
         * 当 [YLog.Configs.isEnable] 关闭后 [isDebug] 也将同时关闭
         */
        var isDebug = false

        /**
         * 是否启用调试日志的输出功能
         *
         * - 此方法已弃用 - 在之后的版本中将直接被删除
         *
         * - 请现在迁移到 [debugLog] 并使用 [YLog.Configs.isEnable]
         */
        @Deprecated(message = "请使用新方式来实现此功能")
        var isAllowPrintingLogs
            get() = YLog.Configs.isEnable
            set(value) {
                YLog.Configs.isEnable = value
            }

        /**
         * 是否启用 [YukiHookPrefsBridge] 的键值缓存功能
         *
         * - 此方法已弃用 - 在之后的版本中将直接被删除
         *
         * - 请现在迁移到 [isEnablePrefsBridgeCache]
         */
        @Deprecated(message = "请使用新的命名方法


 2;
    let res = vec![0, 0];
    assert_eq!(Solution::num_moves_stones(a, b, c), res);
    let a = 3;
    let b = 5;
    let c = 1;
    let res = vec![1, 2];
    assert_eq!(Solution::num_moves_stones(a, b, c), res);
}
<filename>src/pcc.rs<gh_stars>0
#[doc = r"Register block"]
#[repr(C)]
pub struct RegisterBlock {
    _reserved0: [u8; 128usize],
    #[doc = "0x80 - PCC FTFC Register"]
    pub pcc_ftfc: PCC_FTFC,
    #[doc = "0x84 - PCC DMAMUX Register"]
    pub pcc_dmamux: PCC_DMAMUX,
    _reserved2: [u8; 8usize],
    #[doc = "0x90 - PCC FlexCAN0 Register"]
    pub pcc_flex_can0: PCC_FLEXCAN0,
    #[doc = "0x94 - PCC FlexCAN1 Register"]
    pub pcc_flex_can1: PCC_FLEXCAN1,
    #[doc = "0x98 - PCC FTM3 Register"]
    pub pcc_ftm3: PCC_FTM3,
    #[doc = "0x9c - PCC ADC1 Register"]
    pub pcc_adc1: PCC_ADC1,
    _reserved6: [u8; 12usize],
    #[doc = "0xac - PCC FlexCAN2 Register"]
    pub pcc_flex_can2: PCC_FLEXCAN2,
    #[doc = "0xb0 - PCC LPSPI0 Register"]
    pub pcc_lpspi0: PCC_LPSPI0,
    #[doc = "0xb4 - PCC LPSPI1 Register"]
    pub pcc_lpspi1: PCC_LPSPI1,
    #[doc = "0xb8 - PCC LPSPI2 Register"]
    pub pcc_lpspi2: PCC_LPSPI2,
    _reserved10: [u8; 8usize],
    #[doc = "0xc4 - PCC PDB1 Register"]
    pub pcc_pdb1: PCC_PDB1,
    #[doc = "0xc8 - PCC CRC Register"]
    pub pcc_crc: PCC_CRC,
    _reserved12: [u8; 12usize],
    #[doc = "0xd8 - PCC PDB0 Register"]
    pub pcc_pdb0: PCC_PDB0,
    #[doc = "0xdc - PCC LPIT Register"]
    pub pcc_lpit: PCC_LPIT,
    #[doc = "0xe0 - PCC FTM0 Register"]
    pub pcc_ftm0: PCC_FTM0,
    #[doc = "0xe4 - PCC FTM1 Register"]
    pub pcc_ftm1: PCC_FTM1,
    #[doc = "0xe8 - PCC FTM2 Register"]
    pub pcc_ftm2: PCC_FTM2,
    #[doc = "0xec - PCC ADC0 Register"]
    pub pcc_adc0: PCC_ADC0,
    _reserved18: [u8; 4usize],
    #[doc = "0xf4 - PCC RTC Register"]
    pub pcc_rtc: PCC_RTC,
    _reserved19: [u8; 8usize],
    #[doc = "0x100 - PCC LPTMR0 Register"]
    pub pcc_lptmr0: PCC_LPTMR0,
    _reserved20: [u8; 32usize],
    #[doc = "0x124 - PCC PORTA Register"]
    pub pcc_porta: PCC_PORTA,
    #[doc = "0x128 - PCC PORTB Register"]
    pub pcc_portb: PCC_PORTB,
    #[doc = "0x12c - PCC PORTC Register"]
    pub pcc_portc: PCC_PORTC,
    #[doc = "0x130 - PCC PORTD Register"]
    pub pcc_portd: PCC_PORTD,
    #[doc = "0x134 - PCC PORTE Register"]
    pub pcc_porte: PCC_PORTE,
    _reserved25: [u8; 48usize],
    #[doc = "0x168 - PCC FlexIO Register"]


utterDoor
	ld a,$01
	jr z,@end
	xor a
	jr @end

; If trigger is inactive, close the door.
@triggerInactive:
	call @checkTileCollision
	ld a,$02
	jr z,@end
	xor a
@end:
	ld (wTmpcfc0.normal.doorControllerState),a
	ret

;;
; @param[out]	zflag	Set if the tile at this object's position is the expected shutter
;			door (the one facing the correct direction)
@checkTileIsShutterDoor:
	ld e,Interaction.angle
	ld a,(de)
	sub $10
	srl a
	ld hl,@tileIndices
	rst_addAToHl
	ld e,Interaction.var3e
	ld a,(de)
	ld c,a
	ld b,>wRoomLayout
	ld a,(bc)
	cp (hl)
	ret

@tileIndices: ; Tile indices for shutter doors
	.db $78 $79 $7a $7b

;;
; @param[out]	zflag	Set if collisions at this object's position are 0
@checkTileCollision:
	ld e,Interaction.var3e
	ld a,(de)
	ld c,a
	ld b,>wRoomCollisions
	ld a,(bc)
	or a
	ret

;;
; Set wTmpcfc0.normal.doorControllerState to:
;   $01 if Link is on a minecart which has collided with the door
;   $00 otherwise
doorController_checkMinecartCollidedWithDoor:
	xor a
	ld (wTmpcfc0.normal.doorControllerState),a
	ld a,(wLinkObjectIndex)
	rrca
	ret nc
	call objectCheckCollidedWithLink_ignoreZ
	ret nc
	ld a,$01
	ld (wTmpcfc0.normal.doorControllerState),a
	ret

;;
; Set wTmpcfc0.normal.doorControllerState to:
;   $01 if the tile at this position is a horizontal or vertical track
;   $00 otherwise
doorController_checkTileIsMinecartTrack:
	ld e,Interaction.var3e
	ld a,(de)
	ld c,a
	ld b,>wRoomLayout
	ld a,(bc)
	cp TILEINDEX_TRACK_HORIZONTAL
	ld b,$01
	jr z,+
	cp TILEINDEX_TRACK_VERTICAL
	jr z,+
	dec b
+
	ld a,b
	ld (wTmpcfc0.normal.doorControllerState),a
	ret

;;
; Compares [wNumTorchesLit] with [Interaction.speed]. Sets [wTmpcec0] to $01 if they're
; equal, $00 otherwise.
doorController_checkEnoughTorchesLit:
	ld a,(wNumTorchesLit)
	ld b,a
	ld e,Interaction.speed
	ld a,(de)
	cp b
	ld a,$01
	jr z,+
	dec a
+
	ld (wTmpcec0),a
	ret

; ==================================================================================================
; INTERAC_SHOPKEEPER
; ==================================================================================================

;;
shopkeeper_take10Rupees:
	ld a,RUPEEVAL_10
	jp removeRupeeValue

.ends

.ifdef ROM_SEASONS
	.include "code/loadTreasureData.s"
.endif

m_section_free Bank_15_2 NAMESPACE scriptHelp

.ifdef ROM_SEASONS

createBossDeathExplosion:
	call getFreePartSlot
	ret nz
	ld (hl),PART_BOSS_DEATH_EXPLOSION
	jp objectCopyPosition
.endif

; ==================================================================================================
; INTERAC_MOVING_PLATFORM
; ==================================================================================================

;;


5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))$")

    init {
        var m: Method? = null
        try {
            m = InetAddress::class.java.getMethod("parseNumericAddress", String::class.java)
        } catch (_: Exception) {
        }
        PARSER_METHOD = m
    }

    /**
     * Parses a numeric IPv4 or IPv6 address without performing any DNS lookups.
     *
     * @param address a string representing the IP address
     * @return an instance of [Inet4Address] or [Inet6Address], as appropriate
     */
    @Throws(ParseException::class)
    fun parse(address: String): InetAddress {
        if (address.isEmpty()) {
            throw ParseException(InetAddress::class.java, address, "Empty address")
        }
        try {
            return when {
                Build.VERSION.SDK_INT >= 29 -> InetAddresses.parseNumericAddress(address)
                PARSER_METHOD != null -> PARSER_METHOD?.invoke(null, address) as InetAddress
                else -> throw NoSuchMethodException("parseNumericAddress")
            }
        } catch (e: IllegalArgumentException) {
            throw ParseException(InetAddress::class.java, address, e)
        } catch (e: Exception) {
            val cause = e.cause
            // Re-throw parsing exceptions with the original type, as callers might try to catch
            // them. On the other hand, callers cannot be expected to handle reflection failures.
            if (cause is IllegalArgumentException) {
                throw ParseException(InetAddress::class.java, address, cause)
            }
            try {
                if (WONT_TOUCH_RESOLVER.matcher(address).matches()) {
                    return InetAddress.getByName(address)
                } else {
                    throw ParseException(InetAddress::class.java, address, "Not an IP address")
                }
            } catch (f: UnknownHostException) {
                throw ParseException(InetAddress::class.java, address, f)
            }
        }
    }
}
package com.mshdabiola.playnotepad

import android.graphics.Color
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.DisposableEffect
import androidx.com


ents   // 用于存放组件
   --page    //页面组件，由vue-router引入
   --router  //路由
   --store   // 数据流管理
   main.js   //入口文件
   app.vue   //主组件
 --static   //静态文件目录
 .babelrc
 .gitignore  //git忽略上传文件
 index.html  //静态文件入口
 package.json
```

2. main.js
入口文件，主要作用是初始化vue实例并使用需要的插件

```
  import Vue from 'vue'
  import router from './router/router'
  import store from './store/store'

  Vue.config.debug = true  //开启debug模式
  window.log = console.log
  let data = {
    router,
   store
}
 new Vue(data).$mount('#app')    //创建一个app实例，并且挂载到选择符#app匹配的元素上   在根目录html里面
```

 挂载到#app ，假如new vue 的时候，有显示的 el 属性
```
let data = {
  el:'#app',
  router,
  store
}
```
则无须手动挂载到选择符#app匹配的元素上

3. app.vue

app.vue是我们的主组件，所有页面都是在App.vue下进行切换的,由于app.vue在所有页面都有，我们将会在app.vue上面写一些初始化全局方法。

考虑到 组件 header，footer，loading动画基本整个项目都会使用到，app.vue代码如下

```
  <template>
    <div class="com-app">
      <com-header></com-header>
      <transition :name="transitionName">
        <router-view class="child-view"></router-view>
      </transition>
      <com-footer v-show="isFooter"></com-footer>
      <com-loading v-show="loading"></com-loading>
   </div>
 </template>
```
由于footer，loading在整个项目中会频繁地改变，故v-show
```
v-if       如果条件为false，它什么也不做，加载速度较快。当条件为真时，v-if 才会真正编译渲染页面结构
v-show 渲染页面结构后，通过 "display:none" 控制元素状态
```

4. router    根据不同路由跳转目录,按需加载相应的组件

```
  const routes = [
    {
      path: '/',
      component: App,
      children: [
        {path: '/index/:type', name: 'index', component: Index},
        {path: '/home', name: 'home', component: Home},
        {path: '/HomeUserInfo/:uid', name: 'homeUserInfo', component: HomeUserInfo},
        {path: '/article/:id', name: 'article', component: Article},
       {path: '/addmsg', name: 'addMsg', component: AddMsg},
       {


ptions")
        .put(AnonymousTag, "more")
        .endArray()
        .endStructure()
        .validateTlv()
        .getEncoded()
    val json =
      """
      {
        "100000:ARRAY-STRING" : [
          "ABC",
          "Options",
          "more"
        ]
      }
      """

    checkValidConversion(json, encoding)
  }

  @Test
  fun convertArray_boolean() {
    // Array of Booleans: [true, false, false]
    val encoding =
      TlvWriter()
        .startStructure(AnonymousTag)
        .startArray(ContextSpecificTag(255))
        .put(AnonymousTag, true)
        .put(AnonymousTag, false)
        .put(AnonymousTag, false)
        .endArray()
        .endStructure()
        .validateTlv()
        .getEncoded()
    val json =
      """
      {
        "255:ARRAY-BOOL" : [
          true,
          false,
          false
        ]
      }
      """

    checkValidConversion(json, encoding)
  }

  @Test
  fun convertArray_null() {
    // Array of Nulls: [null, null]
    val encoding =
      TlvWriter()
        .startStructure(AnonymousTag)
        .startArray(ContextSpecificTag(1))
        .putNull(AnonymousTag)
        .putNull(AnonymousTag)
        .endArray()
        .endStructure()
        .validateTlv()
        .getEncoded()
    val json =
      """
      {
        "1:ARRAY-NULL" : [
          null,
          null
        ]
      }
      """

    checkValidConversion(json, encoding)
  }

  @Test
  fun convertArray_boolean_throwsIllegalArgumentException() {
    // Array of bools: error type doesn't match
    val json =
      """
      {
        "value:1:ARRAY-BOOL" : [
          "yes",
          "no"
        ]
      }
      """

    // Throws exception because subtype encoded in the Json key (Boolean) doesn't match the
    // String
    // type of the elements in the array
    assertFailsWith<IllegalArgumentException> { TlvWriter().fromJsonString(json) }
  }

  @Test
  fun convertArray_uint_throwsIllegalArgumentException() {
    // Array of unsigned integers: error type doesn't match
    val json =
      """
      {
        "value:1:ARRAY-UINT" : [
          "yes",
          "no"
        ]
      }
      """

    // Throws exception because subtype encoded in the Json key (Boolean) doesn't match the
    // String
    // type of the elements in the array
    assertFailsWith<IllegalArgumentException> { TlvWriter().fromJsonString(json) }
  }

  @Test
  fun convertArray_float_throwsIllegalArgumentException() {
    // Array of floats: error type doesn't match
    val json =
      """
      {
        "1:ARRAY-FLOAT" : [
          {
            "1" : 22,
            "2" : 23
          }
        ]
      }
      """

    // Throws exception because subtype encoded in the Json key (Float) doesn't match the
    // Structure
    // type of the elements in the array
    assertFailsWith<IllegalArgumentException> { TlvWriter().fromJsonString(json) }
  }

  @Test
  fun convertArray_uint2_throwsIllegalArgumentException() {
    // Array of unsigned integer: error type doesn't match
    val json = """
      {
        "2:ARRAY-UINT" : [
          null
        ]
      }
      """

    // Throws exception because subtype encoded in the Json key (UInt) doesn't match the Null
    // type of the elements in the array
    assertFailsWith<IllegalArgumentException> {