N_FORWARD_SLASH,
				start: {
					index: 12,
					line: 1,
					offset: 13,
				},
				end: {
					index: 13,
					line: 1,
					offset: 14,
				},
			},
			{
				type: TOKEN_TAG_CLOSE,
				start: {
					index: 14,
					line: 1,
					offset: 15,
				},
				end: {
					index: 15,
					line: 1,
					offset: 16,
				},
			},
		]);
	});

	test('spaces, line breaks', () => {
		expect(
			tokenize('  \n\t\t<  button\n\n\t\t />   ', {lineDelimiter: '\n'})
		).toEqual([
			{
				type: TOKEN_TAG_OPEN,
				start: {
					index: 5,
					line: 2,
					offset: 3,
				},
				end: {
					index: 6,
					line: 2,
					offset: 4,
				},
			},
			{
				type: TOKEN_STRING,
				start: {
					index: 8,
					line: 2,
					offset: 6,
				},
				end: {
					index: 14,
					line: 2,
					offset: 12,
				},
				value: 'button',
			},
			{
				type: TOKEN_FORWARD_SLASH,
				start: {
					index: 19,
					line: 4,
					offset: 4,
				},
				end: {
					index: 20,
					line: 4,
					offset: 5,
				},
			},
			{
				type: TOKEN_TAG_CLOSE,
				start: {
					index: 20,
					line: 4,
					offset: 5,
				},
				end: {
					index: 21,
					line: 4,
					offset: 6,
				},
			},
		]);
	});

});

describe('tokenizer tags', () => {

	test('one self-closing, no attributes', () => {
		expect(
			tokenize('<button/>')
		).toMatchObject([
			{type: TOKEN_TAG_OPEN},
			{type: TOKEN_STRING, value: 'button'},
			{type: TOKEN_FORWARD_SLASH},
			{type: TOKEN_TAG_CLOSE},
		]);
	});

	test('two self-closing, no attributes', () => {
		expect(
			tokenize('<button/><i/>')
		).toMatchObject([
			{type: TOKEN_TAG_OPEN},
			{type: TOKEN_STRING, value: 'button'},
			{type: TOKEN_FORWARD_SLASH},
			{type: TOKEN_TAG_CLOSE},
			{type: TOKEN_TAG_OPEN},
			{type: TOKEN_STRING, value: 'i'},
			{type: TOKEN_FORWARD_SLASH},
			{type: TOKEN_TAG_CLOSE},
		]);
	});

	test('one self-closing, one attribute without value', () => {
		expect(
			tokenize('<button disabled/>')
		).toMatchObject([
			{type: TOKEN_TAG_OPEN},
			{type: TOKEN_STRING, value: 'button'},
			{type: TOKEN_STRING, value: 'disabled'},
			{type: TOKEN_FORWARD_SLASH},
			{type: TOKEN_TAG_CLOSE},
		]);
	});

	test('one self-closing, one attribute with value', () => {
		expect(
			tokenize('<button onclick=alert()/>')
		).toMatchObject([
			{type: TOKEN_TAG_OPEN},
			{type: TOKEN_STRING, value: 'button'},
			{type: TOKEN_STRING, value: 'onclick'},
			{type: TOKEN_ASSIGN},
			{type: TOKEN_STRING, value: 'alert()'},
			{type: TOKEN_FORWARD_SLASH},
			{


local features_layout = HLayout()
    local feature_items = {
        { image = 'homepage/modern.png',   text = 'Develop modern UI' },
        { image = 'homepage/lua_logo.png', text = 'Developed in lua' },
        { image = 'homepage/hundred.png',  text = 'Free for everyone' },
        { image = 'homepage/battery.png',  text = 'Batteries Included' },
        { image = 'homepage/bug.png',      text = 'Please report bugs' },
        { image = 'homepage/support.png',  text = '<strong>Support this project', highlight = true }
    }

    for _, item in ipairs(feature_items) do
        features_layout:addChild(WelcomeView.create_feature_card(
            images(item.image),
            item.text,
            item.highlight
        ))
    end

    return features_layout
end

function WelcomeView.create_feature_card(image_path, text, highlight)
    local card = GroupBox()
    local card_layout = VLayout()

    local image = Image(image_path)
    image:setImageAlignment('center')
    image:resizeImage(80, 80)

    local label = Label(text)
    label:setTextSize(9)
    label:setTextAlignment('center')

    if highlight then
        label:setTextColor('#307DE1')
    end

    card_layout:addChild(image)
    card_layout:addChild(label)
    card:setLayout(card_layout)

    return card
end

function WelcomeView.create_footer()
    local footer = Label('Built with LOVE from Malawi (warm heart of Africa)')
    footer:setBold(true)
    footer:setTextColor('#2979FF')
    footer:setTextSize(10)
    footer:setTextAlignment('hcenter', 'bottom')
    return footer
end

return WelcomeView


{
				throw new InvalidOperationException();
			}
		}

		/// <summary>
		/// Returns the key used to internationalize error messages
		/// </summary>
		/// <value></value>
		protected override string MessageKey
		{
			get { return MessageConstants.InvalidRangeMessage; }
		}

		private static void AssertValid(string max, string min)
		{
			if (String.IsNullOrEmpty(min) && String.IsNullOrEmpty(max))
			{
				throw new ArgumentException(
					"Both min and max were set in such as way that neither would be tested. At least one must be tested.");
			}
		}

		private static void AssertValid(int max, int min)
		{
			if (min == int.MinValue && max == int.MaxValue)
			{
				throw new ArgumentException(
					"Both min and max were set in such as way that neither would be tested. At least one must be tested.");
			}
			if (min > max)
			{
				throw new ArgumentException("The min parameter must be less than or equal to the max parameter.");
			}
			if (max < min)
			{
				throw new ArgumentException("The max parameter must be greater than or equal to the min parameter.");
			}
		}

		private static void AssertValid(decimal max, decimal min)
		{
			if (min == decimal.MinValue && max == decimal.MaxValue)
			{
				throw new ArgumentException(
					"Both min and max were set in such as way that neither would be tested. At least one must be tested.");
			}
			if (min > max)
			{
				throw new ArgumentException("The min parameter must be less than or equal to the max parameter.");
			}
			if (max < min)
			{
				throw new ArgumentException("The max parameter must be greater than or equal to the min parameter.");
			}
		}

		private static void AssertValid(DateTime max, DateTime min)
		{
			if (min == DateTime.MinValue && max == DateTime.MaxValue)
			{
				throw new ArgumentException(
					"Both min and max were set in such as way that neither would be tested. At least one must be tested.");
			}
			if (min > max)
			{
				throw new ArgumentException("The min parameter must be less than or equal to the max parameter.");
			}
			if (max < min)
			{
				throw new Argum


.file "libm_lgammaf.s"

// Copyright (c) 2002 - 2005, Intel Corporation
// All rights reserved.
//
// Contributed 2002 by the Intel Numerics Group, Intel Corporation
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * The name of Intel Corporation may not be used to endorse or promote
// products derived from this software without specific prior written
// permission.

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING,BUT NOT
// LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT,INDIRECT,INCIDENTAL,SPECIAL,
// EXEMPLARY,OR CONSEQUENTIAL DAMAGES (INCLUDING,BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,DATA,OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY,WHETHER IN CONTRACT,STRICT LIABILITY OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE,EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Intel Corporation is the author of this code,and requests that all
// problem reports or change requests be submitted to it directly at
// http://www.intel.com/software/products/opensource/libraries/num.htm.
//
//*********************************************************************
//
// History:
// 01/10/02  Initial version
// 01/25/02  Corrected parameter store, load, and tag for __libm_error_support
// 02/01/02  Added support of SIGN(GAMMA(x)) calculation
// 05/20/02  Cleaned up namespace and sf0 syntax
// 09/16/02  Improved accuracy on intervals reduced to [1;1.25]
// 10/21/02  Now it returns SIGN(GAMMA(x))=-1 for negative zero
// 02/10/03  Reordered header: .section, .global, .proc, .align
// 07/22/03  Reformatted some data tables
// 03/31/05  Reformatted delimiters between data tables
//
//*********************************************************************
//
//*********************************************************************
//
// Function: __libm_lgammaf(float x, int* signgam, int szsigngam)
// computes the principle value of the logarithm of the GAMMA function
// of x. Signum of GAMMA(x) is stored to memory starting at the address
// specified by the signgam.
//
//*********************************************************************
//
// Resources Used:
//
//    Floating-Point Registers: f6-f15
//                              f32-f97
//
//    General Purpose Registers:
//      r8-r11
//      r14-r30
//      r32-r36
//      r37-r40 (Used to pass arguments to error h


c',
	'term.c',
	'term_ascii.c',
	'term_ps.c',
	'term_tab.c',
	'term_tag.c',
	'tbl_term.c',

	'dbm.c',
	'dbm_map.c',
	'mansearch.c',

	'dba.c',
	'dba_array.c',
	'dba_read.c',
	'dba_write.c',
	'mandocdb.c',

	'libmandoc.a',
	'$builddir/pkg/openbsd/libbsd.a',
	'$builddir/pkg/zlib/libz.a',
})
file('bin/mandoc', '755', '$outdir/mandoc')
for _, cmd in ipairs{'apropos', 'man', 'whatis', 'makewhatis'} do
	sym('bin/'..cmd, 'mandoc')
end

exe('demandoc', {
	'demandoc.c',
	'libmandoc.a',
	'$builddir/pkg/openbsd/libbsd.a',
	'$builddir/pkg/zlib/libz.a',
})
file('bin/demandoc', '755', '$outdir/demandoc')

man{
	'mandoc.1',
	'demandoc.1',
	'man.1',
	'apropos.1',

	'man.conf.5',
	'mandoc.db.5',

	'man.7',
	'mdoc.7',
	'roff.7',
	'eqn.7',
	'tbl.7',
	'mandoc_char.7',

	'makewhatis.8',
}
sym('share/man/man1/whatis.1.gz', 'apropos.1.gz')

fetch 'curl'


2: "\f0ac";
$moon-waning-crescent-3: "\f0ad";
$moon-waning-crescent-4: "\f0ae";
$moon-waning-crescent-5: "\f0af";
$moon-waning-crescent-6: "\f0b0";
$moon-alt-new: "\f0eb";
$moon-alt-waxing-cresent-1: "\f0d0";
$moon-alt-waxing-cresent-2: "\f0d1";
$moon-alt-waxing-cresent-3: "\f0d2";
$moon-alt-waxing-cresent-4: "\f0d3";
$moon-alt-waxing-cresent-5: "\f0d4";
$moon-alt-waxing-cresent-6: "\f0d5";
$moon-alt-first-quarter: "\f0d6";
$moon-alt-waxing-gibbous-1: "\f0d7";
$moon-alt-waxing-gibbous-2: "\f0d8";
$moon-alt-waxing-gibbous-3: "\f0d9";
$moon-alt-waxing-gibbous-4: "\f0da";
$moon-alt-waxing-gibbous-5: "\f0db";
$moon-alt-waxing-gibbous-6: "\f0dc";
$moon-alt-full: "\f0dd";
$moon-alt-waning-gibbous-1: "\f0de";
$moon-alt-waning-gibbous-2: "\f0df";
$moon-alt-waning-gibbous-3: "\f0e0";
$moon-alt-waning-gibbous-4: "\f0e1";
$moon-alt-waning-gibbous-5: "\f0e2";
$moon-alt-waning-gibbous-6: "\f0e3";
$moon-alt-third-quarter: "\f0e4";
$moon-alt-waning-crescent-1: "\f0e5";
$moon-alt-waning-crescent-2: "\f0e6";
$moon-alt-waning-crescent-3: "\f0e7";
$moon-alt-waning-crescent-4: "\f0e8";
$moon-alt-waning-crescent-5: "\f0e9";
$moon-alt-waning-crescent-6: "\f0ea";/*!
 * SmartAdmin v1.5.1 ()
 * Copyright 2011-2014
 *//*!
 * Bootstrap v3.3.1.1
 *
 * Copyright 2013 Twitter, Inc
 * Licensed under the Apache License v2.0
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Designed and built with all the love in the world by @mdo and @fat.
 *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearan


d, address);
                double d2 = Double.parseDouble(s);
                if (d != d2) {
                    String message = "" + (d - d2);
                    assertEquals(message, d, d2, 0);
                }
            }
            // this is called unless the test is about to die
            OS.memory().freeMemory(address, size);
        });
    }

    @Test
    public void testSequential() {
        IntStream.range(0, 300).parallel().forEach(t -> {
            // odd numbers have the most precision error
            int size = max + 8;
            long address = OS.memory().allocate(size);
            // double only has 16-17 digits of accuracy so 1 + x/1e15 has 16 digits.
            double n = 1e15;
            for (int i = 1; i < 10_000; i += 2) {
                // multiply by 10191 to traverse the space.
                long l = (t * 10_000L + i) * 10191L + (long) n;
                double d = l / n;
                String s = appendDoubleToString(d, address);
                double d2 = Double.parseDouble(s);
                if (d != d2)
                    assertEquals("" + (d - d2), d, d2, 0);
            }
            // this is called unless the test is about to die
            OS.memory().freeMemory(address, size);
        });
    }

    public String appendDoubleToString(double value, long address) {
        OS.memory().writeLong(address + max, 0L);
        final long endAddress = UnsafeText.appendDouble(address, value);
        if (endAddress > address + max)
            fail("value: " + value + " length: " + (endAddress - address));
        long end = OS.memory().readLong(address + max);
        if (end != 0L)
            fail("Overwrite: " + Long.toHexString(end));
        return LongStream.range(address, endAddress)
                .mapToInt(addr -> OS.memory().readByte( addr))
                .mapToObj(c -> (char) c)
                .reduce(new StringBuilder(), StringBuilder::append, StringBuilder::append)
                .toString();
    }
}
/*
 * Copyright (c) 2016-2022 chronicle.software
 *
 *     https://chronicle.software
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.openhft.chronicle.bytes;

import net.openhft.chronicle.core.annotation.NonNegative;

/**
 * Functional interface defining a listener that gets invoked when a new chunk is added to a {@link MappedFile} in {@link MappedBytes}.
 *

 * This listener provides a mechanism to perform actions or react to events whenever a new chunk is added to a {@link MappedFile}.
 *

 * Implementations should define the {@link #onNewChunk(String, int, long)} method to handle the event.
 */
@FunctionalInterface
public interface NewChunkListener {

    /**
     * This method is invoked when a new chunk is added to a {@link MappedFile} in {@link MappedBytes}.
     *
     * @param filename


aes-256-cbc -pass pass:"密码密码密码" -base64
```

# Containerd 学习笔记

为什么要学习 Containerd 呢？因为在新版的 K8s 中，已经不支持 Docker 了，所以就有必要去学学 Containerd 的知识。

实际上就简单使用的话，或者说入门的时候用的话，Containerd 和 Docker 都是差不多的。都是在捣鼓 image、containerd 这些东西。

## 1. Containerd 的配置

1. 生成默认配置文件

    ```bash
    containerd config default > /etc/containerd/config.toml
    ```

2. 修改配置文件中的 `SystemCgroup` 和 `sandbox_image` 这些东西（如果有必要）。

    ```bash
    # 如果要配置 K8s 的话，就要修改这里
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
      SystemdCgroup = true
    # 如果容器启动不起来，爆出 sandbox_image 之类的东西，可以修改这里
      sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

    # 如果上面修改了哪里，一定要重启一下 containerd
    systemctl restart containerd
    ```

3. 修改配置文件中的 `config_path` 。（这里修改之后，用 ctr 命令还是不会生效，不知道是为啥）

    ```bash
    config_path = "/etc/containerd/certs.d"
    ```

4. 给 `/etc/containerd/certs.d` 里面加点镜像的地址。

    ```bash
    # docker hub镜像加速
    mkdir -p /etc/containerd/certs.d/docker.io
    cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
    server = "https://docker.io"
    [host."https://1ecf599359e64520bd04701e6d7184e8.mirror.swr.myhuaweicloud.com"]
      capabilities = ["pull", "resolve"]

    [host."https://le2c3l3b.mirror.aliyuncs.com"]
      capabilities = ["pull", "resolve"]

    [host."https://docker.m.daocloud.io"]
      capabilities = ["pull", "resolve"]

    [host."https://reg-mirror.qiniu.com"]
      capabilities = ["pull", "resolve"]

    [host."https://registry.docker-cn.com"]
      capabilities = ["pull", "resolve"]

    [host."http://hub-mirror.c.163.com"]
      capabilities = ["pull", "resolve"]

    EOF

    # registry.k8s.io镜像加速
    mkdir -p /etc/containerd/certs.d/registry.k8s.io
    tee /etc/containerd/certs.d/registry.k8s.io/hosts.toml << 'EOF'
    server = "https://registry.k8s.io"

    [host."https://k8s.m.daocloud.io"]
      capabilities = ["pull", "resolve", "push"]
    EOF

    # docker.elastic.co镜像加速
    mkdir -p /etc/containerd/certs.d/docker.elastic.co
    tee /etc/containerd/certs.d/docker.elastic.co/hosts.toml << 'EOF'
    server = "https://docker.elastic.co"

    [host."https://elastic.m.daocloud.io"]
      capabilities = ["pull", "resolve", "push"]
    EO


               on txs_by_address.address = address.id
                WHERE
                    tx=?1 AND
                    address.address=?2
                ",
                params![tx_rowid, addr_dest_str],
                |row| row.get(0),
            )
            .unwrap();

        assert!(tx_by_address_2 > 0);
    }

    #[test]
    fn test_transactions_by_address() {
        let mut conn = Connection::open(":memory:").unwrap();
        prepare_schema(&conn).unwrap();

        let mut utxos = BTreeMap::new();

        let addr_str = "Ae2tdPwUPEZKmwoy3AU3cXb5Chnasj6mvVNxV1H11997q3VW5ihbSfQwGpm";
        let bytes = base58::decode(addr_str).unwrap();
        let address = ExtendedAddr::try_from_slice(&bytes).unwrap();
        let id = hash::Blake2b256::new(&[0]);

        let value = 10000;

        utxos.insert(
            TxoPointer { id, index: 0 },
            TxOut {
                address: address.clone(),
                value: Coin::new(value).unwrap(),
            },
        );

        let initial = HeaderHash::from_str(
            "ae443ffffe52cc29de83312d2819b3955fc306ce65ae6aa5b26f1d3c76e91842",
        )
        .unwrap();
        apply_initial_state(&mut conn, &utxos).unwrap();

        let mut tx = Tx::new();

        let input = TxoPointer { id, index: 0 };

        let addr_dest_str = "<KEY>";
        let address_dest =
            ExtendedAddr::try_from_slice(&base58::decode(addr_dest_str).unwrap()).unwrap();

        let output = TxOut {
            address: address_dest.clone(),
            value: Coin::new(5000).unwrap(),
        };

        let rest = TxOut {
            address: address.clone(),
            value: Coin::new(5000).unwrap(),
        };

        tx.add_input(input);
        tx.add_output(output);
        tx.add_output(rest);

        insert_tx(&mut conn, tx.clone()).unwrap();

        let transactions = transactions_of(&conn, address.clone()).unwrap();

        let transaction1 = Transaction {
            txid: format!("{}", id),
            inputs: vec![],
            outputs: vec![Output {
                value: 10000,
                address: format!("{}", address.clone()),
            }],
        };

        assert!(transactions
            .iter()
            .any(|transaction| { transaction == &transaction1 }));

        let transaction2 = Transaction {
            txid: format!("{}", tx.id()),
            inputs: vec![Input {
                id: format!("{}", id),
                index: 0,
            }],
            outputs: vec![
                Output {
                    address: format!("{}", address_dest.clone()),
                    value: 5000,
                },
                Output {
                    address: format!("{}", address.clone()),
                    value: 5000,
                },
            ],
        };

        assert!(transactions
            .iter()
            .any(|transaction| { transaction == &transaction2 }));
    }
}
<reponame>falaosu/chip8emu
mod alloc;
mod cpu;
mod display;
mod keypad;
mod memory;
mod num;
mod opcode;
mod register;
mod stack;
mod timer;

pub use cpu::{Cpu, CpuState};
pub use display::HEIGHT as DISPLAY_HEIGHT;
pub use display::WIDTH as DISPLAY_WIDTH;
pub use keypad::{KeyCode, KeyState};
pub use memory::LoadError;
<reponame>Jelenkee/aoc2021
use std::collections::HashMap;

#[path = "../util.rs"]
mod util;

fn main() {
    let mut vec: Vec<String> = util::read_file("07.txt");
    vec = vec.


:case m.PARENT:case m.TOP:return!0}}function c(e,t){(0,u.deprecated)("isValidUrl(), please use createValidAbsoluteUrl() instead.");var r=t?"http://example.com":null;return null!==(0,u.createValidAbsoluteUrl)(e,r)}Object.defineProperty(t,"__esModule",{value:!0}),t.DOMCMapReaderFactory=t.DOMCanvasFactory=t.DEFAULT_LINK_REL=t.getDefaultSetting=t.LinkTarget=t.getFilenameFromUrl=t.isValidUrl=t.isExternalLinkTargetSet=t.addLinkAttributes=t.RenderingCancelledException=t.CustomStyle=void 0;var l=function(){function e(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),u=r(0),d="noopener noreferrer nofollow",h=function(){function e(){n(this,e)}return l(e,[{key:"create",value:function(e,t){(0,u.assert)(e>0&&t>0,"invalid canvas size");var r=document.createElement("canvas"),n=r.getContext("2d");return r.width=e,r.height=t,{canvas:r,context:n}}},{key:"reset",value:function(e,t,r){(0,u.assert)(e.canvas,"canvas is not specified"),(0,u.assert)(t>0&&r>0,"invalid canvas size"),e.canvas.width=t,e.canvas.height=r}},{key:"destroy",value:function(e){(0,u.assert)(e.canvas,"canvas is not specified"),e.canvas.width=0,e.canvas.height=0,e.canvas=null,e.context=null}}]),e}(),f=function(){function e(t){var r=t.baseUrl,i=void 0===r?null:r,a=t.isCompressed,o=void 0!==a&&a;n(this,e),this.baseUrl=i,this.isCompressed=o}return l(e,[{key:"fetch",value:function(e){var t=this,r=e.name;return r?new Promise(function(e,n){var i=t.baseUrl+r+(t.isCompressed?".bcmap":""),a=new XMLHttpRequest;a.open("GET",i,!0),t.isCompressed&&(a.responseType="arraybuffer"),a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){if(200===a.status||0===a.status){var r=void 0;if(t.isCompressed&&a.response?r=new Uint8Array(a.response):!t.isCompressed&&a.responseText&&(r=(0,u.stringToBytes)(a.responseText)),r)return void e({cMapData:r,compressionType:t.isCompressed?u.CMapCompressionType.BINARY:u.CMapCompressionType.NONE})}n(new Error("Unable to load "+(t.isCompressed?"binary ":"")+"CMap at: "+i))}},a.send(null)}):Promise.reject(new Error("CMap name must be specified."))}}]),e}(),p=function(){function e(){}var t=["ms","Moz","Webkit","O"],r=Object.create(null);return e.getProp=function(e,n){if(1===arguments.length&&"string"==typeof r[e])return r[e];n=n||document.documentElement;var i,a,o=n.style;if("string"==typeof o[e])return r[e]=e;a=e.charAt(0).toUpperCase()+e.slice(1);for(var s=0,c=t.length;s<c;s++)if(i=t[s]+a,"


estCardinalitySec, DigestCardinalityRaw:
		w = data_model.DigestCardinality
	case DigestUnique, DigestUniqueSec:
		w = data_model.DigestUnique
	}
	return data_model.DigestSelector{What: w, Argument: f}
}
// Code generated by the `ir/codegen` package. DO NOT EDIT.
package irutil

import (
	"fmt"
	"github.com/VKCOM/noverify/src/ir"
)

func NodeEqual(x, y ir.Node) bool {
	if x == nil || y == nil {
		return x == y
	}
	switch x := x.(type) {
	case *ir.AnonClassExpr:
		y, ok := y.(*ir.AnonClassExpr)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if !NodeSliceEqual(x.Args, y.Args) {
			return false
		}
		if !classEqual(x.Class, y.Class) {
			return false
		}
		return true
	case *ir.Argument:
		y, ok := y.(*ir.Argument)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if !NodeEqual(x.Name, y.Name) {
			return false
		}
		if !NodeEqual(x.Expr, y.Expr) {
			return false
		}
		if x.Variadic != y.Variadic {
			return false
		}
		if x.IsReference != y.IsReference {
			return false
		}
		return true
	case *ir.ArrayDimFetchExpr:
		y, ok := y.(*ir.ArrayDimFetchExpr)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if !NodeEqual(x.Variable, y.Variable) {
			return false
		}
		if !NodeEqual(x.Dim, y.Dim) {
			return false
		}
		if x.CurlyBrace != y.CurlyBrace {
			return false
		}
		return true
	case *ir.ArrayExpr:
		y, ok := y.(*ir.ArrayExpr)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if len(x.Items) != len(y.Items) {
			return false
		}
		for i := range x.Items {
			if !NodeEqual(x.Items[i], y.Items[i]) {
				return false
			}
		}
		if x.ShortSyntax != y.ShortSyntax {
			return false
		}
		return true
	case *ir.ArrayItemExpr:
		y, ok := y.(*ir.ArrayItemExpr)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if !NodeEqual(x.Key, y.Key) {
			return false
		}
		if !NodeEqual(x.Val, y.Val) {
			return false
		}
		if x.Unpack != y.Unpack {
			return false
		}
		return true
	case *ir.ArrowFunctionExpr:
		y, ok := y.(*ir.ArrowFunctionExpr)
		if !ok || x == nil || y == nil {
			return x == y
		}
		if len(x.AttrGroups) != len(y.AttrGroups) {
			return false
		}
		for i := range x.AttrGroups {
			if !NodeEqual(x.AttrGroups[i], y.AttrGroups[i]) {
				return false
			}
		}
		if !NodeSliceEqual(x.Params, y.Params) {
			return false
		}
		if !NodeEqual(x.ReturnType, y.ReturnType) {
			return false
		}
		if !NodeEqual(x.Expr, y.Expr) {
			return false
		}
		if x.ReturnsRef != y.ReturnsRef {
			return false
		}


	_enable_println: bool,
) -> GenesisConfig {
	// Pool config
	const MAX_PLAYER: u32 = 1000;
	let upfront_services = [
		(
			TicketLevel::Basic,
			SystemService::new(10_u32, Permill::from_percent(30), 5 * unit(GAKI)),
		),
		(
			TicketLevel::Medium,
			SystemService::new(10_u32, Permill::from_percent(50), 7 * unit(GAKI)),
		),
		(
			TicketLevel::Advance,
			SystemService::new(10_u32, Permill::from_percent(70), 10 * unit(GAKI)),
		),
	];
	let staking_services = [
		(
			TicketLevel::Basic,
			SystemService::new(10_u32, Permill::from_percent(30), 1000 * unit(GAKI)),
		),
		(
			TicketLevel::Medium,
			SystemService::new(10_u32, Permill::from_percent(50), 1500 * unit(GAKI)),
		),
		(
			TicketLevel::Advance,
			SystemService::new(10_u32, Permill::from_percent(70), 2000 * unit(GAKI)),
		),
	];
	const TIME_SERVICE: u128 = 10 * 60_000u128; // for testing
	let min_gas_price: U256 = U256::from(4_000_000_000_000u128);

	// pallet-faucet
	let faucet_amount: u128 = 1500 * unit(GAKI);

	GenesisConfig {
		system: SystemConfig {
			// Add Wasm runtime to storage.
			code: wasm_binary.to_vec(),
		},
		balances: BalancesConfig {
			// each genesis account hold 1M GAKI token
			balances: endowed_accounts
				.iter()
				.cloned()
				.map(|k| (k, 1_000_000 * unit(GAKI)))
				.collect(),
		},
		aura: AuraConfig {
			authorities: initial_authorities.iter().map(|x| (x.0.clone())).collect(),
		},
		grandpa: GrandpaConfig {
			authorities: initial_authorities
				.iter()
				.map(|x| (x.1.clone(), 1))
				.collect(),
		},
		sudo: SudoConfig {
			// Assign network admin rights.
			key: Some(root_key),
		},
		evm: EVMConfig {
			accounts: {
				let mut map = BTreeMap::new();
				map.insert(
					H160::from_slice(&hex_literal::hex!(
						"4e9A2Eee2caF9096161f9A5c3F0b0DE8f648AA11" //base
					)),
					fp_evm::GenesisAccount {
						nonce: U256::zero(),
						balance: U256::from(1_000_000 * unit(GAKI)),
						code: vec![],
						storage: std::collections::BTreeMap::new(),
					},
				);

				map.insert(
					H160::from_slice(&hex_literal::hex!(
						"F0B9EaA0fAaC58d5d4F3224958D75a5370672231"
					)),
					fp_evm::GenesisAccount {
						nonce: U256::zero(),
						balance: U256::from(1_000_000 * unit(GAKI)),
						code: vec![],
						storage: std::collections::BTreeMap::new(),
					},
				);

				map.insert(
					H160::from_slice(&hex_literal::hex!(
						"D910E83396231988F79df2f1175a90e15d26aB71"
					)),
					fp_evm::GenesisAccount {
						nonce: U256::zero(),
						balance: U256::from(1_000_000 * unit(GAKI)),
						code: vec![],
						storage: std::collections::BTreeMap::new(),
					},
				);
				map
			},
		},
		ethereum: EthereumConfig {},
		dynamic_fee: Default::default(),
		base_fee: Default::default(),
		upfront_pool: UpfrontPoolConfig {
			max_player: MAX_PLAYER,
			services: upfront_services,
		},
		staking_pool: StakingPoolConfig {
			services: staking_services,
		},
		faucet:


ta_abs_ref.publisher == 'The Authors. Published by Elsevier Ltd.'

def test_sciencedirect_link():
    assert ar_full.sciencedirect_link == 'https://www.sciencedirect.com/science/article/pii/S2949948823000112'
    assert ar_meta.sciencedirect_link == 'https://www.sciencedirect.com/science/article/pii/S1877050918308019'
    assert ar_meta_abs.sciencedirect_link == 'https://www.sciencedirect.com/science/article/pii/S0304387823001736'
    assert ar_meta_abs_ref.sciencedirect_link == 'https://www.sciencedirect.com/science/article/pii/S2352226722000630'

def test_self_link():
    assert ar_full.self_link == 'https://api.elsevier.com/content/article/pii/S2949948823000112'
    assert ar_meta.self_link == 'https://api.elsevier.com/content/article/pii/S1877050918308019'
    assert ar_meta_abs.self_link == 'https://api.elsevier.com/content/article/pii/S0304387823001736'
    assert ar_meta_abs_ref.sciencedirect_link == 'https://www.sciencedirect.com/science/article/pii/S2352226722000630'

def test_startingPage():
    assert ar_full.startingPage == '179'
    assert ar_meta.startingPage == '679'
    assert ar_meta_abs.startingPage == '103217'
    assert ar_meta_abs_ref.startingPage == '100412'

def test_subjects():
    assert ar_full.subjects == ['Artificial neural networks', 'Supply chain management']
    assert ar_meta.subjects == ['Convolution Neural Network', 'Deep Neural Network', 'Gradient Descent', 'ADAM']
    assert ar_meta_abs.subjects == ['Deforestation', 'Trade', 'Agricultural productivity', 'Technology', 'Soy', 'Brazil']
    assert ar_meta_abs_ref.subjects == ['Salt production', 'Earthen kiln', 'Ganges-Brahmaputra Delta', 'Sundarbans']

def test_title():
    assert ar_full.title == 'Artificial neural networks in supply chain management, a review'
    assert ar_meta.title == 'Conceptual Understanding of Convolutional Neural Network- A Deep Learning Approach '
    assert ar_meta_abs.title == 'The deforestation effects of trade and agricultural productivity in Brazil '
    assert ar_meta_abs_ref.title == 'Architecture and function of salt-producing kilns from the 8th to 18th century in the coastal Sundarbans mangrove forest, Central Ganges-Brahmaputra Delta, Bangladesh '

def test_url():
    assert ar_full.url == 'https://api.elsevier.com/content/article/pii/S2949948823000112'
    assert ar_meta.url == 'https://api.elsevier.com/content/article/pii/S1877050918308019'
    assert ar_meta_abs.url == 'https://api.elsevier.com/content/article/pii/S0304387823001736'
    assert ar_meta_abs_ref.url == 'https://api.elsevier.com/content/article/pii/S2352226722000630'

def test_volume():
    assert ar_full.volume == 1
    assert ar_meta.volume == 132
    assert ar_meta_abs.volume == 167
    assert ar_meta_abs_ref.volume == 32

def test__str__():
    expected  = 'Mohsen Soori, Behrooz Arezoo and Roza Dastres: "Artificial neural networks in supply chain management, a review", Journal of Economy and Technology, 1, pp. 179-196(2023). https://doi.org/10.1016/j.ject.2023.11.002.'
    assert str(ar_full) == expected


n;
            if (ex == null) return false;

            var root = GetRootMember(ex);
            if (root == null) return false;
            if (root.NodeType != ExpressionType.Parameter) return false;
            return true;
        }

        /// <summary>
        /// Obtains alias for nested table
        /// </summary>
        /// <param name="expr">Member expression in form of x.User.Order </param>
        /// <param name="takeDerived">Flag when we address to the column of the "parent" entity (from another table)</param>
        /// <returns></returns>
        public static string MakeNestedTableAlias(this MemberExpression expr, bool takeDerived)
        {
            Stack<string> path = new Stack<string>();
            if (takeDerived) path.Push("_d");
            var accessee = expr;
            var current = (Expression)expr;
            while (accessee != null)
            {

                path.Push(accessee.Member.Name);
                current = accessee.Expression;
                accessee = accessee.Expression as MemberExpression;
            }

            var pax = current as ParameterExpression;
            if (pax != null) path.Push(pax.Name);

            return string.Join("_", path);
        }

        public static VisitedQuery VisitStroke(this ParsedQuery q, Func<Type, bool> isEntity)
        {
            List<SqlQueryExpression> positioned = new List<SqlQueryExpression>();
            var visitor = new StrokeVisitor(q.InitialTableReferences, isEntity);

            foreach (var pe in q.Arguments)
            {
                visitor.Visit(pe.Expression);
                var sql = visitor.Retrieve();
                sql.IsTop = true;
                sql.Position = pe.Position;
                sql.Index = pe.Index;
                positioned.Add(sql);
            }

            return new VisitedQuery(q.QueryStructure, positioned.ToArray(), visitor.UsedTypes);
        }
    }
}


            name = "Bart",
            gender = "M",
            uint8 = 255,
            uint16 = 256,
            uint32 = 4294967295,
            int8_neg = -128,
            int8 = 127,
            int16_neg = -1000,
            int16 = 20000,
            int32 = 32456,
            int64= 17179869184,
            int64_neg= -17179869184,
            float = 0.0012,
            float_neg = - 112.8,
            double = 8589934592.13,
            double_neg = -8589934592.28,
            str = "ABCD",
            bigstr = big_str,
            positive = true,
            negative = false
          },
        {
            name = "Maggy",
            gender = "?"
        }
    }
}

local dict = {
    "name",
    "gender",
    "uint8",
    "uint16",
    "uint32",
    "int8_neg",
    "int8",
    "int16_neg",
    "int16",
    "int32",
    "int64",
    "int64_neg",
    "float",
    "float_neg",
    "double",
    "double_neg",
    "str",
    "bigstr",
    "positive",
    "negative",
    big_str
}

registerHandler {
    method = 'GET',
    path = 'genlpack',

	handler = function(req, resp, pathParams)
	    resp:setStatus(200)
        local lpackWriter = lpack.newLPackRespWriter(resp)
        if (req.params['dict'] == 'true') then
            lpackWriter:useDictionary(dict)
        end
        lpackWriter:write(mesg)
	end
}


�岐奈)
    - [2.1.3 克劳恩皮丝&纯狐](#克劳恩皮丝&纯狐)
    - [2.1.4 鬼人正邪&少名针妙丸](#鬼人正邪&少名针妙丸)

  - [2.2 敌方角色](#敌方角色)

    - [2.2.1 曲药赤蛊](#曲药赤蛊)
    - [2.2.2 逍遥山弥生](#逍遥山弥生)
    - [2.2.3 ？？？](#？？？)
    - [2.2.4 雾笛霞](#雾笛霞)

- [3 彩蛋角色设定](#彩蛋角色设定)

  - [3.1 玩家操纵的彩蛋角色](#玩家操纵的彩蛋角色)

    - [3.1.1 雾雨威&罗菈](#雾雨威&罗菈)

- [4 词条导航](#词条导航)

-------------------------------------------------------------------
○东方资志疏 ～ Immortal Immanuel

　背景故事与体验版角色设定

　　　　　　　沙包聚集地制作组 剧本与人设文案
　　　　　　　小田原シクラメン kotobahime 松月闲吟 路屋 辉针丸
　　　　　　　　　　　　　　　　　　　　　　　　　　　　2024/02/29

====================================================================
■ 0．设定的目录
====================================================================
　■ 1．故事背景
　■ 2．角色设定
　■ 3．彩蛋角色设定

-------------------------------------------------------------------

## 故事背景

<td class="tt-zh" lang=


Filename"
    "s\022\r\n\005count\030\001 \001(\005\022\r\n\005index\030\002 \001(\005\022\020\n\010filen"
    "ame\030\003 \001(\t\022\020\n\010nicename\030\004 \001(\t\"#\n\022CCSUsrMsg"
    "_ResetHud\022\r\n\005reset\030\001 \001(\010\"$\n\023CCSUsrMsg_Ga"
    "meTitle\022\r\n\005dummy\030\001 \001(\005\"\'\n\026CCSUsrMsg_Requ"
    "estState\022\r\n\005dummy\030\001 \001(\005\",\n\033CCSUsrMsg_Sto"
    "pSpectatorMode\022\r\n\005dummy\030\001 \001(\005\",\n\033CCSUsrM"
    "sg_DisconnectToLobby\022\r\n\005dummy\030\001 \001(\005\")\n\030C"
    "CSUsrMsg_WarmupHasEnded\022\r\n\005dummy\030\001 \001(\005\"%"
    "\n\024CCSUsrMsg_ClientInfo\022\r\n\005dummy\030\001 \001(\005\">\n"
    "\035CCSUsrMsg_ServerRankRevealAll\022\035\n\025second"
    "s_till_shutdown\030\001 \001(\005*\362\013\n\026ECstrike15User"
    "Messages\022\022\n\016CS_UM_VGUIMenu\020\001\022\020\n\014CS_UM_Ge"
    "iger\020\002\022\017\n\013CS_UM_Train\020\003\022\021\n\rCS_UM_HudText"
    "\020\004\022\021\n\rCS_UM_SayText\020\005\022\022\n\016CS_UM_SayText2\020"
    "\006\022\021\n\rCS_UM_TextMsg\020\007\022\020\n\014CS_UM_HudMsg\020\010\022\022"
    "\n\016CS_UM_ResetHud\020\t\022\023\n\017CS_UM_GameTitle\020\n\022"
    "\017\n\013CS_UM_Shake\020\014\022\016\n\nCS_UM_Fade\020\r\022\020\n\014CS_U"
    "M_Rumble\020\016\022\026\n\022CS_UM_CloseCaption\020\017\022\034\n\030CS"
    "_UM_CloseCaptionDirect\020\020\022\023\n\017CS_UM_SendAu"
    "dio\020\021\022\022\n\016CS_UM_RawAudio\020\022\022\023\n\017CS_UM_Voice"
    "Mask\020\023\022\026\n\022CS_UM_RequestState\020\024\022\020\n\014CS_UM_"
    "Damage\020\025\022\023\n\017CS_UM_RadioText\020\026\022\022\n\016CS_UM_H"
    "intText\020\027\022\025\n\021CS_UM_KeyHintText\020\030\022$\n CS_U"
    "M_ProcessSpottedEntityUpdate\020\031\022\026\n\022CS_UM_"
    "ReloadEffect\020\032\022\025\n\021CS_UM_AdjustMoney\020\033\022\031\n"
    "\025CS_UM_UpdateTeamMoney\020\034\022\033\n\027CS_UM_StopSp"
    "ectatorMode\020\035\022\021\n\rCS_UM_KillCam\020\036\022\032\n\026CS_U"
    "M_DesiredTimescale\020\037\022\032\n\026CS_UM_CurrentTim"
    "escale\020 \022\032\n\026CS_UM_Achie


                    waitForTerminate()]);
            }).then(result => {
                // terminate and connect again if the result is PASS
                cancelWait();
                const json = JSON.parse(result);
                if (json.test.status !== 0)
                    return json;

                // Check accessibility to window clients before terminating a presentation
                return getClientUrls().then(urls => {
                    assert_true(urls.length === clientUrls.length && urls.every((value, index) => { return clientUrls[index] === value}),
                        'A window client in a receiving user agent is not accessible to a service worker on a controlling user agent.');
                    const eventWatcher = new EventWatcher(t, connection, 'terminate');
                    connection.terminate();
                    return eventWatcher.wait_for('terminate');
                }).then(() => {
                    connection = null;
                    disableTimeout();
                    presentBtn.removeEventListener('click', main);
                    presentBtn.textContent = 'Continue Presentation Test';
                    presentBtn.disabled = false;
                    const eventWatcher = new EventWatcher(t, presentBtn, 'click');
                    return eventWatcher.wait_for('click');
                }).then(() => {
                    presentBtn.disabled = true;
                    return request.start();
                }).then(c => {
                    connection = c;
                    enableTimeout();
                    return stash.receive();
                }).then(result => {
                    return JSON.parse(result);
                });
            }).then(json => {
                if (json.test.status === 0) {
                    checkUpdates();
                    return checkIndexedDB(t)
                            .then(checkServiceWorkers)
                            .then(checkCaches);
                }
                else {
                    receiverStack = json.test.stack;
                    parseResult(json.test.message);
                }
            });
        });
    };
    presentBtn.addEventListener('click', main);
</script>
<!doctype html>
<html>
<meta charset="utf-8">
<title>Test SVGLength animation with invalid value: No spaces after number and unit.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/SVGAnimationTestCase-testharness.js"></script>

<svg>
</svg>

<script>
var rootSVGElement = document.querySelector("svg");
var epsilon = 1.0;

// Setup test document
var rect = createSVGElement("rect");
rect.setAttribute("id", "rect");
rect.setAttribute("x", "0");
rect.setAttribute("width", "100");
rect.setAttribute("height", "100");
rect.setAttribute("fill", "green");
rect.setAttribute("onclick", "executeTest()");

var animate = createSVGElement("animate");
animate.setAttribute("id", "animation");
animate.setAttribute("attributeName", "width");
animate.setAttribute("begin", "0s");
animate.setAttribute("dur", "4s");
animate.setAttribute("from", "100px   ERROR");
animate.setAttribute("to", "200px   ERROR");
rect.appendChild(animate);
rootSVGElement.appendChild(rect);

// Setup animation test
function sample1() {
    // Check initial/end conditions
    assert_approx_equals(rect.width.animVal.value, 100, epsilon);
    assert_equals(rect.width.baseVal.value, 100);
}

function sa


1},
        inputs = {},
        outputs = {radio.types.Float32.vector_from_array({-0.87692422, -0.94057548, -0.28096166, 0.74567568, 0.98617303, 0.81418091, -0.37292346, 0.54729342, -0.98323399, 0.78875053, -0.53218967, -0.35949659, 0.74250126, -0.80851328, -0.29790121, 0.61716038, 0.90398294, -0.31932005, -0.24881899, 0.87563676, -0.61211532, 0.07568578, -0.70661134, 0.04423284, -0.13742310, 0.69935882, 0.36195463, 0.18933365, -0.95853949, 0.55833787, -0.54738879, 0.38607007, 0.18489233, 0.30276534, 0.99162263, -0.58192092, 0.41763675, 0.48052940, 0.96635634, -0.23273408, -0.51821798, 0.59426612, -0.39194229, 0.03795001, 0.71404046, 0.73408616, -0.33628938, -0.43874690, -0.13765013, 0.29610172, -0.23258737, -0.12760250, 0.84573746, -0.60872209, -0.71034926, -0.52007955, -0.21285616, -0.80925179, 0.05455111, -0.91135466, -0.44303086, 0.49497283, 0.01263081, -0.87986869, 0.72376645, -0.75090975, 0.90168411, 0.61038667, -0.26915249, -0.69908118, -0.95049274, 0.27575928, -0.03383679, 0.17924641, -0.81628692, 0.00261813, 0.90302151, -0.24027498, -0.36554700, -0.76642263, 0.39529994, -0.79128706, -0.29016984, -0.60821581, 0.18175162, 0.92966712, -0.81707895, -0.40353778, 0.25603464, -0.94203895, -0.04333454, -0.56222099, 0.73849934, 0.89834613, -0.89052939, 0.02735708, -0.12406361, 0.17981222, 0.38513264, -0.20312639, -0.55863154, -0.96578479, 0.98629636, -0.28078097, 0.75852919, -0.72292310, -0.92402917, -0.25742048, 0.62062120, 0.57003301, -0.43338364, 0.29318780, -0


   v0,0(a0)
    sll     v0,v0,0x2
    addiu   sp,sp,-180   # <- potentially confusing alloca (not the real stack frame)
    addu    v0,s2,v0
    lw      v0,0(v0)
    addu    v0,v0,s4
    .globl test_bt_2_start
test_bt_2_start:
    lb      v0,0(v0)

    # BT3: a function changing FP with a leaf basis block
test_bt_3:
    addiu   sp,sp,-80
    sd      ra,20(sp)
    sd      fp,16(sp)
    # [...]
    ld      fp,16(sp)
    ld      ra,20(sp)
    ld      s0,48(sp)
    jr      ra            # <- return point in the middle of the function
    addiu   sp,sp,80
    .globl test_bt_3_start
test_bt_3_start:
    lb      v0,0(v0)      # <- leaf basis block

    # BT4: a leaf function preceded by alignment nops
    nop; nop; nop; nop
    .align 5
test_bt_4:
    lw      a3,-29740(gp)
    lui     t5,0x51eb
    sll     v1,a3,0x3
    ori     t5,t5,0x851f
    mult    v1,t5
    sll     t0,a3,0x5
    sra     t1,t0,0x1f
    sra     v1,v1,0x1f
    dsra32  t2,a1,0x0
    mfhi    v0
    sra     v0,v0,0x5
    subu    v0,v0,v1
    mult    t0,t5
    addu    v0,v0,t2
    sd      a1,8(sp)
    move    t3,t2
    .globl test_bt_4_start
test_bt_4_start:
    mfhi    t0

    # BT5: a leaf function without nop, identified via explicit start address
    addiu   sp,sp,-80   # fake precedeing stack frame
    sd      ra,20(sp)
    ld      ra,20(sp)
    jr      ra
    addiu   sp,sp,80
    .globl  test_bt_5
test_bt_5:
    lw      a3,-29740(gp)
    lui     t5,0x51eb
    sll     v1,a3,0x3
    ori     t5,t5,0x851f
    mult    v1,t5
    sll     t0,a3,0x5
    sra     t1,t0,0x1f
    sra     v1,v1,0x1f
    dsra32  t2,a1,0x0
    mfhi    v0
    sra     v0,v0,0x5
    subu    v0,v0,v1
    mult    t0,t5
    addu    v0,v0,t2
    sd      a1,8(sp)
    move    t3,t2
    .globl test_bt_5_start
test_bt_5_start:
    mfhi    t0


f": 255
		}, {
			"utf8": " pairs",
			"tOffsetMs": 880,
			"acAsrConf": 255
		}, {
			"utf8": " of",
			"tOffsetMs": 1119,
			"acAsrConf": 255
		}, {
			"utf8": " socks",
			"tOffsetMs": 1199,
			"acAsrConf": 255
		}]
	}, {
		"tStartMs": 10230,
		"dDurationMs": 1850,
		"wWinId": 1,
		"aAppend": 1,
		"segs": [{
			"utf8": "\n"
		}]
	}, {
		"tStartMs": 10240,
		"dDurationMs": 3680,
		"wWinId": 1,
		"segs": [{
			"utf8": "and",
			"acAsrConf": 255
		}, {
			"utf8": " a",
			"tOffsetMs": 80,
			"acAsrConf": 255
		}, {
			"utf8": " hat",
			"tOffsetMs": 160,
			"acAsrConf": 255
		}, {
			"utf8": " and",
			"tOffsetMs": 399,
			"acAsrConf": 255
		}, {
			"utf8": " gloves",
			"tOffsetMs": 479,
			"acAsrConf": 255
		}, {
			"utf8": " i'm",
			"tOffsetMs": 1439,
			"acAsrConf": 255
		}, {
			"utf8": " sweating",
			"tOffsetMs": 1519,
			"acAsrConf": 255
		}]
	}, {
		"tStartMs": 12070,
		"dDurationMs": 1850,
		"wWinId": 1,
		"aAppend": 1,
		"segs": [{
			"utf8": "\n"
		}]
	}, {
		"tStartMs": 12080,
		"dDurationMs": 3599,
		"wWinId": 1,
		"segs": [{
			"utf8": "already",
			"acAsrConf": 255
		}, {
			"utf8": " but",
			"tOffsetMs": 400,
			"acAsrConf": 255
		}, {
			"utf8": " air",
			"tOffsetMs": 719,
			"acAsrConf": 255
		}, {
			"utf8": " temperatures",
			"tOffsetMs": 880,
			"acAsrConf": 255
		}, {
			"utf8": " influence",
			"tOffsetMs": 1360,
			"acAsrConf": 255
		}]
	}, {
		"tStartMs": 13910,
		"dDurationMs": 1769,
		"wWinId": 1,
		"aAppend": 1,
		"segs": [{
			"utf8": "\n"
		}]
	}, {
		"tStartMs": 13920,
		"dDurationMs": 3119,
		"wWinId": 1,
		"segs": [{
			"utf8": "so",
			"acAsrConf": 255
		}, {
			"utf8": " much",
			"tOffsetMs": 160,
			"acAsrConf": 255
		}, {
			"utf8": " more",
			"tOffsetMs": 400,
			"acAsrConf": 255
		}, {
			"utf8": " than",
			"tOffsetMs": 560,
			"acAsrConf": 255
		}, {
			"utf8": " what",
			"tOffsetMs": 719,
			"acAsrConf": 255
		}, {
			"utf8": " we",
			"tOffsetMs": 879,
			"acAsrConf": 255
		}, {
			"utf8": " wear",
			"tOffsetMs": 1040,
			"acAsrConf": 255
		}]
	}, {
		"tStartMs": 15669,
		"dDurationMs": 1370,


cted: Any
) -> None:
    cfg = _ensure_container(cfg)
    if is_primitive_container(expected):
        OmegaConf.update(cfg, key, value, merge=merge)
        assert cfg == expected
    else:
        with expected:
            OmegaConf.update(cfg, key, value, merge=merge)

def test_update_list_make_dict() -> None:
    c = OmegaConf.create([None, None])
    assert isinstance(c, ListConfig)
    OmegaConf.update(c, "0.a.a", "aa")
    OmegaConf.update(c, "0.a.b", "ab")
    OmegaConf.update(c, "1.b.a", "ba")
    OmegaConf.update(c, "1.b.b", "bb")
    assert c == [{"a": {"a": "aa", "b": "ab"}}, {"b": {"a": "ba", "b": "bb"}}]

def test_update_list_index_error() -> None:
    c = OmegaConf.create([1, 2, 3])
    assert isinstance(c, ListConfig)
    with raises(IndexError):
        OmegaConf.update(c, "4", "abc")

    assert c == [1, 2, 3]

def test_update_merge_by_default() -> None:
    cfg = OmegaConf.create({"a": {"b": 10}})
    OmegaConf.update(cfg, "a", {"c": 20})
    assert cfg == {"a": {"b": 10, "c": 20}}

@mark.parametrize(
    "cfg,key,value,expected",
    [
        param({}, "a", 10, {"a": 10}, id="add_value"),
        param({}, "a.b", 10, {"a": {"b": 10}}, id="add_value"),
        param({}, "a", {"b": 10}, {"a": {"b": 10}}, id="add_dict"),
        param({}, "a.b", {"c": 10}, {"a": {"b": {"c": 10}}}, id="add_dict"),
        param({}, "a", [1, 2], {"a": [1, 2]}, id="add_list"),
        param({}, "a.b", [1, 2], {"a": {"b": [1, 2]}}, id="add_list"),
        param(
            {"user": User(name="Bond", age=7)},
            "user.location",
            "London",
            {"user": {"name": "Bond", "age": 7, "location": "London"}},
            id="inserting_into_nested_structured_config",
        ),
    ],
)
def test_update_force_add(cfg: Any, key: str, value: Any, expected: Any) -> None:
    cfg = _ensure_container(cfg)
    OmegaConf.set_struct(cfg, True)

    with raises((ConfigAttributeError, ConfigKeyError)):
        OmegaConf.update(cfg, key, value, force_add=False)

    OmegaConf.update(cfg, key, value, force_add=True)
    assert cfg == expected


Mode.ALPHA:
				GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
				break;
			case CompositingMode.ALPHA_ADD:
				GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE);
				break;
			case CompositingMode.MODULATE:
				GL11.glBlendFunc(GL_DST_COLOR, GL_ZERO);
				break;
			case CompositingMode.MODULATE_X2:
				GL11.glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);
				break;
			case CompositingMode.REPLACE:
				GL11.glBlendFunc(GL_ONE, GL_ZERO);
				break;
			default:
				break;
		}

		GL11.glPolygonOffset(cm.getDepthOffsetFactor(), cm.getDepthOffsetUnits());
		if (cm.getDepthOffsetFactor() == 0.0F && cm.getDepthOffsetUnits() == 0.0F) {
			GL11.glDisable(Settings.xrayView ? GL_POLYGON_OFFSET_LINE : GL_POLYGON_OFFSET_FILL);
		} else {
			GL11.glEnable(Settings.xrayView ? GL_POLYGON_OFFSET_LINE : GL_POLYGON_OFFSET_FILL);
		}
	}

	private void setupMaterial(Material mat) {
		if (mat != null) {
			GL11.glEnable(GL_LIGHTING);
			float[] tmpCol = new float[4];

			G3DUtils.fillFloatColor(tmpCol, mat.getColor(Material.AMBIENT));
			GL11.glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, memoryBuffers.getFloatBuffer(tmpCol));

			G3DUtils.fillFloatColor(tmpCol, mat.getColor(Material.DIFFUSE));
			GL11.glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, memoryBuffers.getFloatBuffer(tmpCol));

			G3DUtils.fillFloatColor(tmpCol, mat.getColor(Material.EMISSIVE));
			GL11.glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, memoryBuffers.getFloatBuffer(tmpCol));

			G3DUtils.fillFloatColor(tmpCol, mat.getColor(Material.SPECULAR));
			GL11.glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, memoryBuffers.getFloatBuffer(tmpCol));

			GL11.glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, mat.getShininess());

			if (mat.isVertexColorTrackingEnabled()) {
				GL11.glEnable(GL_COLOR_MATERIAL);
				GL11.glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
			} else {
				GL11.glDisable(GL_COLOR_MATERIAL);
			}
		} else {
			GL11.glDisable(GL_LIGHTING);
			GL11.glDisable(GL_COLOR_MATERIAL);
		}
	}

	private void setupFog(Fog fog) {
		if (fog != null && !Settings.xrayView) {
			GL11.glEnable(GL_FOG);
			GL11.glFogi(GL_FOG_MODE, fog.getMode() == Fog.LINEAR ? GL_LINEAR : GL_EXP);

			float[] fogColor = new float[4];
			G3DUtils.fillFloatColor(fogColor, fog.getColor());
			fogColor[3] = 1.0F;
			GL11.glFogfv(GL_FOG_COLOR, memoryBuffers.getFloatBuffer(fogColor));

			GL11.glFogf(GL_FOG_START, fog.getNearDistance());
			GL11.glFogf(GL_FOG_END, fog.getFarDistance());
			GL11.glFogf(GL_FOG_DENSITY, fog.getDensity());
		} else {
			GL11.glDisable(GL_FOG);
		}
	}


using System.Globalization;

namespace Sdcb.Arithmetic.Gmp.Tests;

public class DecimalStringPartsTests
{
    [Fact]
    public void ToExpParts_PositiveNumberWithoutLeadingZeros_CorrectConversion()
    {
        // Arrange
        var decimalStringParts = new DecimalStringParts(false, "123", "456");

        // Act
        var result = decimalStringParts.ToExpParts();

        // Assert
        Assert.False(result.IsNegative);
        Assert.Equal("1", result.IntegerPart);
        Assert.Equal("23456", result.DecimalPart);
        Assert.Equal(2, result.Exp);
    }

    [Fact]
    public void ToExpParts_NegativeNumberWithLeadingZeros_CorrectConversion()
    {
        // Arrange
        var decimalStringParts = new DecimalStringParts(true, "0", "00123");

        // Act
        var result = decimalStringParts.ToExpParts();

        // Assert
        Assert.True(result.IsNegative);
        Assert.Equal("1", result.IntegerPart);
        Assert.Equal("23", result.DecimalPart);
        Assert.Equal(-3, result.Exp);
    }

    [Fact]
    public void ToExpParts_Zero_CorrectConversion()
    {
        // Arrange
        var decimalStringParts = new DecimalStringParts(false, "0", "");

        // Act
        var result = decimalStringParts.ToExpParts();

        // Assert
        Assert.False(result.IsNegative);
        Assert.Equal("0", result.IntegerPart);
        Assert.Equal("", result.DecimalPart);
        Assert.Equal(0, result.Exp);
    }

    [Fact]
    public void ToExpParts_OneDecimalDigit_CorrectConversion()
    {
        // Arrange
        var decimalStringParts = new DecimalStringParts(false, "0", "1");

        // Act
        var result = decimalStringParts.ToExpParts();

        // Assert
        Assert.False(result.IsNegative);
        Assert.Equal("1", result.IntegerPart);
        Assert.Equal("", result.DecimalPart);
        Assert.Equal(-1, result.Exp);
    }

    [Theory]
    [InlineData(false, "123", "4", 2, "123.40")]
    [InlineData(true, "0", "12345", 2, "-0.12")]
    [InlineData(false, "123456789", "9876543210", 4, "123,456,789.9876")]
    [InlineData(true, "123", "", 2, "-123.00")]
    [InlineData(false, "123456789", "", 0, "123,456,789")]
    [InlineData(false, "1234", "


iff
@@ -23,15 +23,20 @@
   * 水力は、日本にとって貴重な自然エネルギー資源です。現状は、 1957 年制定の多目的ダム法ベースの保守的運用が主流で、最新技術を活用した出力増強の余地があります。
 * 石炭、LNGの両火力発電は、縮小運用が前提となる中、老朽化による供給力低下が夏季ピーク時の需給逼迫を招いています。
 * LNG 輸入費は 2023 年で約 6.5 兆円に上り（輸入総額の約 6％）、2024 年通年の貿易赤字 5.3 兆円を上回る規模であることから、AIによる電力需要増大期に当たっても発電規模維持・拡大には慎重な判断が必要となります。
+* 最新の研究（例：UCバークレー白石健司氏の2035年レポート）では、より大胆なエネルギーミックスの可能性が示唆されており、2035年までに再エネ70%・原子力20%・LNG10%、2050年までには再エネ88%・原子力12%といった構成が、電力の安定供給を保ちつつ最小費用で脱炭素化を実現するとの試算もあります。この試算では、再エネのコストが大幅に低下し、既に火力発電と同等かそれ以下になりつつあり、国産エネルギーである再エネの最大限の導入と活用が経済合理性にかなうとされています。
+* ただし、再エネの大量導入には、その変動性、不確実性、立地制約から生じる電力システムへの統合費用が課題となります。これらの課題克服には、蓄電池、水素エネルギーの活用、送電網の広域化・強化、電力市場設計の最適化など、多岐にわたる技術的・制度的対策を計画的に導入することが不可欠です。特に、蓄電池コストの急速な低下は、再エネ導入を加速させる鍵となります。

   ## 政策概要

   ### 1）大幅なエネルギー需要増に対応できるよう、2030 年に向けたエネルギーミックス目標を再設定し、実行します。
   * **火力発電の一時的維持を明確化**し、無理な再エネ拡大による国民負担増と供給不足を回避します。
-  * **原子力比率 20〜22 ％の達成**を目指し、国主導で再稼働支援策を整備します。2030 年時点で 25 基以上の運転を実現できるよう、手続きの迅速化と地域支援を両


59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024


) << AccessRight::READ_DG05;
		QTest::newRow("GivenNames") << AccessRight::READ_DG04;
		QTest::newRow("ValidUntil") << AccessRight::READ_DG03;
		QTest::newRow("IssuingCountry") << AccessRight::READ_DG02;
		QTest::newRow("DocumentType") << AccessRight::READ_DG01;
		QTest::newRow("CanAllowed") << AccessRight::CAN_ALLOWED;
		QTest::newRow("Pseudonym") << AccessRight::RESTRICTED_IDENTIFICATION;
		QTest::newRow("AddressVerification") << AccessRight::COMMUNITY_ID_VERIFICATION;
		QTest::newRow("AgeVerification") << AccessRight::AGE_VERIFICATION;
		QTest::newRow("WriteAddress") << AccessRight::WRITE_DG17;
		QTest::newRow("WriteCommunityID") << AccessRight::WRITE_DG18;
		QTest::newRow("WriteResidencePermitI") << AccessRight::WRITE_DG19;
		QTest::newRow("WriteResidencePermitII") << AccessRight::WRITE_DG20;
		QTest::newRow("PinManagement") << AccessRight::PIN_MANAGEMENT;
	}

	private Q_SLOTS:
		void checkAccessRightNames_data()
		{
			fillTestData();
			QTest::newRow("") << AccessRight::WRITE_DG21;
			QTest::newRow("") << AccessRight::WRITE_DG22;
			QTest::newRow("") << AccessRight::PRIVILEGED_TERMINAL;
			QTest::newRow("") << AccessRight::PSA;
		}

		void checkAccessRightNames()
		{
			QFETCH(AccessRight, value);
			QCOMPARE(AccessRoleAndRightsUtil::toTechnicalName(value), QLatin1String(QTest::currentDataTag()));
		}

		void checkFromTechnicalName_data()
		{
			fillTestData();
		}

		void checkFromTechnicalName()
		{
			QFETCH(AccessRight, value);
			const auto undefined = static_cast<AccessRight>(UINT_MAX);
			AccessRight right = undefined;
			const auto& func = [&right](AccessRight pRight){
						right = pRight;
					};

			bool success = AccessRoleAndRightsUtil::fromTechnicalName(QString::fromLatin1(QTest::currentDataTag()), func);
			if (right != value)
			{
				QVERIFY(!success);
			}
			QCOMPARE(right, value);
			QVERIFY(success);

			QVERIFY(right != undefined);
		}

		void checkFromTechnicalNameInvalid()
		{
			const auto undefined = static_cast<AccessRight>(UINT_MAX);
			AccessRight right = undefined;
			const auto& func = [&right](AccessRight pRight){
						right = pRight;
					};

			QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName("crap"_L1, func));
			QCOMPARE(right, undefined);

			QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName("CAN_ALLOWED"_L1, func));
			QCOMPARE(right, undefined);

			QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName("familyname"_L1, func));
			QCOMPARE(right, undefined);
		}

		void checkJoinFromTechnicalName()
		{
			auto data = AccessRoleAndRightsUtil::joinFromTechnicalName({"DocumentType"_L1, "DoctoralDegree"_L1});
			QCOMPARE(data, QStringLiteral("Document type, Doctoral degree"));

			// previous versions stored translated display names instead of technical names, so be compatible here.
			data = AccessRoleAndRightsUtil::joinFromTechnical


, height := uniformScale(fbInfo.Width, fbInfo.Height, r.Settings.MaxWidth, r.Settings.MaxHeight)
	if !fbInfo.CanResize {
		width, height = fbInfo.Width, fbInfo.Height
	}

	format := fbInfo.Format
	if r.Settings.DrawMode == path.DrawMode_OVERDRAW {
		format = image.NewUncompressed("Count_U8", fmts.Count_U8)
	}

	id, err := database.Store(ctx, &FramebufferAttachmentBytesResolvable{
		After:            r.After,
		Width:            width,
		Height:           height,
		Attachment:       fbInfo.Type,
		FramebufferIndex: fbInfo.Index,
		Settings:         r.Settings,
		Hints:            r.Hints,
		ImageFormat:      format,
		Config:           r.Config,
	})
	if err != nil {
		return nil, err
	}

	return &image.Info{
		Width:  width,
		Height: height,
		Depth:  1,
		Format: format,
		Bytes:  image.NewID(id),
	}, nil
}

func uniformScale(width, height, maxWidth, maxHeight uint32) (w, h uint32) {
	w, h = width, height
	scaleX, scaleY := float32(w)/float32(maxWidth), float32(h)/float32(maxHeight)
	if scaleX > 1.0 || scaleY > 1.0 {
		if scaleX > scaleY {
			w, h = uint32(float32(w)/scaleX), uint32(float32(h)/scaleX)
		} else {
			w, h = uint32(float32(w)/scaleY), uint32(float32(h)/scaleY)
		}
	}
	return w, h
}

// framebufferAttachmentChanges describes the list of changes to a single
// attachment over the span of the entire capture.
type framebufferAttachmentChanges struct {
	changes []FramebufferAttachmentInfo
}

// FramebufferAttachmentInfo describes the dimensions and format of a
// framebuffer attachment.
type FramebufferAttachmentInfo struct {
	// After is the index of the last command to change the attachment.
	After api.SubCmdIdx

	// Width of the framebuffer attachment in pixels.
	Width uint32

	// Height of the framebuffer attachment in pixels.
	Height uint32

	// Can this image be resized in the server
	CanResize bool

	// Index of the api-specific attachment.
	Index uint32

	// Format of the attachment.
	Format *image.Format

	// Type of the attachment.
	Type api.FramebufferAttachmentType

	// The error returned by the API. If this is non-null then all other fields
	// may contain undefined values.
	Err error
}

func (f FramebufferAttachmentInfo) equal(o FramebufferAttachmentInfo) bool {
	fe := (f.Format == nil && o.Format == nil) || (f.Format != nil && o.Format != nil && f.Format.Name == o.Format.Name)
	if (f.Err == nil) != (o.Err == nil) {
		return false
	}
	if f.Err == nil {
		return fe && f.Width == o.Width && f.Height == o.Height && f.Index == o.Index && f.CanResize == o.CanResize && f.Type == o.Type
	}
	return f.Err.Error() == o.Err.Error()
}

func (c framebufferAttachmentChanges) after(ctx context.Context, i api.SubCmdIdx) (FramebufferAttachmentInfo, error) {
	idx := sort.Search(len(c.changes), func(x int) bool { return i.LessThan(c.changes[x].After) }) - 1

	if idx < 0 {
		log.W(ctx, "No dimension records found after command %d. FB dimension records = %d", i, len(c.changes))
		return FramebufferAttachmentInfo{}, &service.ErrDataUnavailable{Reason: messages.ErrFramebufferUnavailable()}
	}

	return c.changes[idx], nil
}

func (c framebufferAttachmentChanges) last() FramebufferAttachmentInfo {
	if count := len(c.changes); count > 0 {
		return c.changes[c


").min   = capabilities.backgroundBlurLevel.min;
        document.getElementById("control_backgroundblurlevel").max   = capabilities.backgroundBlurLevel.max;
        document.getElementById("control_backgroundblurlevel").step  = capabilities.backgroundBlurLevel.step;
    } else container_backgroundblurlevel.innerText = 'N/A';
    if (supportedConstraints.faceFraming) {
      constraints.advanced[0].faceFraming = settings.faceFraming;
      document.getElementById("control_faceframing").checked = settings.faceFraming;
    } else container_faceframing.innerText = 'N/A';
    if (supportedConstraints.lightingCorrection) {
      constraints.advanced[0].lightingCorrection = settings.lightingCorrection;
      document.getElementById("control_lightingcorrection").checked = settings.lightingCorrection;
    } else container_lightingcorrection.innerText = 'N/A';
  }).catch((error) => {
    info_errors.innerText = info_errors.innerText + ',' + JSON.stringify(error, null, 2);
  });

  video.addEventListener('play', () => {
    if (!('requestVideoFrameCallback' in HTMLVideoElement.prototype)) {
      info_errors.innerText = info_errors.innerText + ',requestVideoFrameCallback API not supported';
    }
  });

  const videoFrameCallback = (now, metadata) => {
    info_metadata.innerText = JSON.stringify(metadata, null, 2);
    video.requestVideoFrameCallback(videoFrameCallback);
  };

  video.requestVideoFrameCallback(videoFrameCallback);
};

window.addEventListener('load', startTest);

function updateConstraints() {
  if (videoTrack) {
    videoTrack.applyConstraints(constraints).then(() => {
      console.log('Applied constraints successfully');
    }).catch((error) => {
      console.log('Failed to apply constraints: ' + JSON.stringify(constraints, null, 2));
      info_errors.innerText = info_errors.innerText + ',' + JSON.stringify(error, null, 2);
    });
  }
}

function clickBackgroundBlur(cb) {
  constraints.advanced[0].backgroundBlur = cb.checked;
  console.log('Set backgroundBlur to ' + cb.checked);
  updateConstraints();
}

function clickBackgroundBlurLevel(cb) {
  constraints.advanced[0].backgroundBlurLevel = cb.value;
  console.log('Set backgroundBlurLevel to ' + cb.value);
  updateConstraints();
}

function clickFaceFraming(cb) {
  constraints.advanced[0].faceFraming = cb.checked;
  console.log('Set faceFraming to ' + cb.checked);
  updateConstraints();
}

function clickLightingCorrection(cb) {
  constraints.advanced[0].lightingCorrection = cb.checked;
  console.log('Set lightingCorrection to ' + cb.checked);
  updateConstraints();
}

</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1, shrink-to-fit=no"
    />
    <meta name="theme-color" content="#000000" />
    <!--
      manifest.json provides metadata used when your web app is installed on a
      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
    -->
    <link rel="manifest" href="%PUBLIC_


@Test
    fun testToByteArray() {
        assertTrue(array.contentEquals(packet.toByteArray()))
    }

    @Test
    fun testFromByteArray() {
        val result = MQTT5Publish.fromByteArray(4, array.copyOfRange(2, array.size))
        assertEquals(packet.packetId, result.packetId)
        assertEquals(packet.qos, result.qos)
        assertEquals(packet.topicName, result.topicName)
        assertTrue(packet.payload!!.contentEquals(ubyteArrayOf(0x01u, 0x02u, 0x03u, 0x04u)))
    }
}
package io.github.davidepianca98.mqtt

import io.github.davidepianca98.mqtt.packets.MQTTControlPacketType
import io.github.davidepianca98.mqtt.packets.MQTTDeserializer
import io.github.davidepianca98.mqtt.packets.MQTTPacket
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connack
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Connect
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Disconnect
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingreq
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pingresp
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Puback
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubcomp
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Publish
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrec
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Pubrel
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Suback
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Subscribe
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Unsuback
import io.github.davidepianca98.mqtt.packets.mqttv4.MQTT4Unsubscribe
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Auth
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connack
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Connect
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Disconnect
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingreq
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pingresp
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Puback
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubcomp
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Publish
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrec
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Pubrel
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Suback
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Subscribe
import io.github.davidepianca98.mqtt.packets.mqttv5.MQTT5Unsuback
import


       \dot            v1.4s, v19.16b, v7.4b[0]
        \dot            v1.4s, v20.16b, v7.4b[1]

        \dot            v2.4s, v22.16b, v7.4b[0]
        \dot            v2.4s, v23.16b, v7.4b[1]
        \dot            v3.4s, v25.16b, v7.4b[0]
        \dot            v3.4s, v26.16b, v7.4b[1]

        uzp1            v0.8h, v0.8h, v1.8h
        uzp1            v2.8h, v2.8h, v3.8h
.ifc \type, prep
    .ifc \isa, neon_i8mm
        srshr           v0.8h, v0.8h, #2
        srshr           v1.8h, v2.8h, #2
    .else
        sshr            v0.8h, v0.8h, #2
        sshr            v1.8h, v2.8h, #2
    .endif
        stp             q0, q1, [\dst]
.else   // put
        sqrshrun        v0.8b, v0.8h, #6
        sqrshrun        v1.8b, v2.8h, #6
        str             d0, [\dst]
        str             d1, [\dst, \d_strd]
.endif
        ret

        .align JUMP_ALIGN
40:     // V - 4xN or 2xN (put only)
.ifc \type, put
        cmp             \w, #2
        b.eq            20f
.endif
        ldr             s16, [\src]
        ldr             s17, [\src, \s_strd]
        add             \src, \src, \s_strd, lsl #1
        ldr             s18, [\src]
        ldr             s19, [\src, \s_strd]
        add             \src, \src, \s_strd, lsl #1

        ldr             s20, [\src]
        ldr             s21, [\src, \s_strd]
        add             \src, \src, \s_strd, lsl #1
        ldr             s22, [\src]
        ldr             s23, [\src, \s_strd]
        add             \src, \src, \s_strd, lsl #1
        subs            \h, \h, #2  // for prep: sub is enough

        zip1            v0.8b, v16.8b, v17.8b
        zip1            v2.8b, v18.8b, v19.8b
        zip1            v18.8b, v20.8b, v21.8b
        zip1            v24.8b, v22.8b, v23.8b

        zip1            v16.8h, v0.8h, v2.8h
        zip1            v17.8h, v18.8h, v24.8h
.ifc \isa, neon_dotprod
        sub             v16.16b, v16.16b, v5.16b
        sub             v17.16b, v17.16b, v5.16b
.endif
.ifc \type, put
        b.eq            42f
.endif
        .align LOOP_ALIGN
4:
        ldr             s18, [\src]
        ldr             s21, [\src, \s_strd]
        add             \src, \src, \s_strd, lsl #1
.ifc \isa, neon_i8mm
        movi            v0.4s, #0
        movi            v1.4s, #0
.else   //


 nodes[1].node.channel_state.lock().unwrap().by_id.get(&channels[1].2).unwrap().get_counterparty_htlc_minimum_msat() - 1;
	let mut bogus_route = route.clone();
	let route_len = bogus_route.paths[0].len();
	bogus_route.paths[0][route_len-1].fee_msat = amt_to_forward;
	run_onion_failure_test("amount_below_minimum", 0, &nodes, &bogus_route, &payment_hash, &payment_secret, |_| {}, ||{}, true, Some(UPDATE|11), Some(NetworkUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy(short_channel_id)}), Some(short_channel_id));

	// Clear pending payments so that the following positive test has the correct payment hash.
	for node in nodes.iter() {
		node.node.clear_pending_payments();
	}

	// Test a positive test-case with one extra msat, meeting the minimum.
	bogus_route.paths[0][route_len-1].fee_msat = amt_to_forward + 1;
	let preimage = send_along_route(&nodes[0], bogus_route, &[&nodes[1], &nodes[2]], amt_to_forward+1).0;
	claim_payment(&nodes[0], &[&nodes[1], &nodes[2]], preimage);

	//TODO: with new config API, we will be able to generate both valid and
	//invalid channel_update cases.
	let short_channel_id = channels[0].0.contents.short_channel_id;
	run_onion_failure_test("fee_insufficient", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
		msg.amount_msat -= 1;
	}, || {}, true, Some(UPDATE|12), Some(NetworkUpdate::ChannelClosed { short_channel_id, is_permanent: true}), Some(short_channel_id));

	let short_channel_id = channels[0].0.contents.short_channel_id;
	run_onion_failure_test("incorrect_cltv_expiry", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
		// need to violate: cltv_expiry - cltv_expiry_delta >= outgoing_cltv_value
		msg.cltv_expiry -= 1;
	}, || {}, true, Some(UPDATE|13), Some(NetworkUpdate::ChannelClosed { short_channel_id, is_permanent: true}), Some(short_channel_id));

	let short_channel_id = channels[1].0.contents.short_channel_id;
	run_onion_failure_test("expiry_too_soon", 0, &nodes, &route, &payment_hash, &payment_secret, |msg| {
		let height = msg.cltv_expiry - CLTV_CLAIM_BUFFER - LATENCY_GRACE_PERIOD_BLOCKS + 1;
		connect_blocks(&nodes[0], height - nodes[0].best_block_info().1);
		connect_blocks(&nodes[1], height - nodes[1].best_block_info().1);
		connect_blocks(&nodes[2], height - nodes[2].best_block_info().1);
	}, ||{}, true, Some(UPDATE|14), Some(NetworkUpdate::ChannelUpdateMessage{msg: ChannelUpdate::dummy(short_channel_id)}), Some(short_channel_id));

	run_onion_failure_test("unknown_payment_hash", 2, &nodes, &route, &payment_hash, &payment_secret, |_| {}, || {
		nodes[2].node.fail_htlc_backwards(&payment_hash);
	}, false, Some(PERM|15), None, None);
	let (_, payment_hash, payment_secret) = get_payment_preimage_hash!(nodes[2]);

	run_onion_failure_test("final_expiry_too_soon", 1, &nodes, &route, &


_SPEAKER_SERIAL_CLOCK,
      .ws_io_num = I2S_SPEAKER_LEFT_RIGHT_CLOCK,
      .data_out_num = I2S_SPEAKER_SERIAL_DATA,
      .data_in_num = I2S_PIN_NO_CHANGE};

  audioOutput = new I2SOutput(I2S_NUM_1, i2s_speaker_pins);
  audioOutput->start(16000);
#endif
  videoPlayer = new VideoPlayer(
    channelData,
    videoSource,
    audioSource,
    display,
    audioOutput
  );
  videoPlayer->start();
#ifndef HAS_IR_REMOTE
  display.drawTuningText();
  // get the channel info
  while(!channelData->fetchChannelData()) {
    Serial.println("Failed to fetch channel data");
    delay(1000);
  }
  // default to first channel
  videoPlayer->setChannel(0);
  delay(500);
  videoPlayer->play();
#endif
  #ifdef M5CORE2
  audioOutput->setVolume(4);
  #endif
}

int channel = 0;

void volumeUp() {
  audioOutput->volumeUp();
  delay(500);
  Serial.println("VOLUME_UP");
}

void volumeDown() {
  audioOutput->volumeDown();
  delay(500);
  Serial.println("VOLUME_DOWN");
}

void channelDown() {
  videoPlayer->playStatic();
  delay(500);
  channel--;
  if (channel < 0) {
    channel = channelData->getChannelCount() - 1;
  }
  videoPlayer->setChannel(channel);
  videoPlayer->play();
  Serial.printf("CHANNEL_DOWN %d\n", channel);
}

void channelUp() {
  videoPlayer->playStatic();
  delay(500);
  channel = (channel + 1) % channelData->getChannelCount();
  videoPlayer->setChannel(channel);
  videoPlayer->play();
  Serial.printf("CHANNEL_UP %d\n", channel);
}

void loop()
{
#ifdef HAS_IR_REMOTE
  RemoteCommands command = remoteInput->getLatestCommand();
  if (command != RemoteCommands::UNKNOWN)
  {
    switch (command)
    {
    case RemoteCommands::POWER:
      // log out RAM usage
      Serial.printf("Total heap: %d\n", ESP.getHeapSize());
      Serial.printf("Free heap: %d\n", ESP.getFreeHeap());
      Serial.printf("Total PSRAM: %d\n", ESP.getPsramSize());
      Serial.printf("Free PSRAM: %d\n", ESP.getFreePsram());

      videoPlayer->stop();
      display.drawTuningText();
      Serial.println("POWER");
      // get the channel info
      while(!channelData->fetchChannelData()) {
        Serial.println("Failed to fetch channel data");
        delay(1000);
      }
      videoPlayer->setChannel(0);
      videoPlayer->play();
      break;
    case RemoteCommands::VOLUME_UP:
      volumeUp();
      break;
    case RemoteCommands::VOLUME_DOWN:
      volumeDown();
      break;
    case RemoteCommands::CHANNEL_UP:
      channelUp();
      break;
    case RemoteCommands::CHANNEL_DOWN:
      channelDown();
      break;
    }
    delay(100);
    remoteInput->getLatestCommand();
  }
#endif
#ifdef HAS_BUTTONS
  if (buttonLeft()) {
    channelDown();
  }
  if (buttonRight()) {
    channelUp();
  }
  if (buttonUp()) {


/ Returns the gauge clock
  SfRadialGauge _buildClockExample() {
    return SfRadialGauge(
      axes: <RadialAxis>[
        /// Renders inner axis and positioned it using CenterX and
        /// CenterY properties and reduce the radius using radiusFactor
        RadialAxis(
          startAngle: 270,
          endAngle: 270,
          radiusFactor: 0.2,
          axisLabelStyle: const GaugeTextStyle(fontSize: 6),
          maximum: 12,
          showFirstLabel: false,
          showLastLabel: true,
          offsetUnit: GaugeSizeUnit.factor,
          interval: 2,
          centerY: 0.66,
          tickOffset: 0.03,
          minorTicksPerInterval: 5,
          labelOffset: 0.2,
          minorTickStyle: const MinorTickStyle(
            length: 0.09,
            lengthUnit: GaugeSizeUnit.factor,
            thickness: 0.5,
          ),
          majorTickStyle: const MajorTickStyle(
            length: 0.15,
            lengthUnit: GaugeSizeUnit.factor,
            thickness: 1,
          ),
          axisLineStyle: const AxisLineStyle(
            thickness: 0.03,
            thicknessUnit: GaugeSizeUnit.factor,
          ),
          pointers: const <GaugePointer>[
            NeedlePointer(
              value: 5,
              needleLength: 0.7,
              needleColor: Color(0xFF00A8B5),
              needleStartWidth: 0.5,
              needleEndWidth: 1,
              knobStyle: KnobStyle(knobRadius: 0),
            ),
          ],
        ),

        /// Renders inner axis and positioned it using CenterX and
        /// CenterY properties and reduce the radius using radiusFactor
        RadialAxis(
          startAngle: 270,
          endAngle: 270,
          axisLabelStyle: const GaugeTextStyle(fontSize: 6),
          radiusFactor: 0.2,
          labelOffset: 0.2,
          offsetUnit: GaugeSizeUnit.factor,
          maximum: 12,
          showFirstLabel: false,
          showLastLabel: true,
          interval: 2,
          centerX: isCardView
              ? 0.38
              : model.isWebFullView
              ? 0.38
              : 0.335,
          minorTicksPerInterval: 5,
          tickOffset: 0.03,
          minorTickStyle: const MinorTickStyle(
            length: 0.09,
            lengthUnit: GaugeSizeUnit.factor,
            thickness: 0.5,
          ),
          majorTickStyle: const MajorTickStyle(
            length: 0.15,
            lengthUnit: GaugeSizeUnit.factor,
            thickness: 1,
          ),
          axisLineStyle: const AxisLineStyle(
            thicknessUnit: GaugeSizeUnit.factor,
            thickness: 0.03,
          ),
          pointers: const <GaugePointer>[
            NeedlePointer(
              value: 8,
              needleLength: 0.7,
              needleColor: Color(0xFF00A8B5),
              needleStartWidth: 0.5,
              needleEndWidth: 1,
              knobStyle: KnobStyle(knobRadius: 0),
            ),
          ],
        ),
        // Renders outer axis
        RadialAxis(
          startAngle: 270,
          endAngle: 270,
          maximum: 12,
          showFirstLabel: false,
          showLastLabel: true,
          interval: 1,
          radiusFactor: model.isWebFullView ? 0.8 : 0.95,
          labelOffset: 0.1,
          offsetUnit: GaugeSizeUnit.factor,
          minorTicksPerInterval: 4,
          tickOffset: 0.03,
          minorTickStyle


Type = "Landroid/view/View;",
    accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
    parameters = emptyList(),
)

package app.revanced.patches.music.general.splash

import app.revanced.patches.music.utils.resourceid.mainActivityLaunchAnimation
import app.revanced.util.fingerprint.legacyFingerprint
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionReversed
import app.revanced.util.indexOfFirstLiteralInstruction
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference

internal const val CAIRO_SPLASH_ANIMATION_FEATURE_FLAG = 45635386L

/**
 * This fingerprint is compatible with YouTube Music v7.06.53+
 */
internal val cairoSplashAnimationConfigFingerprint = legacyFingerprint(
    name = "cairoSplashAnimationConfigFingerprint",
    returnType = "V",
    parameters = listOf("Landroid/os/Bundle;"),
    strings = listOf("sa_e"),
    customFingerprint = handler@{ method, _ ->
        if (method.definingClass != "Lcom/google/android/apps/youtube/music/activities/MusicActivity;")
            return@handler false
        if (method.name != "onCreate")
            return@handler false
        if (indexOfSetContentViewInstruction(method) < 0)
            return@handler false

        method.indexOfFirstLiteralInstruction(CAIRO_SPLASH_ANIMATION_FEATURE_FLAG) >= 0
                || method.indexOfFirstLiteralInstruction(mainActivityLaunchAnimation) >= 0
    }
)

internal fun indexOfSetContentViewInstruction(method: Method, startIndex: Int? = null) =
    method.indexOfFirstInstructionReversed(startIndex) {
        opcode == Opcode.INVOKE_VIRTUAL &&
                getReference<MethodReference>()?.name == "setContentView"
    }

package app.revanced.patches.music.general.autocaptions

import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE
import app.revanced.patches.music.utils.patch.PatchList.DISABLE_FORCED_AUTO_CAPTIONS
import app.revanced.patches.music.utils.settings.CategoryType
import app.revanced.patches.music.utils.settings.ResourceUtils.updatePatchStatus
import app.revanced.patches.music.utils.settings.addSwitchPreference
import app.revanced.patches.music.utils.settings.settingsPatch
import app.revanced.patches.shared.captions.baseAutoCaptionsPatch

@Suppress("unused")
val autoCaptionsPatch = bytecodePatch(
    DISABLE_FORCED_AUTO_CAPTIONS.title,
    DISABLE_FORCED_AUTO_CAPTIONS.summary,
) {
    compatibleWith(COMPATIBLE_PACKAGE)

    dependsOn(
        baseAutoCaptionsPatch,
        settingsPatch
    )

    execute {
        addSwitchPreference(
            CategoryType.GENERAL,
            "revanced_disable_auto_captions",
            "false"
        )

        updatePatchStatus(DISABLE_FORCED_AUTO_CAPTIONS)

    }
}package app.revanced.patches.music.general.startpage

import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.resourcePatch
import app.revanced.patches.music.utils.compatibility.Constants.COMPATIBLE_PACKAGE


Future main() async {
  await runTests();
}

// todo: add the rest of the calendars

// Here the term 'Islamic' only refers to whether the implementation is IslamicYearMonthDayCalculator,
// not whether the calendar itself is based on Islamic scripture.
List<TestCaseData> NonIslamicCalculators = [
  TestCaseData(GregorianYearMonthDayCalculator())..name='Gregorian',
  //new TestCaseData(new CopticYearMonthDayCalculator())..name='Coptic',
  TestCaseData(JulianYearMonthDayCalculator())..name='Julian',
//new TestCaseData(new HebrewYearMonthDayCalculator(HebrewMonthNumbering.Civil)).SetName('Hebrew Civil'),
//new TestCaseData(new HebrewYearMonthDayCalculator(HebrewMonthNumbering.Scriptural)).SetName('Hebrew Scriptural'),
//new TestCaseData(new PersianYearMonthDayCalculator.Simple()).SetName('Persian Simple'),
//new TestCaseData(new PersianYearMonthDayCalculator.Arithmetic()).SetName('Persian Arithmetic'),
//new TestCaseData(new PersianYearMonthDayCalculator.Astronomical()).SetName('Persian Astronomoical'),
//new TestCaseData(new UmAlQuraYearMonthDayCalculator()).SetName('Um Al Qura'),
];

List<TestCaseData> IslamicCalculators = [];
/*
(from epoch in Enum.GetValues(typeof(IslamicEpoch)).Cast<IslamicEpoch>()
from leapYearPattern in Enum.GetValues(typeof(IslamicLeapYearPattern)).Cast<IslamicLeapYearPattern>()
let calculator = new IslamicYearMonthDayCalculator(leapYearPattern, epoch)
select new TestCaseData(calculator).SetName($'Islamic: {epoch}, {leapYearPattern}'))
.ToArray();*/

Iterable<TestCaseData> AllCalculators = [NonIslamicCalculators, IslamicCalculators].expand((x) => x);

// Note for tests using TestCaseSource:
// We can't make the parameter of type YearMonthDayCalculator, because that's internal.
// We can't make the method internal, as then it isn't a test. Casting is all we've got.

@Test()
@TestCaseSource(#AllCalculators)
void ValidateStartOfYear1Days(Object calculatorAsObject)
{
  var calculator = calculatorAsObject as YearMonthDayCalculator;
  // Some calendars (e.g. Um Al Qura) don't support year 1, so the DaysAtStartOfYear1
  // is somewhat theoretical. (It's still used in such calendars, but only to get a guess
  // as to a year number given a day number.)
  if (calculator.minYear > 1 || calculator.maxYear < 0)
  {
    return;
  }
  expect(calculator.getStartOfYearInDays(1), calculator.daysAtStartOfYear1);
}

@Test()
@TestCaseSource(#AllCalculators)
void GetYearConsistentWithGetYearDays(Object calculatorAsObject)
{
  var calculator = calculatorAsObject as YearMonthDayCalculator;
  for (int year = calculator.minYear; year <= calculator.maxYear; year++)
  {
    int startOfYearDays = calculator.getStartOfYearInDays(year);

    var tmp = calculator.getYear(startOfYearDays);
    var yearCandidate = tmp[0];
    var dayOfYear = tmp[1];
    expect(yearCandidate, year, reason: 'Start of year $year');
    expect(dayOfYear, 0); // Zero-based...

    tmp = calculator.getYear(startOfYearDays - 1);
    yearCandidate = tmp[0];
    dayOfYear = tmp[1];
    expect(yearCandidate, year - 1, reason: 'End of year ${year - 1}');
    expect(calculator.getDaysInYear(year - 1) - 1, dayOfYear);
  }
}

// Portions of this work are Copyright 2018 The Time Machine Authors. All rights reserved.
// Portions of this work are Copyright 2018 The Noda Time Authors. All rights reserved.
// Use of this source code is governed by the Apache License 2.0, as foun


able spawn stones \n"),
	ECVF_SetBySystemSettingsIni);

FString GetVersionString();

void FDarkLithosphereGameModule::StartupModule() {
	UE_LOG(LogTemp, Warning, TEXT("Start FDarkLithosphereGameModule %s"), *GetVersionString());

	FNetworkVersion::GetLocalNetworkVersionOverride.BindLambda([]() {
		return GetTypeHash(GetVersionString());
	});

	FString SaveDir = FPaths::ProjectSavedDir() + TEXT("Map/");
	UE_LOG(LogTemp, Log, TEXT("Check directory: %s"), *SaveDir);
	IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
	if (!PlatformFile.DirectoryExists(*SaveDir)) {
		PlatformFile.CreateDirectory(*SaveDir);
		UE_LOG(LogTemp, Log, TEXT("Create directory: %s"), *SaveDir);
		if (!PlatformFile.DirectoryExists(*SaveDir)) {
			UE_LOG(LogTemp, Warning, TEXT("Unable to create directory: %s"), *SaveDir);
		}
	}
}

void FDarkLithosphereGameModule::ShutdownModule() {

}

FString GetVersionString() {
	return TEXT("v0.0.39n-3-pre-alpha-L");
}

FString GlobalSandboxPlayerId;

FString GetSandboxPlayerId() {
	return GlobalSandboxPlayerId;
}

void SetSandboxPlayerId(const FString& SandboxPlayerId) {
	GlobalSandboxPlayerId = SandboxPlayerId;
}

#include "DummyPawn.h"

ADummyPawn::ADummyPawn() {
	PrimaryActorTick.bCanEverTick = true;

	MaxZoom = 3300;
	MinZoom = 400;
	ZoomStep = 50;
}

void ADummyPawn::BeginPlay() {
	Super::BeginPlay();

	AutoPossessPlayer = EAutoReceiveInput::Player0;

	auto CameraBoom = FindComponentByClass<USpringArmComponent>();
	if (CameraBoom) {
		InitialTargetArmLength = CameraBoom->TargetArmLength;
	}

	auto CursorMeshComponent = GetCursorMesh();
	if (CursorMeshComponent) {
		CursorMeshComponent->SetVisibility(false, true);
	}

}

void ADummyPawn::Tick(float DeltaTime) {
	Super::Tick(DeltaTime);
}

void ADummyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	InputComponent->BindAxis("Move Forward / Backward", this, &ADummyPawn::MoveForward);
	InputComponent->BindAxis("Move Right / Left", this, &ADummyPawn::MoveRight);

	InputComponent->BindAction("Mouse Wheel Up", IE_Released, this, &ADummyPawn::ZoomIn);
	InputComponent->BindAction("Mouse Wheel Down", IE_Released, this, &ADummyPawn::ZoomOut);
}

void ADummyPawn::MoveForward(float Value) {
	AddMovementInput(FVector(1, 0, 0), Value);
}

void ADummyPawn::MoveRight(float Value) {
	AddMovementInput(FVector(0, 1, 0), Value);
}

void ADummyPawn::ZoomIn() {
	auto CameraBoom = FindComponentByClass<USpringArmComponent>();
	if (CameraBoom) {
		if (CameraBoom->TargetArmLength > MinZoom) {
			CameraBoom->TargetArmLength -= ZoomStep;
			UE_LOG(LogTemp, Warning, TEXT("ZoomIn: %f"), CameraBoom->TargetArmLength);
		}
	}
}

void ADummyPawn::ZoomOut() {
	auto CameraBoom = FindComponentByClass<USpringArmComponent>();
	if (CameraBoom) {
		if (CameraBoom->TargetArmLength < MaxZoom) {
			CameraBoom->TargetArmLength += ZoomStep;
			UE_LOG(


 = buffer })

    map("x", "<C-k>", surround_link, { buffer = buffer })

    map({ "n", "i" }, "<A-1>", toggle_heading(1), { buffer = buffer })
    map({ "n", "i" }, "<A-2>", toggle_heading(2), { buffer = buffer })
    map({ "n", "i" }, "<A-3>", toggle_heading(3), { buffer = buffer })
    map({ "n", "i" }, "<A-4>", toggle_heading(4), { buffer = buffer })
    map({ "n", "i" }, "<A-5>", toggle_heading(5), { buffer = buffer })
    map({ "n", "i" }, "<A-6>", toggle_heading(6), { buffer = buffer })
    map({ "n", "i" }, "<A-0>", cycle_heading, { buffer = buffer })
  end,
})


using System;
using System.ComponentModel;
using PluginCore.Localization;

namespace StartPage
{
    [Serializable]
    public class Settings
    {
        private bool closeOnProjectOpen = false;
        private bool showStartPageInsteadOfUntitled = false;
        private ShowStartPageOnStartupEnum showStartPageOnStartup = ShowStartPageOnStartupEnum.NotRestoringSession;
        private bool useCustomStartPage = false;
        private bool useCustomRssFeed = false;
        private string customStartPage = "";
        private string customRssFeed = "";

        #region Common Settings

        /// <summary>
        /// Gets and sets closeOnProjectOpen
        /// </summary>
        [DisplayName("Close Start Page On Project Open")]
        [LocalizedDescription("StartPage.Description.CloseOnProjectOpen")]
        [LocalizedCategory("StartPage.Category.Common")]
        [DefaultValue(false)]
        public bool CloseOnProjectOpen
        {
            get => closeOnProjectOpen;
            set => closeOnProjectOpen = value;
        }

        /// <summary>
        /// Gets and sets showStartPageInsteadOfUntitled
        /// </summary>
        [DisplayName("Show Start Page Instead Of Untitled")]
        [LocalizedDescription("StartPage.Description.ShowStartPageInsteadOfUntitled")]
        [LocalizedCategory("StartPage.Category.Common")]
        [DefaultValue(false)]
        public bool ShowStartPageInsteadOfUntitled
        {
            get => showStartPageInsteadOfUntitled;
            set => showStartPageInsteadOfUntitled = value;
        }

        /// <summary>
        /// Gets and sets showStartPageOnStartup
        /// </summary>
        [DisplayName("Show Start Page On Startup")]
        [LocalizedCategory("StartPage.Category.Common")]
        [LocalizedDescription("StartPage.Description.ShowStartPageOnStartup")]
        [DefaultValue(ShowStartPageOnStartupEnum.NotRestoringSession)]
        public ShowStartPageOnStartupEnum ShowStartPageOnStartup
        {
            get => showStartP


�ד",
Print				: "הדפסה",
SelectAll			: "בחירת הכל",
RemoveFormat		: "הסרת העיצוב",
InsertLinkLbl		: "קישור",
InsertLink			: "הוספת/עריכת קישור",
RemoveLink			: "הסרת הקישור",
Anchor				: "הוספת/עריכת נקודת עיגון",
AnchorDelete		: "הסר נקודת עיגון",
InsertImageLbl		: "תמונה",
InsertImage			: "הוספת/עריכת תמונה",
InsertFlashLbl		: "פלאש",
InsertFlash			: "הוסף/ערוך פלאש",
InsertTableLbl		: "טבלה",
InsertTable			: "הוספת/עריכת טבלה",
InsertLineLbl		: "קו",
InsertLine			: "הוספת קו אופקי",
InsertSpecialCharLbl: "תו מיוחד",
InsertSpecialChar	: "הוספת תו מיוחד",
InsertSmileyLbl		: "סמיילי",
InsertSmiley		: "הוספת סמיילי",
About				: "אודות FCKeditor",
Bold				: "מודגש",
Italic				: "נטוי",
Underline			: "קו תחתון",
StrikeThrough		: "כתיב מחוק",
Subscript			: "כתיב תחתון",
Superscript			: "כתיב עליון",
LeftJustify			: "יישור לשמאל",
CenterJustify		: "מרכוז",
RightJustify		: "יישור לימין",
BlockJustify		: "יישור לשוליים",
DecreaseIndent		: "הקטנת אינדנטציה",
IncreaseIndent		: "הגדלת אינדנטציה",
Blockquote			: "בלוק ציטוט",
Undo				: "ביטול צעד אחרון",
Redo				: "חזרה על צעד אחרון",
NumberedListLbl		: "רשימה ממוספרת",
NumberedList		: "הוספת/הסרת רשימה ממוספרת",
BulletedListLbl		: "רשימת נקודות",
BulletedList		: "הוספת/הסרת רשימת נקודות",
ShowTableBorders	: "הצגת מסגרת הטבלה",
ShowDetails			: "הצגת פרטים",
Style				: "סגנון",
FontFormat			: "עיצוב",
Font				: "גופן",
FontSize			: "גודל",
TextColor			: "צבע טקסט",
BGColor				: "צבע רקע",
Source				: "מקור",
Find				: "חיפוש",
Replace				: "החלפה",
SpellCheck			: "בדיקת איות",
UniversalKeyboard	: "מקלדת אוניברסלית",
PageBreakLbl		: "


c<char>>) -> Result<Filesystem, err::Error> {
  match privileges::has_sufficient_privileges() {
    Ok(true) => {}
    Ok(false) => {
      eprintln!("This program must be run elevated!");
    }
    Err(err) => {
      eprintln!("Failed to check privilege level: {:?}", err);
      println!("Continuing anyway, although things will probably fail.");
    }
  }

  let mut filesystem = Filesystem::new();
  for volume in volumes::VolumeIterator::new().unwrap() {
    match volume {
      Ok(volume) => {
        if !volume.paths.is_empty() {
          if let Some(ref whitelist) = drive_letters {
            let checker = |path: &OsString| {
              if let Some(first_char) = path.to_string_lossy().chars().next() {
                whitelist.contains(&first_char)
              } else {
                false
              }
            };

            if !volume.paths.iter().any(checker) {
              continue;
            }
          }
          filesystem.handle_volume(volume);
        }
      }
      Err(err) => {
        eprintln!("VolumeIterator produced an error: {:?}", err);
      }
    }
  }
  Ok(filesystem)
}
<reponame>ARM-software/armour<gh_stars>1-10
/*
 * Copyright (c) 2021 Arm Limited.
 *
 * SPDX-License-Identifier: MIT
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

type Host = actix::Addr<super::host::ArmourDataHost>;

pub mod service {
	use crate::host::{Launch, PolicyCommand};
	use crate::instance::InstanceSelector;
	use actix_web::{delete, post, web, HttpResponse};
	use armour_api::host::{OnboardInformation, Proxies, Proxy};
	use armour_api::proxy::{HttpConfig, LabelOp, PolicyRequest};
	use armour_lang::labels::{Labels};
	use std::collections::{HashMap};

	#[derive(Debug)]
	struct MailboxError;

	impl std::fmt::Display for MailboxError {
		fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
			write!(f, "mailbox error")
		}
	}
	impl From<actix::MailboxError> for MailboxError {
		fn from(_: actix::MailboxError) -> Self {
			MailboxError
		}
	}
	impl actix_web::ResponseError for MailboxError {
		fn error_response(&self) -> HttpResponse {
			log::warn!("mailbox error");
			HttpResponse::BadRequest().finish()
		}
	}

	async fn launch_proxy(host: &super::Host, proxy: &Proxy) -> Result<(), MailboxError> {
		// start a proxy