/* Copyright (C) 2000-2024 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <https://www.gnu.org/licenses/>.  */

/* Create a table from Unicode to CHARSET.
   This is a good test for CHARSET's iconv() module, in particular the
   TO_LOOP BODY macro.  */

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>
#include <errno.h>

int
main (int argc, char *argv[])
{
  const char *charset;
  iconv_t cd;
  int bmp_only;
  int no_tags;

  if (argc != 2)
    {
      fprintf (stderr, "Usage: tst-table-to charset\n");
      return 1;
    }
  charset = argv[1];

  cd = iconv_open (charset, "UTF-8");
  if (cd == (iconv_t)(-1))
    {
      perror ("iconv_open");
      return 1;
    }

  /* When testing UTF-8, stop at 0x10000, otherwise the output
     file gets too big.  */
  bmp_only = (strcmp (charset, "UTF-8") == 0);
  /* When testing any encoding other than UTF-8 or GB18030, stop at 0xE0000,
     because the conversion drops Unicode tag characters (range
     U+E0000..U+E007F).  */
  no_tags = !(strcmp (charset, "UTF-8") == 0
	      || strcmp (charset, "GB18030") == 0);

  {
    unsigned int i;
    unsigned char buf[10];
    for (i = 0; i < (bmp_only ? 0x10000 : no_tags ? 0xE0000 : 0x110000); i++)
      {
	unsigned char in[6];
	unsigned int incount =
	  (i < 0x80 ? (in[0] = i, 1)
	   : i < 0x800 ? (in[0] = 0xc0 | (i >> 6),
			  in[1] = 0x80 | (i & 0x3f), 2)
	   : i < 0x10000 ? (in[0] = 0xe0 | (i >> 12),
			    in[1] = 0x80 | ((i >> 6) & 0x3f),
			    in[2] = 0x80 | (i & 0x3f), 3)
	   : /* i < 0x200000 */ (in[0] = 0xf0 | (i >> 18),
				 in[1] = 0x80 | ((i >> 12) & 0x3f),
				 in[2] = 0x80 | ((i >> 6) & 0x3f),
				 in[3] = 0x80 | (i & 0x3f), 4));
	const char *inbuf = (const char *) in;
	size_t inbytesleft = incount;
	char *outbuf = (char *) buf;
	size_t outbytesleft = sizeof (buf);
	size_t result;
	size_t result2 = 0;

	iconv (cd, NULL, NULL, NULL, NULL);
	result = iconv (cd,
			(char **) &inbuf, &inbytesleft,
			&outbuf, &outbytesleft);
	if (result != (size_t)(-1))
	  result2 = iconv (cd, NULL, NULL, &outbuf, &outbytesleft);

	if (result == (size_t)(-1) || result2 == (size_t)(-1))
	  {
	    if (errno != EILSEQ)
	      {
		int saved_errno = errno;
		fprintf (stderr, "0x%02X: iconv error: ", i);
		errno = saved_errno;
		perror ("");
		return 1;
	      }
	  }
	else if (result == 0) /* ignore conversions with transliteration */
	  {
	    unsigned int j, jmax;
	    if (inbytesleft != 0 || outbytesleft == sizeof (buf))
	      {
		fprintf (stderr, "0x%02X: inbytes = %ld, outbytes = %ld\n", i,
			 (long) (incount - inbytesleft),
			 (long) (sizeof (buf) - outbytesleft));
		return 1;
	      }
	    jmax = sizeof (buf) - outbytesleft;
	    printf ("0x");
	    for (j = 0; j < jmax; j++)
	      printf ("%02X", buf[j]);
	    printf ("\t0x%04X\n", i);
	  }
      }
  }

  if (iconv_close (cd) < 0)
    {
      perror ("iconv_close");
      return 1;
    }

  if (ferror (stdin) || fflush (stdout) || ferror (stdout))
    {
      fprintf (stderr, "I/O error\n");
      return 1;
    }

  return 0;
}


daf6432acb7df41a5ee16b2a6))
* **frontend:** dynamically determine menus based on mode ([5e969ff](https://github.com/Viren070/AIOStreams/commit/5e969ff2dc46d0d0897b86b7df0452e80da84f20))
* give priority to URL/service over infoHash ([085d394](https://github.com/Viren070/AIOStreams/commit/085d394c03c33cee6b30ba26026a19e5e0fdfd10))
* remove required attribute from service credential fields, ([571ea7f](https://github.com/Viren070/AIOStreams/commit/571ea7fbc30f5216cbe439be7333b310eafbb2c1))
* set value of default URL to undefined so updates to env apply for all users when using multiple URLs ([a3007e6](https://github.com/Viren070/AIOStreams/commit/a3007e659f57ea61edfba2e8066f67853d58eeec))

## [2.11.6](https://github.com/Viren070/AIOStreams/compare/v2.11.5...v2.11.6) (2025-08-28)

### Bug Fixes

* correctly extract json error for error metas ([5ddab33](https://github.com/Viren070/AIOStreams/commit/5ddab3308219aa17c0f89b3d522d3408f20e2ebf))
* **presets/aiostreams:** passthrough the proxied attribute ([62bf6de](https://github.com/Viren070/AIOStreams/commit/62bf6de6d9087ee5cd74942585b286fd2eda8296)), closes [#321](https://github.com/Viren070/AIOStreams/issues/321)

## [2.11.5](https://github.com/Viren070/AIOStreams/compare/v2.11.4...v2.11.5) (2025-08-26)

### Bug Fixes

* **parser:** improve BluRay REMUX regex ([4a658a1](https://github.com/Viren070/AIOStreams/commit/4a658a11159cfd9e15198b8f4f0dfa53e5e0b56e))
* **presets/webstreamr:** return original parsed file when no resolution matched ([07db3d9](https://github.com/Viren070/AIOStreams/commit/07db3d9d542d51c15f5364a1be543c6c8578c9c4))

## [2.11.4](https://github.com/Viren070/AIOStreams/compare/v2.11.3...v2.11.4) (2025-08-26)

### Bug Fixes

* fallback to undefined when name is null ([757138e](https://github.com/Viren070/AIOStreams/commit/757138ee4073cc1badec96cb0208d483ddf94df9))
* only define bingeGroup when auto play is enabled ([de47fff](https://github.com/Viren070/AIOStreams/commit/de47fffdee081669c82808c7986f2aabd833b49d))
* **presets/webstreamr:** update provider list, add show error option, parse error streams, only use resolution from stream name, ([1fd6730](https://github.com/Viren070/AIOStreams/commit/1fd67309b0306058f04f31502d49045524d004d8))

## [2.11.3](https://github.com/Viren070/AIOStreams/compare/v2.11.2...v2.11.3) (2025-08-25)

### Features

* add alternate `u` prefixed formatter language variables and sort language variables based on language sett


aligncenter size-full wp-image-152776"
        srcset="https://koenig-media.raywenderlich.com/uploads/2017/01/RunPrefs-2.png 700w, https://koenig-media.raywenderlich.com/uploads/2017/01/RunPrefs-2-367x320.png 367w, https://koenig-media.raywenderlich.com/uploads/2017/01/RunPrefs-2-573x500.png 573w"
        sizes="(max-width: 700px) 100vw, 700px">

        Sandboxing

        Before you dive into the code, take a minute to consider sandboxing. If
        you are an iOS developer, you will already be familiar with this concept
        – if not, read on.

        A sandboxed app has its own space to work in with separate file storage
        areas, no access to the files created by other apps and limited access
        and permissions. For iOS apps, this is the only way to operate. For macOS
        apps, this is optional; however, if you want to distribute your apps through
        the Mac App Store, they must be sandboxed. As a general rule, you should
        sandbox your apps, as this gives your apps less potential to cause problems.

        To turn on sandboxing for the Egg Timer app, select the project in the

            Project Navigator

        — this is the top entry with the blue icon. Select

            EggTimer

        in the

            Targets

        list (there will only be one target listed), then click

            Capabilities

        in the tabs across the top. Click the switch to turn on

            App Sandbox

        . The display will expand to show the various permissions you can now
        request for your app. This app doesn’t need any of these, so leave them
        all unchecked.

        Organizing Your Files

        Look at the

            Project Navigator

        . All the files are listed with no particular organization. This app will
        not have very many files, but grouping similar files together is good practice
        and allows for more efficient navigation, especially with larger projects.

        Select the two view controller files by clicking on one and Shift-clicking
        on the next. Right-click and choose


mbiz_png/wpkib3J60o2ibNxWjKibCgKgKTiadTJ4DXObibWCphHjoWN2of7Jq015loSZpsaQGftMDd6icoZvDLvLddSc1libq81tA/640?wx_fmt=png "")

图 MITM攻击图

最后，利用漏洞4发现重放攻击，重返之前嗅探到了可以改变灯泡功能的消息。
# 漏洞补丁和修复

研究人员已将相关漏洞提交给了TP-Link，厂商也告知研究人员已经修复了相关漏洞。但论文中未给出详细的漏洞和补丁信息，以及受影响的版本。

论文下载地址：https://arxiv.org/pdf/2308.09019.pdf

参考及来源：https://www.bleepingcomputer.com/news/security/tp-link-smart-bulbs-can-let-hackers-steal-your-wifi-password/

![](https://mmbiz.qpic.cn/sz_mmbiz_png/wpkib3J60o2ibNxWjKibCgKgKTiadTJ4DXOborMluZyqByLibm3Am2vxz6wQkdSbv6cHTVC32SwDmUVP7ykcF3dfUtQ/640?wx_fmt=png "")

![](https://mmbiz.qpic.cn/sz_mmbiz_png/wpkib3J60o2ibNxWjKibCgKgKTiadTJ4DXObhDf1gtS9pg5yatoTER6Mr4ZCgmXhS7daAibnFLkB9hxhecZPZEf1cOQ/640?wx_fmt=png "")

#  D-Link Go-RT-AC750命令注入漏洞复现
伯爵的信仰  看雪学苑   2023-08-11 18:01

```
```

前面的复现都是以CVE编号为主的复现，这次换个方式，以路由器型号为单位进行复现。本次复现的命令注入漏洞都是D-Link Go-RT-AC750中存在的漏洞，目前一共有五个：

![](https://mmbiz.qpic.cn/sz_mmbiz_png/1UG7KPNHN8EibNpB8ibUsBVL66eEX8w6S1ic8LkOJnodURkkbmfvfpnqfTicyl0I4HYaIdUrm6RoL1tZYgG6iaOqCOA/640?wx_fmt=png "")

```
```

在对D-Link Go-RT-AC750命令注入漏洞复现前先了解一些背景知识


local weakkey_tbl = { __mode = "k" }
local t1 = setmetatable({}, weakkey_tbl)

ga = {}
gb = {}

do
    t1[1] = "test1"
    t1[2] = function() end
    t1["test"] = "test2"

    local t_str3 = "test3"
    local key = {}
    t1[key] = t_str3

    local t_str4 = "test4"
    local xxfunc = function() end
    t1[xxfunc] = t_str4

    local tv1 = {}
    local tv2 = {}
    t1[tv1] = tv2
    t1[tv2] = tv1
    t1[ga] = gb
    t1[gb] = ga
end

ga = nil
gb = nil

collectgarbage()

print("------------------")
for k, v in pairs(t1) do
    print(k, v)
end

local weakvalue_tbl = { __mode = "v" }
local t2 = setmetatable({}, weakvalue_tbl)
do
    t2[1] = 1
    t2[2] = "test2"
    t2[3] = function() end
    t2["xxfunc"] = function() end

    local vtbl = {}


Hooks:Register("BeardLibFrameworksInit")
Hooks:Register("BeardLibFrameworksLoad")
Hooks:Register("BeardLibFrameworksFindMods")
Hooks:Register("BeardLibFrameworksSortMods")
Hooks:Register("BeardLibFrameworksInitMods")
Hooks:Register("BeardLibFrameworksInitMod")
Hooks:Register("BeardLibFrameworksFoldersLoop")

FrameworkBase = FrameworkBase or BeardLib:Class()

FrameworkBase._directory = BLTModManager.Constants.mods_directory or "mods/"
FrameworkBase._format = Path:Combine(FrameworkBase._directory, "%s", "main.xml")
FrameworkBase._mod_core = ModCore
FrameworkBase._ignore_folders = {["base"] = true, ["BeardLib"] = true, ["PAYDAY-2-BeardLib-master"] = true, ["downloads"] = true, ["logs"] = true, ["saves"] = true}
FrameworkBase._ignore_detection_errors = true

FrameworkBase.main_file_name = "main.xml"
FrameworkBase.add_file = "add.xml"
FrameworkBase.loading_scene_file_name = "enable_in_loading_scene"
FrameworkBase.auto_init_modules = true
FrameworkBase.type_name = "Base"
FrameworkBase.menu_color = Color(0.6, 0, 1)
FrameworkBase.add_configs = {}
FrameworkBase._loaded_instances = {}

function FrameworkBase:init()
	Hooks:Call("BeardLibFrameworksInit", self)
	BeardLib:RegisterFramework(self.type_name, self)

	self._ignored_configs = {}
	self._loaded_mods = {}
	self._sorted_mods = {}
	self._waiting_to_load = {}
	self._overridden_files = {}
	self._log_init = BeardLib.Options:GetValue("LogInit")

	-- Deprecated, try not to use.
	if AddFramework and self.type_name == AddFramework.type_name then
		BeardLib.Frameworks.base = self
		BeardLib.managers.BaseFramework = self
	end

	Hooks:Add("BeardLibRequireHook", self.type_name.."_framework_require", function(post, file)
		self:CheckModQueue(post, file)
	end)

	self:Load()
end

function FrameworkBase:CheckModQueue(post, file)
	if #self._waiting_to_load == 0 or post == nil or file == nil then
		return
	end
	local shortened = file
	for part, _ in string.gmatch(file, "%w+") do
		shortened = part
	end
	shortened = shortened:lower()

	local next_queue = {}
	local load = {}
	local pre = not post
	for _, mod in pairs(self._waiting_to_load) do
		local config = mod._config
		if (post and config.post_hook == shortened) or (pre and config.pre_hook == shortened) then
			table.insert(load, mod)
		else
			table.insert(next_queue, mod)
		end
	end

	for _, mod in pairs(load) do
		mod:PreInitModules(self.auto_init_modules)
	end

	self._waiting_to_load = next_queue
end

function FrameworkBase:Load()
	Hooks:Call("BeardLibFrameworksLoad", self)
	if DB then
		self:FindAlreadyOverriden()
	end
	self:FindMods()
	self:SortMods()
end

--- Search for files that were overriden by mod_overrides and ignore them in other folders
function FrameworkBase:FindAlreadyOverriden()
	for _, mod in pairs(DB:mods()) do
		if mod.enabled then
			for _, file in pairs(mod.files) do
				self._overridden_files[file] = true
			end
		end
	end
end

function FrameworkBase:FindMods()
	Hooks:Call("BeardLibFrameworksFindMods", self)

	local is_raid = BeardLib:GetGame() == "raid"

	local dirs = FileIO:GetFolders(self._directory)
    if dirs then
		for _, folder_name in pairs(dirs) do
			Hooks:Call("BeardLibFrameworksFoldersLoo


/*
Copyright (C) 1996-1997 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
// net_ser.h

int			Serial_Init (void);
void		Serial_Listen (qboolean state);
void		Serial_SearchForHosts (qboolean xmit);
qsocket_t	*Serial_Connect (char *host);
qsocket_t 	*Serial_CheckNewConnections (void);
int			Serial_GetMessage (qsocket_t *sock);
int			Serial_SendMessage (qsocket_t *sock, sizebuf_t *data);
int			Serial_SendUnreliableMessage (qsocket_t *sock, sizebuf_t *data);
qboolean	Serial_CanSendMessage (qsocket_t *sock);
qboolean	Serial_CanSendUnreliableMessage (qsocket_t *sock);
void		Serial_Close (qsocket_t *sock);
void		Serial_Shutdown (void);


SL_MIN_DBL(a,b)   GSL_MIN(a,b)
#define GSL_MAX_LDBL(a,b)  GSL_MAX(a,b)
#define GSL_MIN_LDBL(a,b)  GSL_MIN(a,b)
#endif /* HAVE_INLINE */

/* Definition of an arbitrary function with parameters */

struct gsl_function_struct
{
  double (* function) (double x, void * params);
  void * params;
};

typedef struct gsl_function_struct gsl_function ;

#define GSL_FN_EVAL(F,x) (*((F)->function))(x,(F)->params)

/* Definition of an arbitrary function returning two values, r1, r2 */

struct gsl_function_fdf_struct
{
  double (* f) (double x, void * params);
  double (* df) (double x, void * params);
  void (* fdf) (double x, void * params, double * f, double * df);
  void * params;
};

typedef struct gsl_function_fdf_struct gsl_function_fdf ;

#define GSL_FN_FDF_EVAL_F(FDF,x) (*((FDF)->f))(x,(FDF)->params)
#define GSL_FN_FDF_EVAL_DF(FDF,x) (*((FDF)->df))(x,(FDF)->params)
#define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy) (*((FDF)->fdf))(x,(FDF)->params,(y),(dy))

/* Definition of an arbitrary vector-valued function with parameters */

struct gsl_function_vec_struct
{
  int (* function) (double x, double y[], void * params);
  void * params;
};

typedef struct gsl_function_vec_struct gsl_function_vec ;

#define GSL_FN_VEC_EVAL(F,x,y) (*((F)->function))(x,y,(F)->params)

__END_DECLS

#endif /* __GSL_MATH_H__ */


| Description |
| ----- | ----------- |
| [GD-ZCRGB012](giderwel/gd-zcrgb012.md) | GIDERWEL Smart Zigbee RGB LED strip controller |

# GIEX {#giex}

| Model | Description |
| ----- | ----------- |
| [GX02](giex/qt06_2.md) | GiEX Water valve (white-label of GiEX QT06_2) |
| [GX03](giex/gx03.md) | GIEX GIEX 2 zone watering timer |
| [GX04](tuya/ts0601_soil_3.md) | GIEX Soil Moisture Sensor (white-label of Tuya TS0601_soil_3) |
| [QT06_1](giex/qt06_1.md) | GiEX Water irrigation valve |
| [QT06_2](giex/qt06_2.md) | GiEX Water irrigation valve |

# Gira {#gira}

| Model | Description |
| ----- | ----------- |
| [2430-100](insta/instaremote.md) | Gira ZigBee Light Link wall/handheld transmitter (white-label of Insta InstaRemote) |
| [2435-10](insta/instaremote.md) | Gira ZigBee Light Link wall/handheld transmitter (white-label of Insta InstaRemote) |

# Girier {#girier}

| Model | Description |
| ----- | ----------- |
| [JR-ZDS01](girier/jr-zds01.md) | Girier 1 gang mini switch |
| [TS130F_GIRIER](moes/ms-108zr.md) | Girier Smart curtain switch (white-label of Moes MS-108ZR) |
| [ZB08](tuya/ts0013_switch_module.md) | Girier 3 Channel Switch Module-L - (No Neutral Wire) (white-label of Tuya TS0013_switch_module) |

# Gledopto {#gledopto}

| Model | Description |
| ----- | ----------- |
| [GD-CZ-006](gledopto/gd-cz-006.md) | Gledopto Zigbee LED Controller WW/CW |
| [GL-B-001P](gledopto/gl-b-001p.md) | Gledopto Zigbee 4W E12/E14 Bulb RGB+CCT (pro) |
| [GL-B-001Z](gledopto/gl-b-001z.md) | Gledopto Zigbee 4W E12/E14 Bulb RGB+CCT |
| [GL-B-001ZS](gledopto/gl-b-001zs.md) | Gledopto Zigbee 4W E12/E14 Bulb RGB+CCT (plus) |
| [GL-B-002P](gledopto/gl-b-002p.md) | Gledopto Zigbee smart filament LED bulb |
| [GL-B-003P](gledopto/gl-b-003p.md) | Gledopto Zigbee 7W E26/E27 Bulb RGB+CCT (pro) |
| [GL-B-004P](gledopto/gl-b-004p.md) | Gledopto Filament LED light bulb E27 G95 7W pro |
| [GL-B-007P](gledopto/gl-b-007p.md) | Gledopto Zigbee 6W E26/E27 Bulb RGB+CCT (pro) |
| [GL-B-007Z](gledopto/gl-b-007z.md) | Gledopto Zigbee 6W E26/E27 Bulb RGB+CCT |
| [GL-B-007ZS](gledopto/gl-b-007zs.md) | Gledopto Zigbee 6W E26/E27 Bulb RGB+CCT (plus) |
| [GL-B-008P](gledopto/gl-b-008p.md) | Gledopto Zigbee 12W E26/E27 Bulb RGB+CCT (pro) |
| [GL-B-008Z](gledopto/gl-b-008z.md) | Gledopto Zigbee 12W E26/E27 Bulb RGB+CCT |
| [GL-B-008ZS](gledopto/gl-b-008zs.md


ement"},class:"p5.dom",module:"p5.dom",submodule:"p5.dom"},{file:"lib/addons/p5.dom.js",line:965,class:"p5.dom",module:"p5.dom",submodule:"p5.dom"},{file:"lib/addons/p5.dom.js",line:975,description:'
Creates a new <video> element that contains the audio/video feed\nfrom a webcam. This can be drawn onto the canvas using video().
\n
More specific properties of the feed can be passing in a Constraints object.\nSee the\n W3C\nspec for possible properties. Note that not all of these are supported\nby all browsers.
\n
Security note: A new browser security specification requires that getUserMedia,\nwhich is behind createCapture(), only works when you're running the code locally,\nor on HTTPS. Learn more here\nand here.
',itemtype:"method",name:"createCapture",params:[{name:"type",description:"
type of capture, either VIDEO or\n                                   AUDIO if none specified, default both,\n                                   or a Constraints object
\n",type:"String|Constant|Object"},{name:"callback",description:"
function to be called once\n                                   stream has loaded
\n",type:"Function"}],return:{description:"capture video p5.Element",type:"Object|p5.Element"},example:["\n
\nvar capture;\n\nfunction setup() {\n  createCanvas(480, 120);\n  capture = createCapture(VIDEO);\n}\n\nfunction draw() {\n  image(capture, 0, 0, width, width*capture.height/capture.width);\n  filter(INVERT);\n}\n
\n
\nfunction setup() {\n  createCanvas(480, 120);\n  var constraints = {\n    video: {\n      mandatory: {\n        minWidth: 1280,\n        minHeight: 720\n      },\n      optional: [\n        { maxFrameRate: 10 }\n      ]\n    },\n    audio: true\n  };\n  createCapture(constraints, function(stream) {\n    console.log(stream);\n  });\n}\n
"],class:"p5.dom",module:"p5.dom",submodule:"p5.dom"},{file:"lib/addons/p5.dom.js",line:1080,description:"
Creates element with given tag in the DOM with given content.\nAppends to the container node if one is specified, otherwise\nappends to body.
\n",itemtype:"method",name:"createElement",params:[{name:"tag",description:"
tag for the new element
\n",type:"String"},{name:"content",description:"
html content to be inserted into the element
\n",type:"String",optional:!0}],return:{description:"pointer to p5.Element holding created node",type:"Object|p5.Element"},example:["\n
\nvar h2 = createElement('h2','im an h2 p5.element!');\n
"],class:"p5.dom",module:"p5.dom",submodule:"p5.dom"},{file:"lib/addons/p5.dom.js",line:1106,description:"
Adds specified class to the element.
\n",itemtype:"method",name:"addClass",params:[{name:"class",description:"
name of class to add
\n",type:"String"}],return:{description:"",type:"Object|p5.Element"},example:["\n
\n var div = createDiv('div');\n div.addClass('myClass');\n
"],class:"p5.Element",module:"p5.dom",submodule:"p5.dom"},{file


standard Noita functions
-- @return pointer to internal material data (aka cell data).
-- @usage local gold_ptr = world_ffi.get_material_ptr(CellFactory_GetType("gold"))
function world_ffi.get_material_ptr(id)
    local game_global = ffi.cast("char**", 0x01014760)[0]
    local cell_factory = ffi.cast('char**', (game_global + 0x18))[0]
    local begin = ffi.cast('char**', cell_factory + 0x18)[0]
    local ptr = begin + material_props_size * id
    return ptr
end

--- Turn a material pointer into a standard material id.
-- @param ptr pointer to a material (aka cell data)
-- @treturn int material id that is accepted by standard Noita functions such as
-- `CellFactory_GetUIName` and `ConvertMaterialOnAreaInstantly`.
-- @usage local mat_id = world_ffi.get_material_id(cell.vtable.get_material(cell))
-- @see get_material_ptr
function world_ffi.get_material_id(ptr)
    local game_global = ffi.cast("char**", 0x01014760)[0]
    local cell_factory = ffi.cast('char**', (game_global + 0x18))[0]
    local begin = ffi.cast('char**', cell_factory + 0x18)[0]
    local offset = ffi.cast('char*', ptr) - begin
    return offset / material_props_size
end

return world_ffi


.rdb.operator.builder.fragments.term.ForeignKeyTermFragmentBuilder;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class SimpleTermsFragmentBuilder extends AbstractTermsFragmentBuilder<TableOrViewMetadata> {

    private static final SimpleTermsFragmentBuilder INSTANCE = new SimpleTermsFragmentBuilder();

    private SimpleTermsFragmentBuilder() {

    }

    public static SimpleTermsFragmentBuilder instance() {
        return INSTANCE;
    }

    @Override
    public SqlFragments createTermFragments(TableOrViewMetadata parameter, List<Term> terms) {
        return super.createTermFragments(parameter, terms);
    }

    @Override
    protected SqlFragments createTermFragments(TableOrViewMetadata table, Term term) {
        return createByTable(table, term);
    }

    public static SqlFragments createByTable(TableOrViewMetadata table, Term term) {
        String columnName = term.getColumn();
        if (columnName == null) {
            if (term.getValue() instanceof NativeSql) {
                NativeSql sql = ((NativeSql) term.getValue());
                return SimpleSqlFragments.of(sql.getSql(), sql.getParameters());
            }
            return EmptySqlFragments.INSTANCE;
        }

        if (columnName.contains(".")) {
            String[] arr = StringUtils.split(columnName,'.');
            if (table.equalsNameOrAlias(arr[0])) {
                columnName = arr[1];
            } else {
                return table
                    .getForeignKey(arr[0])
                    .flatMap(key -> key
                        .getSource()
                        .findFeature(ForeignKeyTermFragmentBuilder.ID)
                        .map(builder -> builder.createFragments(table.getName(), key, createForeignKeyTerm(key, term))))
                    .orElse(EmptySqlFragments.INSTANCE);
            }
        }

        RDBColumnMetadata column = table.getColumn(columnName).orElse(null);
        if (column == null) {
            return EmptySqlFragments.INSTANCE;
        }

        TermFragmentBuilder builder = column
            .findFeature(TermFragmentBuilder.createFeatureId(term.getTermType()))
            .orElse(null);

        if (builder != null) {
            return builder
                .createFragments(column.getQuoteName(), column, term);
        }

        return EmptySqlFragments.INSTANCE;
    }

    static List<Term> createForeignKeyTerm(ForeignKeyMetadata keyMetadata, Term term) {
        Term copy = term.clone();
        //只要是嵌套到外键表的条件则认为是关联表的条件
        term.setTerms(new LinkedList<>());

        return Collections.singletonList(copy);
    }
}
package org.hswebframework.ezorm.rdb.operator.builder.fragments;

import org.hswebframework.ezorm.core.param.Term;
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
import org.hswebframework.ezorm.rdb.metadata.RDBFeatures;
import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.AbstractTermFragmentBuilder;
import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.NullTermFragmentBuilder;

/**
 * 判断不等于条件时，添加空值条件.
 *

 * 例如 !=、 not like、 not in等，会将null值过滤掉。需要添加一个 isnull的或条件
 *

 * 示例：
 *

 * 通用sql：    where name != 'a'
 * 填充后sql： where (name isnull or name != 'a')
 *
 * @author zhangji 2023/3/22
 */
public class NotFillOrNullFragmentBuilder extends AbstractTermFragmentBuilder {

    private final NullTermFragmentBuilder nullBuilder;
    private final AbstractTermFragmentBuilder notBuilder;

    public NotFillOrNullFragmentBuilder(AbstractTermFragmentBuilder notBuilder) {
        super(notBuilder.getTermType(), notBuilder.getName());


tResult.toList(), setletResult.toList(),
        '$operationName: same toList() result');
    Expect.listEquals([...setResult], [...setletResult],
        '$operationName: same spread result');
  } else {
    Expect.isFalse(true, '$operationName: unexpected result type');
  }
}

void checkModifications<E>(
    String operationName, Set<E> setReceiver, Set<E> setletReceiver) {
  Expect.equals(setReceiver.length, setletReceiver.length,
      '$operationName: same post-operation receiver length');
  Expect.listEquals(setReceiver.toList(), setletReceiver.toList(),
      '$operationName: same post-operation receiver contents');
}
// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:async_helper/async_helper.dart';
import 'package:compiler/src/common/elements.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/elements/entities.dart';
import 'package:compiler/src/elements/names.dart';
import 'package:compiler/src/js_model/js_world.dart' show JClosedWorld;
import 'package:expect/expect.dart';
import 'package:compiler/src/util/memory_compiler.dart';

const String source = '''

class Mixin<T> {
  void method(T t) {}
}
class Super {}
class Class extends Super with Mixin<int> {}

main() {
  Class().method(0);
}
''';

main() {
  asyncTest(() async {
    CompilationResult result =
        await (runCompiler(memorySourceFiles: {'main.dart': source}));
    Expect.isTrue(result.isSuccess);
    Compiler compiler = result.compiler;
    JClosedWorld closedWorld = compiler.backendClosedWorldForTesting!;
    ElementEnvironment elementEnvironment = closedWorld.elementEnvironment;
    ClassEntity cls = elementEnvironment.lookupClass(
        elementEnvironment.mainLibrary!, 'Class')!;
    ClassEntity mixin = elementEnvironment.lookupClass(
        elementEnvironment.mainLibrary!, 'Mixin')!;
    final method =
        elementEnvironment.lookupClassMember(cls, PublicName('method'));
    Expect.isNotNull(method);
    Expect.equals(mixin, method!.enclosingClass);
    Expect.isFalse(method.isAbstract);
  });
}
// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:_fe_analyzer_shared/src/util/link.dart' show Link;
import "package:expect/expect.dart";
import '../helpers/link_helper.dart';

main() {
  test(const Link<Comparable>().prepend('three').prepend(2).prepend('one'),
      ['one', 2, 'three']);
  test(const Link<Comparable>().prepend(3).prepend('two').prepend(1),
      [1, 'two', 3]);
  test(const Link<String>().prepend('single'), ['single']);
  test(const Link(), []);
  testFromList([]);
  testFromList([0]);
  testFromList([0, 1]);


= g_screen_ctx;
	const cx     = x + w / 2;
	const cy     = y + h / 2;
	const scale  = w / sc_w * 24 * g_scale;
	const add_c  = random(MIN_c,MAX_c)/1000;
	const r_amp  = random(MIN_r_amp,MAX_r_amp)/1000;
	const add_nx = random(MIN_nx,MAX_nx)/1000;
	const add_a  = random(MIN_a,MAX_a)/1000;
	const oa     = random(MIN_oa,MAX_oa)/1000;
	const ob     = random(MIN_ob,MAX_ob)/1000;
	const td     = 500;
	const t      = g_time / td;
	const tt     = t / 4;
	const col    = shuffle(createPalette(g_col_url));
	const time   = g_time - g_start_time;

	mtx_scale.scale(scale,scale,scale);
	//mtx_move.translate(0.0,0.0,0.0);
	mtx_rotateA.rotateZ(oa);
	mtx_rotateB.rotateX(ob);

	ctx.save();

	//描画準備
	ctx.globalCompositeOperation = 'lighter';
	ctx.translate(cx,cy);
	ctx.lineWidth = 0.0;

	//描画ループ
	let nx = 0.0;
	let a  = 0.0;
	let b  = 0.0;
	let c  = 0.0;
	const point_num = Math.floor(POINT_NUM * w / sc_w);
	for(let i = 0;i < point_num;++i)
	{
		//円のサイズをノイズで決定
		const n = Math.abs(g_pn.perlin(t + nx,0,tt) * r_amp) * g_scale;
		nx += add_nx;

		//ベジェ曲線を描画
		//
		// ベジェ曲線の計算は下記のサイトを参考にしました。
		// https://ja.javascript.info/bezier-curve
		//
		// 始点(x1,y1) 中間制御点(x2,y2) 終点(x3,y3)の想定で
		//
		// x = (1−t)^2 * x1 + 2 * (1−t) * tx2 + t^2 * x3
		// y = (1−t)^2 * y1 + 2 * (1−t) * ty2 + t^2 * y3
		//

		//Y座標の +0.5は回転の中心をずらすために付けています
		const sss =   1.3;
		const x1  =   8.0 * sss;
		const y1  = (-1.5 + 0.5) * sss;
		const x2  =  -0.5 * sss;
		const y2  = (-1.4 + 0.5) * sss;
		const x3  =   0.1 * sss;
		const y3  = ( 1.0 + 0.5) * sss;

		const tb  = (((random(100) / 100) * MORPH_TIME + time) % MORPH_TIME) / MORPH_TIME;
		const tb2 = tb * tb;
		const tc  = (1.0 - tb);
		const tc2 = tc * tc;

		const px   = (tc2 * x1 + 2.0 * tc * tb * x2 + tb2 * x3) * sss;
		const py   = (tc2 * y1 + 2.0 * tc * tb * y2 + tb2 * y3) * sss;
		const pz   = 0.0;

		mtx_rotateC.rotateY(a);
		a += add_a;

		//色を選択します
		le


olor: #fff;
	background: #fff;
	-webkit-border-radius: 3px;
	-moz-border-radius: 3px;
	border-radius: 3px;
	padding: 5px 10px;
	box-shadow: rgba(0,0,0, 0.08) 0px 0px 5px;
	-moz-box-shadow: rgba(0,0,0, 0.08) 0px 0px 5px;
	-webkit-box-shadow: rgba(0,0,0, 0.08) 0px 0px 5px;
	border: solid 1px #fa9562;
	border: 1px solid rgba(0, 0, 0, .04);
	text-shadow: 1px 1px  rgba(0, 0, 0, .1);
	float: left !important;
	background: #fda56c;
	background-image: linear-gradient(bottom, rgb(254,157,105) 0%, rgb(253,170,111) 100%);
	background-image: -o-linear-gradient(bottom, rgb(254,157,105) 0%, rgb(253,170,111) 100%);
	background-image: -moz-linear-gradient(bottom, rgb(254,157,105) 0%, rgb(253,170,111) 100%);
	background-image: -webkit-linear-gradient(bottom, rgb(254,157,105) 0%, rgb(253,170,111) 100%);
	background-image: -ms-linear-gradient(bottom, rgb(254,157,105) 0%, rgb(253,170,111) 100%);

	background-image: -webkit-gradient(
		linear,
		left bottom,
		left top,
		color-stop(0, rgb(254,157,105)),
		color-stop(1, rgb(253,170,111))
	);
	padding: 11px 10px;
	clear: both;
	margin: 0 0 15px 0;
}

button:hover {
	box-shadow: inset rgba(255,255,255, 0.3) 0px 0px 8px;
	-moz-box-shadow: inset rgba(255,255,255, 0.3) 0px 0px 8px;
	-webkit-box-shadow: inset rgba(255,255,255, 0.3) 0px 0px 8px;
	cursor: pointer;
}

button:active {
	box-shadow: inset rgba(0,0,0, 0.15) 0px 0px 3px;
	-moz-box-shadow: inset rgba(0,0,0, 0.15) 0px 0px 3px;
	-webkit-box-shadow: inset rgba(0,0,0, 0.15) 0px 0px 3px;
}

.text {
    word-wrap: break-word;
}

@media (min-width: 980px) {
	body {
		position: relative;
		padding-top: 40px;
	}
}

.hidden {
	display: none;
}

/* Footer
-------------------------------------------------- */
.footer {
  margin-top: 35px;
  padding: 15px 0 10px;
  border-top: 1px solid #e5e5e5;
}
.footer p {
  margin-bottom: 0;
  color: #555;
}

section {
	margin-bottom: 25px;
}

/* Table Sorter
---------------------------------------------------*/
div.dataTables_length label {
	float: left;
	text-align: left;
}

div.dataTables_filter label {
	float: right;
}

div.dataTables_info {
	padding-top: 8px;
}

div.dataTables_paginate {
	float: right;
	margin: 0;
}

table {
	margin-bottom: 6px !important;
	clear: both;
}

table.table thead .sorting,
table.table thead .sorting_asc,
table.table thead .sorting_desc,
table.table thead .sorting_asc_disabled,


using System;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder;
using Microsoft.Practices.ObjectBuilder;

namespace Composite.Core.Application.Plugins.ApplicationOnlineHandler
{
    [Assembler(typeof(NonConfigurableApplicationOnlineHandlerAssembler))]
    internal class NonConfigurableApplicationOnlineHandler : ApplicationOnlineHandlerData
	{
	}

    internal sealed class NonConfigurableApplicationOnlineHandlerAssembler : IAss


res", optional = true)..uint32_t("waitSemaphoreCount")
    VkSemaphore.const.p("pWaitSemaphores")
    AutoSize("pSwapchains", "pImageIndices", "pResults")..uint32_t("swapchainCount")
    VkSwapchainKHR.const.p("pSwapchains")
    uint32_t.const.p("pImageIndices")
    nullable..VkResult.p("pResults")
}

val VkImageSwapchainCreateInfoKHR = struct(Module.VULKAN, "VkImageSwapchainCreateInfoKHR") {
    Expression("#STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkSwapchainKHR("swapchain")
}

val VkBindImageMemorySwapchainInfoKHR = struct(Module.VULKAN, "VkBindImageMemorySwapchainInfoKHR") {
    Expression("#STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkSwapchainKHR("swapchain")
    uint32_t("imageIndex")
}

val VkAcquireNextImageInfoKHR = struct(Module.VULKAN, "VkAcquireNextImageInfoKHR") {
    Expression("#STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkSwapchainKHR("swapchain")
    uint64_t("timeout")
    VkSemaphore("semaphore")
    VkFence("fence")
    uint32_t("deviceMask")
}

val VkDeviceGroupPresentCapabilitiesKHR = struct(Module.VULKAN, "VkDeviceGroupPresentCapabilitiesKHR", mutable = false) {
    javaImport("static org.lwjgl.vulkan.VK11.*")
    Expression("#STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR")..VkStructureType("sType").mutable()
    nullable..opaque_p("pNext").mutable()
    uint32_t("presentMask")["VK_MAX_DEVICE_GROUP_SIZE"]
    VkDeviceGroupPresentModeFlagsKHR("modes")
}

val VkDeviceGroupPresentInfoKHR = struct(Module.VULKAN, "VkDeviceGroupPresentInfoKHR") {
    Expression("#STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    AutoSize("pDeviceMasks", optional = true)..uint32_t("swapchainCount")
    uint32_t.const.p("pDeviceMasks")
    VkDeviceGroupPresentModeFlagBitsKHR("mode")
}

val VkDeviceGroupSwapchainCreateInfoKHR = struct(Module.VULKAN, "VkDeviceGroupSwapchainCreateInfoKHR") {
    Expression("#STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkDeviceGroupPresentModeFlagsKHR("modes")
}

val VkDisplayModeParametersKHR = struct(Module.VULKAN, "VkDisplayModeParametersKHR") {
    VkExtent2D("visibleRegion")
    uint32_t("refreshRate")
}

val VkDisplayModeCreateInfoKHR = struct(Module.VULKAN, "VkDisplayModeCreateInfoKHR") {
    Expression("#STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR")..VkStructureType("sType")
    nullable..opaque_const_p("pNext")
    VkDisplayModeCreateFlagsKHR("flags")
    VkDisplayModeParametersKHR("parameters")
}

val VkDisplayModePropertiesKHR = struct(Module.VULKAN


    ], 1e-11);
}

#[test]
fn distribution() {
    let Circuit { distribution, .. } = ThreeDICE::new(find("004.stk")).unwrap();
    let distribution = Conventional::from(&distribution);
    let identity = Conventional::from(Diagonal::from_vec((4 * UNITS, UNITS), vec![1.0; UNITS]));
    assert::close(&*distribution, &*identity, 1e-15);
}

#[test]
fn next() {
    let mut simulator = setup("004.stk");
    let mut Q = vec![0.0; 20 * UNITS];
    simulator.next(&fixture::P, &mut Q);
    assert::close(&Q, &fixture::Q[..], 5.0);
}

fn setup(name: &str) -> Simulator {
    let circuit = ThreeDICE::new(find(name)).unwrap();
    Simulator::new(circuit, Config::default()).unwrap()
}

fn find(name: &str) -> PathBuf {
    let path = PathBuf::from("tests/3d-ice/fixtures").join(name);
    assert!(::std::fs::metadata(&path).is_ok());
    path
}
use auto_ops::{impl_op_ex, impl_op_ex_commutative};

#[derive(Clone)]
pub struct Vec2<T> {
    pub x: T,
    pub y: T,
}

impl Vec2<f64> {
    pub fn new() -> Vec2<f64> {
        Vec2 { x: 0.0, y: 0.0 }
    }

    pub fn rotate(&mut self, radians: f64) {
        *self = Vec2 {
            x: self.x * radians.cos() - self.y * radians.sin(),
            y: self.x * radians.sin() + self.y * radians.cos(),
        };
    }

    pub fn length_squared(&self) -> f64 {
        self.x * self.x + self.y * self.y
    }

    pub fn length(&self) -> f64 {
        self.length_squared().sqrt()
    }

    pub fn as_usize(&self) -> Vec2<usize> {
        Vec2 {
            x: self.x as usize,
            y: self.y as usize,
        }
    }
}

impl_op_ex!(+ |lhs: &Vec2<f64>, rhs: &Vec2<f64>| -> Vec2<f64> { Vec2 { x: lhs.x + rhs.x, y: lhs.y + rhs.y } });
impl_op_ex!(-|lhs: &Vec2<f64>, rhs: &Vec2<f64>| -> Vec2<f64> {
    Vec2 {
        x: lhs.x - rhs.x,
        y: lhs.y - rhs.y,
    }
});
impl_op_ex!(+= |lhs: &mut Vec2<f64>, rhs: &Vec2<f64>| { *lhs = Vec2 { x: lhs.x + rhs.x, y: lhs.y + rhs.y } });
impl_op_ex!(-= |lhs: &mut Vec2<f64>, rhs: &Vec2<f64>| { *lhs = Vec2 { x: lhs.x - rhs.x, y: lhs.y - rhs.y } });
impl_op_ex_commutative!(*|lhs: &Vec2<f64>, rhs: &f64| -> Vec2<f64> {
    Vec2 {
        x: lhs.x * rhs,
        y: lhs.y * rhs,
    }
});
impl_op_ex!(/ |lhs: &Vec2<f64>, rhs: &f64| -> Vec2<f64> { lhs * (1.0 / rhs) });

extern crate proj_self;

#[derive(Debug, Eq, PartialEq, Clone, Hash)]
struct Component {
    p1: usize,
    link1: bool,
    p2: usize,
    link2: bool,
}
impl Component {
    pub fn from_str(s: &str) -> Component {
        let parts: Vec<_> = s.trim().split('/').collect();
        Component { p1: parts[0].parse().unwrap(), p2: parts[1].parse().unwrap(), link1: false, link2: false }
    }
}

#[derive(Debug,


 hooks |
| Day 20 | Integration testing | Working system | pytest |

**Success Metrics:**
- ✅ Claude responds to commands
- ✅ Notes auto-process on save
- ✅ Intelligent search works

### 🟠 Phase 2: Knowledge Processing (Weeks 5-8) - HIGH PRIORITY
**Goal**: Extract value from notes through processing

#### Week 5-6: Content Processing
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 21-23 | Concept extraction | NLP pipeline | spaCy |
| Day 24-25 | Tag generation | Auto-tagging | Claude API |
| Day 26-27 | Link detection | Bidirectional links | NetworkX |
| Day 28-30 | Summary generation | Multi-level summaries | Claude |

**Success Metrics:**
- ✅ Concepts extracted from notes
- ✅ Auto-generated tags and links
- ✅ Summaries at multiple levels

#### Week 7-8: Lightweight Streaming
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 31-32 | Fluvio setup (local) | Streaming platform | Fluvio (Rust) |
| Day 33-35 | Quix Streams integration | Python streaming | Quix |
| Day 36-37 | Basic event streaming | Change detection | Watchdog |
| Day 38-40 | File change pipeline | Real-time processing | Fluvio + Quix |

**Success Metrics:**
- ✅ Real-time note processing
- ✅ Stream pipeline operational
- ✅ <100ms processing latency

### 🟡 Phase 3: Knowledge Synthesis (Weeks 9-12) - MEDIUM PRIORITY
**Goal**: Generate insights and teaching materials

#### Week 9-10: Pattern Recognition
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 41-43 | Note clustering | Topic groups | scikit-learn |
| Day 44-46 | Theme detection | Emerging themes | Claude |
| Day 47-50 | Insight generation | Auto-insights | Daft + Ray |

**Success Metrics:**
- ✅ Patterns identified
- ✅ Themes discovered
- ✅ Insights generated weekly

#### Week 11-12: Teaching Generation
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 51-53 | ELI5 generation | Simple explanations | Claude |
| Day 54-55 | Quiz creation | Learning validation | Python |
| Day 56-58 | Learning paths | Guided learning | NetworkX |
| Day 59-60 | Knowledge gaps | Gap analysis | Claude |

**Success Metrics:**
- ✅ Teaching materials generated
- ✅ Knowledge gaps identified
- ✅ Learning paths created

### 🟢 Phase 4: Storage Backend (Weeks 13-16) - LOW PRIORITY
**Goal**: Persistent, scalable storage (only if needed)

#### Week 13-14: Iceberg Tables
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 61-63 | PyIceberg setup | Table management | PyIceberg |
| Day 64-65 | Table creation | Bronze/Silver/Gold | S3 + Iceberg |
| Day 66-68 | Basic CRUD | Data operations | PyIceberg |
| Day 69-70 | Time travel | Version queries | Iceberg |

#### Week 15-16: Vector Search
| Day | Task | Deliverable | Stack |
|-----|------|------------|-------|
| Day 71-72 | Lance setup | Vector store | Lance |
| Day 73-75 | Embedding generation | Note embeddings | Sentence-BERT |
| Day 76-78 | Similarity search | Semantic search | Lance |
| Day 79-80 | Performance testing | Benchmarks | pytest |

## Technology Timeline

### Immediate (Week 1-4)
```bash
pip install markdown gitpython beautifulsoup4 watchdog
# No Java, No JVM, No heavy dependencies
```

### Soon (Week 5-8)
```bash
# Lightweight streaming
curl -sSf https://fluvio.io/install | ba


barrage.cpp" target=_blank>弹幕演示——doufuguolyl（豆腐果）
直线和球的碰撞检测——wysaid
迷宫求解——wysaid

小游戏
拼图游戏——忆_碎碎念

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>putimage_rotatezoom</title>
    <link rel="stylesheet" type="text/css" href="../../css/index-table.css"/>

主页 / 库函数目录 / 图像处理 / putimage_rotatezoom

功能：

绘制旋转后的图像。

声明：

 int putimage_rotatezoom(
    PIMAGE  imgDest,                 // 目标 IMAGE 对象指针
    PCIMAGE imgTexture,              // 纹理 IMAGE 对象指针
    int   xDest,                     // 绘制位置的 x 坐标
    int   yDest,                     // 绘制位置的 y 坐标
    float xCenter,                   // 旋转中心在源图像纹理坐标系上的x坐标
    float yCenter,                   // 旋转中心在源图像纹理坐标系上的y坐标
    float radian,                    // 旋转弧度
    float zoom,                      // 缩放倍数
    bool  transparentColor = false,  // 是否使用图像透明通道
    int   alpha = -1,                // 透明度
    bool  smooth = false             // 是否进行平滑处理
);

参数：

imgDest
绘制的目标图像，如果为NULL则绘制到窗口

imgTexture
要绘制的源图像，该操作不会改变源图像
源图像使用纹理坐标，左上角为 (0.0, 0.0)，右下角为 (1.0, 1.0)，而不是以像素为单位

xDest, yDest
旋转中心在目标图像上的位置（像素坐标）

xCenter, certery
旋转中心在源图像纹理坐标系上的位置。
（源图像左上角为 (


GCOLOR="#CCCCFF" CLASS="TableHeadingColor">

    Method Detail

        dir

public TaskOutputs dir(Object path)

 Registers an output directory for this task.

Parameters:

path -  The output directory. The given path is evaluated as per Project.file.

Returns:

this

        file

public TaskOutputs file(Object path)

 Registers some output file for this task.

Parameters:

path -  The output file. The given path is evaluated as per Project.file.

Returns:

this

        files

public TaskOutputs files(Object... paths)

 Registers some output files for this task.

Parameters:

paths -  The output files. The given paths are evaluated as per Project.files.

Returns:

this

        getFiles

public FileCollection getFiles()

 Returns the output files of this task.

Returns:

The output files. Returns an empty collection if this task has no output files.

        getHasOutput

public boolean getHasOutput()

 Returns true if this task has declared any outputs.


96;a program using one of the Catharon Packages'.

   This license applies to all files distributed in the original Catharon Package(s), including all source code, binaries and documentation, unless otherwise stated in the file in its original, unmodified form as distributed in the original archive. If you are unsure whether or not a particular file is covered by this license, you must contact us to verify this.

   The Catharon Packages are copyright (C) 2000 by Catharon Productions, Inc. All rights reserved except as specified below.

   <<var;name="bullet";original="1.";match=".{0,20}">>
   No Warranty
   --------------

   THE CATHARON PACKAGES ARE PROVIDED `AS IS' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OF OR THE INABILITY TO USE THE CATHARON PACKAGE.

   <<var;name="bullet";original="2.";match=".{0,20}">>
   Redistribution
   -----------------

   This license grants a worldwide, royalty-free, perpetual and irrevocable right and license to use, execute, perform, compile, display, copy, create derivative works of, distribute and sublicense the Catharon Packages (in both source and object code forms) and derivative works thereof for any purpose; and to authorize others to exercise some or all of the rights granted herein, subject to the following conditions:

      <<var;name="bullet";original="o";match=".{0,20}">>
      Redistribution of source code must retain this license file (`license.txt') unaltered; any additions, deletions or changes to the original files must be clearly indicated in accompanying documentation. The copyright notices of the unaltered, original files must be preserved in all copies of source files.

      <<var;name="bullet";original="o";match=".{0,20}">>
      Redistribution in binary form must provide a disclaimer that states that the software is based in part on the work of Catharon Productions, Inc. in the distribution documentation.

   These conditions apply to any software derived from or based on the Catharon Packages, not just the unmodified files. If you use our work, you must acknowledge us. However, no fee need be paid to us.

   <<var;name="bullet";original="3.";match=".{0,20}">>
   Advertising
   --------------

   Neither Catharon Productions, Inc. and contributors nor you shall use the name of the other for commercial, advertising, or promotional purposes without specific prior written permission.

   We suggest, but do not require, that you use the following phrase to refer to this software in your documentation: 'this software is based in part on the Catharon Typography Project'.

   As you have not signed this license, you are not required to accept it. However, as the Catharo


caml_alloc2, .-caml_alloc2

        .align  2
        .globl  caml_allocN
caml_allocN:
        CFI_STARTPROC
        PROFILE
1:      sub     ALLOC_PTR, ALLOC_PTR, ARG
        cmp     ALLOC_PTR, ALLOC_LIMIT
        b.lo    2f
        ret
2:      stp     x29, x30, [sp, -16]!
        CFI_ADJUST(16)
    /* Record the lowest address of the caller's stack frame.  See comment above. */
        add     x29, sp, #16
        STOREGLOBAL(x29, caml_bottom_of_stack)
        add     x29, sp, #0
    /* Record return address */
        STOREGLOBAL(x30, caml_last_return_address)
    /* Call GC.  This preserves ARG */
        bl      .Lcaml_call_gc
    /* Restore return address */
        ldp     x29, x30, [sp], 16
        CFI_ADJUST(-16)
    /* Try again */
        b       1b
        CFI_ENDPROC
        .type   caml_allocN, %function
        .size   caml_allocN, .-caml_allocN

/* Call a C function from OCaml */
/* Function to call is in ARG */

        .align  2
        .globl  caml_c_call
caml_c_call:
        CFI_STARTPROC
        PROFILE
    /* Preserve return address in callee-save register x19 */
        mov     x19, x30
    /* Record lowest stack address and return address */
        STOREGLOBAL(x30, caml_last_return_address)
        add     TMP, sp, #0
        STOREGLOBAL(TMP, caml_bottom_of_stack)
    /* Make the exception handler alloc ptr available to the C code */
        STOREGLOBAL(ALLOC_PTR, caml_young_ptr)
        STOREGLOBAL(TRAP_PTR, caml_exception_pointer)
    /* Call the function */
        blr     ARG
    /* Reload alloc ptr and alloc limit */
        LOADGLOBAL(ALLOC_PTR, caml_young_ptr)
        LOADGLOBAL(ALLOC_LIMIT, caml_young_limit)
    /* Return */
        ret     x19
        CFI_ENDPROC
        .type   caml_c_call, %function
        .size   caml_c_call, .-caml_c_call

/* Start the OCaml program */

        .align  2
        .globl  caml_start_program
caml_start_program:
        CFI_STARTPROC
        PROFILE
        ADDRGLOBAL(ARG, caml_program)

/* Code shared with caml_callback* */
/* Address of OCaml code to call is in ARG */
/* Arguments to the OCaml code are in x0...x7 */

.Ljump_to_caml:
    /* Set up stack frame and save callee-save registers */
        stp     x29, x30, [sp, -160]!
        CFI_ADJUST(160)
        add     x29, sp, #0
        stp     x19, x20, [sp, 16]
        stp     x21, x22, [sp, 32]
        stp     x23, x24, [sp, 48]
        stp     x25, x26, [sp, 64]
        stp     x27, x28, [sp, 80]
        stp     d8, d9, [sp, 96]
        stp     d10, d11, [sp, 112]
        stp     d12, d13, [sp, 128]
        stp     d14, d15, [sp, 144]
    /* Setup a callback link on the stack */
        LOADGLOBAL(x8, caml_bottom_of_stack)
        LOADGLOBAL(x9, caml_last_return_address)
        LOADGLOBAL(x10, caml_gc_regs)
        stp     x8, x9, [sp, -32]!     /* 16-byte alignment */


/javascript\",\"module-type\":\"utils\"},\"$:/core/modules/utils/performance.js\":{\"title\":\"$:/core/modules/utils/performance.js\",\"text\":\"/*\\\\\\ntitle: $:/core/modules/utils/performance.js\\ntype: application/javascript\\nmodule-type: global\\n\\nPerformance measurement.\\n\\n\\\\*/\\n(function(){\\n\\n/*jslint node: true, browser: true */\\n/*global $tw: false */\\n\\\"use strict\\\";\\n\\nfunction Performance(enabled) {\\n\\tthis.enabled = !!enabled;\\n\\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\\n\\tthis.logger = new $tw.utils.Logger(\\\"performance\\\");\\n\\tthis.showGreeting();\\n}\\n\\nPerformance.prototype.showGreeting = function() {\\n\\tif($tw.browser) {\\n\\t\\tthis.logger.log(\\\"Execute $tw.perf.log(); to see filter execution timings\\\");\\n\\t}\\n};\\n\\n/*\\nWrap performance reporting around a top level function\\n*/\\nPerformance.prototype.report = function(name,fn) {\\n\\tvar self = this;\\n\\tif(this.enabled) {\\n\\t\\treturn function() {\\n\\t\\t\\tvar startTime = $tw.utils.timer(),\\n\\t\\t\\t\\tresult = fn.apply(this,arguments);\\n\\t\\t\\tself.logger.log(name + \\\": \\\" + $tw.utils.timer(startTime).toFixed(2) + \\\"ms\\\");\\n\\t\\t\\treturn result;\\n\\t\\t};\\n\\t} else {\\n\\t\\treturn fn;\\n\\t}\\n};\\n\\nPerformance.prototype.log = function() {\\n\\tvar self = this,\\n\\t\\ttotalTime = 0,\\n\\t\\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\\n\\t\\t\\tif(self.measures[a].time > self.measures[b].time) {\\n\\t\\t\\t\\treturn -1;\\n\\t\\t\\t} else if (self.measures[a].time \u003C self.measures[b].time) {\\n\\t\\t\\t\\treturn + 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\treturn 0;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t$tw.utils.each(orderedMeasures,function(name) {\\n\\t\\ttotalTime += self.measures[name].time;\\n\\t});\\n\\tvar results = []\\n\\t$tw.utils.each(orderedMeasures,function(name) {\\n\\t\\tvar measure = self.measures[name];\\n\\t\\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\\n\\t});\\n\\tself.logger.table(results);\\n};\\n\\n/*\\nWrap performance measurements around a subfunction\\n*/\\nPerformance.prototype.measure = function(name,fn) {\\n\\tvar self = this;\\n\\tif(this.enabled) {\\n\\t\\treturn function() {\\n\\t\\t\\tvar startTime = $tw.utils.timer(),\\n\\t\\t\\t\\tresult = fn.apply(this,arguments);\\n\\t\\t\\tif(!(name in self.measures)) {\\n\\t\\t\\t\\tself.measures[name] = {time: 0, invocations: 0};\\n\\t\\t\\t}\\n\\t\\t\\tself.measures[name].time += $tw.utils.timer(startTime);\\n\\t\\t\\tself.measures[name]


 {
        match self {
            Self::UsernameInvalid => f.write_str("the username length is invalid"),
        }
    }
}

impl Error for UpdateCurrentUserError {}

#[derive(Default, Serialize)]
struct UpdateCurrentUserFields {
    #[allow(clippy::option_option)]
    #[serde(skip_serializing_if = "Option::is_none")]
    avatar: Option<Option<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    username: Option<String>,
}

/// Update the current user.
///
/// All paramaters are optional. If the username is changed, it may cause the discriminator to be
/// rnadomized.
pub struct UpdateCurrentUser<'a> {
    fields: UpdateCurrentUserFields,
    fut: Option<Pending<'a, User>>,
    http: &'a Client,
}

impl<'a> UpdateCurrentUser<'a> {
    pub(crate) fn new(http: &'a Client) -> Self {
        Self {
            fields: UpdateCurrentUserFields::default(),
            fut: None,
            http,
        }
    }

    /// Set the user's avatar.
    ///
    /// This must be a Data URI, in the form of `data:image/{type};base64,{data}` where `{type}` is
    /// the image MIME type and `{data}` is the base64-encoded image. Refer to [the discord docs]
    /// for more information.
    ///
    /// [the discord docs]: https://discord.com/developers/docs/reference#image-data
    pub fn avatar(mut self, avatar: impl Into<Option<String>>) -> Self {
        self.fields.avatar.replace(avatar.into());

        self
    }

    /// Set the username.
    ///
    /// The minimum length is 2 UTF-16 characters and the maximum is 32 UTF-16 characters.
    ///
    /// # Errors
    ///
    /// Returns [`UpdateCurrentUserError::UsernameInvalid`] if the username length is too short or
    /// too long.
    ///
    /// [`UpdateCurrentUserError::UsernameInvalid`]: enum.UpdateCurrentUserError.html#variant.UsernameInvalid
    pub fn username(self, username: impl Into<String>) -> Result<Self, UpdateCurrentUserError> {
        self._username(username.into())
    }

    fn _username(mut self, username: String) -> Result<Self, UpdateCurrentUserError> {
        if !validate::username(&username) {
            return Err(UpdateCurrentUserError::UsernameInvalid);
        }

        self.fields.username.replace(username);

        Ok(self)
    }

    fn start(&mut self) -> Result<()> {
        self.fut.replace(Box::pin(self.http.request(Request::from((
            crate::json_to_vec(&self.fields)?,
            Route::UpdateCurrentUser,
        )))));

        Ok(())
    }
}

poll_req!(UpdateCurrentUser<'_>, User);
<reponame>sebnow/adventofcode
use std::fs::File;
use std::io::{BufRead, BufReader};

fn parse_line(l: String) -> Vec<i32> {
    l.split_whitespace().map(|x| x.parse::<i32>().unwrap()).collect()
}

fn parse_input<R: BufRead>(reader: R) -> Vec<Vec<i32>> {
    reader.lines().map(|l| parse_line(l.unwrap())).collect()
}

fn answer_1(input: &Vec<Vec<i32>>) -> i32 {
    input.iter().map(|xs| xs.iter(


wnloadingService$b:a	Lcom/taobao/munion/base/download/DownloadingService;
      //   702: invokestatic 478	com/taobao/munion/base/download/DownloadingService:d	(Lcom/taobao/munion/base/download/DownloadingService;)Landroid/os/Handler;
      //   705: new 480	com/taobao/munion/base/download/DownloadingService$b$1
      //   708: dup
      //   709: aload_0
      //   710: invokespecial 483	com/taobao/munion/base/download/DownloadingService$b$1:<init>	(Lcom/taobao/munion/base/download/DownloadingService$b;)V
      //   713: invokevirtual 489	android/os/Handler:post	(Ljava/lang/Runnable;)Z
      //   716: pop
      //   717: aload 7
      //   719: ifnull +8 -> 727
      //   722: aload 7
      //   724: invokevirtual 465	java/io/InputStream:close	()V
      //   727: aload 5
      //   729: ifnull -163 -> 566
      //   732: aload 5
      //   734: invokevirtual 399	java/io/FileOutputStream:close	()V
      //   737: return
      //   738: astore 18
      //   740: aload 18
      //   742: invokevirtual 492	java/io/IOException:printStackTrace	()V
      //   745: return
      //   746: aload_0
      //   747: getfield 44	com/taobao/munion/base/download/DownloadingService$b:b	Landroid/content/Context;
      //   750: invokestatic 494	com/taobao/munion/base/download/f:e	(Landroid/content/Context;)Z
      //   753: ifne +34 -> 787
      //   756: aload_0
      //   757: getfield 46	com/taobao/munion/base/download/DownloadingService$b:k	Lcom/taobao/munion/base/download/c$a;
      //   760: getfield 497	com/taobao/munion/base/download/c$a:o	Z
      //   763: ifeq +24 -> 787
      //   766: ldc_w 499
      //   769: iconst_0
      //   770: anewarray 95	java/lang/Object
      //   773: invokestatic 377	com/taobao/munion/base/Log:e	(Ljava/lang/String;[Ljava/lang/Object;)V
      //   776: new 148	java/io/IOException
      //   779: dup
      //   780: ldc_w 499
      //   783: invokespecial 500	java/io/IOException:<init>	(Ljava/lang/String;)V
      //   786: athrow
      //   787: ldc_w 501
      //   790: aload_0
      //   791: getfield 38	com/taobao/munion/base/download/DownloadingService$b:f	J
      //   794: l2f
      //   795: fmul
      //   796: aload_0
      //   797: getfield 40	com/taobao/munion/base/download/DownloadingService$b:g	J
      //   800: l2f
      //   801: fdiv
      //   802: f2i
      //   803: istore 67
      //   805: iload 67
      //   807: bipush 100
      //   809: if_icmple +7 -> 816
      //   812: bipush 99
      //   814: istore 67
      //   816: aload_0
      //   817: getfield 68	com/taobao/munion/base/download/DownloadingService$b:j	Lcom/taobao


, Double>,
        body: SimpleAutoDiffField<Double, Float64Field>.(x: AutoDiffValue<Float64>) -> AutoDiffValue<Float64>,
    ): DerivationResult<Float64> = Float64Field.simpleAutoDiff(xBinding) { body(bindSymbol(xBinding.first)) }

    fun dxy(
        xBinding: Pair<Symbol, Double>,
        yBinding: Pair<Symbol, Double>,
        body: SimpleAutoDiffField<Double, Float64Field>.(x: AutoDiffValue<Float64>, y: AutoDiffValue<Float64>) -> AutoDiffValue<Float64>,
    ): DerivationResult<Float64> = Float64Field.simpleAutoDiff(xBinding, yBinding) {
        body(bindSymbol(xBinding.first), bindSymbol(yBinding.first))
    }

    fun diff(block: SimpleAutoDiffField<Double, Float64Field>.() -> AutoDiffValue<Float64>): SimpleAutoDiffExpression<Double, Float64Field> {
        return SimpleAutoDiffExpression(Float64Field, block)
    }

    val x by symbol
    val y by symbol
    val z by symbol

    @Test
    fun testPlusX2() {
        val y = Float64Field.simpleAutoDiff(x to 3.0) {
            // diff w.r.t this x at 3
            val x = bindSymbol(x)
            x + x
        }
        assertEquals(6.0, y.value) //    y  = x + x = 6
        assertEquals(2.0, y.derivative(x)) // dy/dx = 2
    }

    @Test
    fun testPlusX2Expr() {
        val expr = diff {
            val x = bindSymbol(x)
            x + x
        }
        assertEquals(6.0, expr(x to 3.0)) //    y  = x + x = 6
        assertEquals(2.0, expr.derivative(x)(x to 3.0)) // dy/dx = 2
    }

    @Test
    fun testPlus() {
        // two variables
        val z = Float64Field.simpleAutoDiff(x to 2.0, y to 3.0) {
            val x = bindSymbol(x)
            val y = bindSymbol(y)
            x + y
        }
        assertEquals(5.0, z.value) //    z  = x + y = 5
        assertEquals(1.0, z.derivative(x)) // dz/dx = 1
        assertEquals(1.0, z.derivative(y)) // dz/dy = 1
    }

    @Test
    fun testMinus() {
        // two variables
        val z = Float64Field.simpleAutoDiff(x to 7.0, y to 3.0) {
            val x = bindSymbol(x)
            val y = bindSymbol(y)

            x - y
        }
        assertEquals(4.0, z.value)  //    z  = x - y = 4
        assertEquals(1.0, z.derivative(x))  // dz/dx = 1
        assertEquals(-1.0, z.derivative(y)) // dz/dy = -1
    }

    @Test
    fun testMulX2() {
        val y = dx(x to 3.0) { x ->
            // diff w.r.t this x at 3
            x * x
        }
        assertEquals(9.0, y.value) //    y  = x * x = 9
        assertEquals(6.0, y.derivative(x)) // dy/dx = 2 * x = 7
    }

    @Test
    fun testSqr() {
        val y = dx(x to 3.0) { x -> sqr(x) }
        assertEquals(9.0, y.value) //    y  = x ^ 2 = 9
        assertEquals(6.0, y.derivative(x)) // dy/dx = 2 * x = 7


eload" as="image" href="c_files/475808524_1033033161970301_6007848455913396439_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/473750331_1346130743479956_2499247877670147237_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/474762321_10231404606752108_4659451598698181718_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/469851995_551723177662262_2841281620672371864_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/476179178_1022842432990291_27400093675220870_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/473082358_4479671758925800_2997216405853148550_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="c_files/474486490_1286044879338564_1880848040572500961_n.jpg" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="https://scontent-hou1-1.xx.fbcdn.net/v/t39.30808-6/475213513_29400731342858867_6984682467482328488_n.jpg?stp=c0.169.1536.1536a_dst-jpg_s960x960_tt6&_nc_cat=109&ccb=1-7&_nc_sid=454cf4&_nc_ohc=ihrg4oJWigUQ7kNvgG9dJXy&_nc_zt=23&_nc_ht=scontent-hou1-1.xx&_nc_gid=ANJOqGRy9zdVgpLsTqh9rLl&oh=00_AYB8Itbb7wTDjjGCM9s96e_44Mmuz6s-v5kDotvowkD-yQ&oe=67AB82C2" referrerpolicy="origin-when-cross-origin"><link rel="preload" as="image" href="https://scontent-hou1-1.xx.fbcdn.net/v/t45.5328-4/476307307_1177371270682444_7041917762323374072_n.jpg?stp=c0.140.843.843a_dst-jpg_p843x403_tt6&_nc_cat=103&ccb=1-7&_nc_sid=247b10&_nc_ohc=NCsl3yr_1ncQ7kNvgF2YZiV&_nc_zt=23&_nc_ht=scontent-hou1-1.xx&_nc_gid=ANJOqGRy9zdVgpLsTqh9rLl&oh=00_AYAUAH-LGa0RdPSINfl4ARjqbIGFRgKTUvVz_oIJOTSxDQ&oe=67AB7C8E" referrerpolicy="origin-when-cross-origin">
    <script type="application/json" data-content-len="356" data-sjs="">{"require":[["CometSSRMergedContentInjector","onPayloadReceived",null,[{"fizzRootId":"ssrb_root_content","id":"render_pass_4","payloadType":"LAST","readyPreloaders":["adp_MarketplaceCometBrowseFeedLightContainerQueryRelayPreloader_67a595a1ebf564862672117"],"renderPassCount":4,"


), a);

    const nestedArray = new MuArray(
        new MuArray(new MuFloat32(), Infinity),
        Infinity,
    );
    let na = nestedArray.alloc();
    t.deepEqual(nestedArray.clone(na), na);
    na = [[]];
    t.deepEqual(nestedArray.clone(na), na);
    t.isNot(nestedArray.clone(na)[0], na[0]);
    na = [[0.5]];
    t.deepEqual(nestedArray.clone(na), na);
    na = [[0.5, 1.5]];
    t.deepEqual(nestedArray.clone(na), na);
    na = [[0.5, 1.5], [0.5, 1.5]];
    t.deepEqual(nestedArray.clone(na), na);
    t.end();
});

test('sortedArray.clone()', (t) => {
    const array = new MuSortedArray(new MuFloat32(), Infinity);
    let a = array.alloc();
    t.isNot(array.clone(a), a);
    t.deepEqual(array.clone(a), a);
    a = [0.5];
    t.deepEqual(array.clone(a), a);
    a = [0.5, 1.5];
    t.deepEqual(array.clone(a), a);

    const nestedArray = new MuSortedArray(
        new MuSortedArray(new MuFloat32(), Infinity),
        Infinity,
    );
    let na = nestedArray.alloc();
    t.deepEqual(nestedArray.clone(na), na);
    na = [[]];
    t.deepEqual(nestedArray.clone(na), na);
    t.isNot(nestedArray.clone(na)[0], na[0]);
    na = [[0.5]];
    t.deepEqual(nestedArray.clone(na), na);
    na = [[0.5, 1.5]];
    t.deepEqual(nestedArray.clone(na), na);
    na = [[0.5, 1.5], [0.5, 1.5]];
    t.deepEqual(nestedArray.clone(na), na);
    t.end();
});

test('struct.clone()', (t) => {
    const struct = new MuStruct({
        struct: new MuStruct({
            ascii: new MuASCII(),
            fixed: new MuFixedASCII(1),
            utf8: new MuUTF8(),
            bool: new MuBoolean(),
            float32: new MuFloat32(),
            float64: new MuFloat64(),
            int8: new MuInt8(),
            int16: new MuInt16(),
            int32: new MuInt32(),
            uint8: new MuUint8(),
            uint16: new MuUint16(),
            uint32: new MuUint32(),
            varint: new MuVarint(),
            rvarint: new MuRelativeVarint(),
            array: new MuArray(new MuFloat32(), Infinity),
            sorted: new MuSortedArray(new MuFloat32(), Infinity),
            dict: new MuDictionary(new MuFloat32(), Infinity),
            vector: new MuVector(new MuFloat32(), 3),
            union: new MuUnion({
                b: new MuBoolean(),
                f: new MuFloat32(),
            }),
        }),
    });

    const s = struct.alloc();
    t.notEquals(struct.clone(s), s);
    t.deepEquals(struct.clone(s), s);
    t.notEquals(struct.clone(s).struct, s.struct);

    s.struct.ascii = 'a';
    s.struct.fixed = 'a';
    s.struct.utf8 = 'Iñtërnâtiônàlizætiøn☃💩';
    s.struct.bool = true;
    s.struct.


linkReference() + "#" + link.getHyperlinkAnchor();
						}
						break;
					}
					case REMOTE_PAGE :
					{
						if (
							link.getHyperlinkReference() != null &&
							link.getHyperlinkPage() != null
							)
						{
							href = link.getHyperlinkReference() + "#" + JR_PAGE_ANCHOR_PREFIX + reportIndex + "_" + link.getHyperlinkPage().toString();
						}
						break;
					}
					case NONE :
					default :
					{
						break;
					}
				}
			}
			else
			{
				href = customHandler.getHyperlink(link);
			}
		}

		return href;
	}

	protected void endHyperlink(boolean isText)
	{
//		crtDocHelper.write("</w:hyperlink>\n");
		crtDocHelper.write("<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>\n");
	}

	protected void insertBookmark(String bookmark, BaseHelper helper)
	{
		helper.write("<w:bookmarkStart w:id=\"" + bookmarkIndex);
		helper.write("\" w:name=\"" + (bookmark == null ? null : bookmark.replaceAll("\\W", "")));
		helper.write("\"/><w:bookmarkEnd w:id=\"" + bookmarkIndex++);
		helper.write("\"/>");
	}

	@Override
	protected void ensureInput()
	{
		super.ensureInput();

		exporterInput = new PrintPartUnrollExporterInput(exporterInput, getItemConfigurationInterface());

		jasperPrint = exporterInput.getItems().get(0).getJasperPrint();// this is just for the sake of
																		// getCurrentConfiguration() calls made prior to
																		// any setCurrentExporterInputItem() call
	}

	@Override
	protected JRStyledText getStyledText(JRPrintText textElement, boolean setBackcolor)
	{
		return styledTextUtil.getProcessedStyledText(textElement,
				setBackcolor ? allSelector : noBackcolorSelector, getExporterKey());
	}

	@Override
	public String getExporterKey()
	{
		return DOCX_EXPORTER_KEY;
	}

	@Override
	public String getExporterPropertiesPrefix()
	{
		return DOCX_EXPORTER_PROPERTIES_PREFIX;
	}
}

class BackgroundExporterFilter implements ExporterFilter
{
	ExporterFilter parent;
	boolean include;

	public BackgroundExporterFilter(ExporterFilter parent, boolean include)
	{
		this.parent = parent;
		this.include = include;
	}

	@Override
	public boolean isToExport(JRPrintElement element)
	{
		// normally, we should also test for reportName to be null, but part reports have non-null report name in origin, just like subreports;
		// in case there is a subreport with backround element, one way to avoid its elements going into docx background is to filter them out using docx origin filters
		boolean originMatches = element.getOrigin() == null ? false : BandTypeEnum.BACKGROUND == element.getOrigin().getBandType();
		return ((include && originMatches) || (!include && !originMatches)) && parent.isToExport(element);
	}
}

/*
 * JasperReports - Free Java Reporting Library.
 * Copyright (C) 2001 - 2025 Cloud Software Group, Inc. All rights reserved.
 * http://www.jaspersoft.com
 *
 * Unless you have purchased a commercial license agreement from Jaspersoft,
 * the following license terms apply:
 *
 * This program is part of JasperReports.
 *
 * JasperReports is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * JasperReports is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser


odzi z transparentnego blockchaina.
\n\n
W tym samym duchu niektórzy uważają, że pozyskiwanie Monero ze źródeł bez KYC i z KYC jest równie prywatne. Idea jest taka, że jest to podobne do zdobywania gotówki w banku. Tylko bank zna Twoją twarz i imię oraz wie, ile masz ogólnie na koncie i ile wypłaciłeś gotówki, ale nie wie, co potem robisz z gotówką. Mając gwarancje prywatności Monero, powinno tak być z kupnem Monero w miejscu wymagającym KYC/AML, prawda?
\n\n
Cóż, nie do końca.
\n\n
Najpierw cofnijmy się szybko i zdefiniujmy, co rozumiemy przez KYC/AML. Ten akronim oznacza przepisy Know Your Customer (KYC) / Anti-Money Laundering (AML), które wymagają od giełd i firm zbierania informacji identyfikujących ich klientów. Im więcej obracanych pieniędzy, tym więcej informacji jest potrzebnych. Jak sama nazwa wskazuje, wszystko to odbywa się w imię minimalizacji ryzyka prania pieniędzy.
\n\n
Wróćmy do Monero. Oczywiście przeniesienie pieniędzy do Monero z serwisu wymagającego KYC jest astronomicznie lepsze dla prywatności niż korzystanie z serwisu wymagającego KYC do zakupu czegoś takiego jak BTC lub jakiejkolwiek innej nieprywatnej kryptowaluty, ale nadal należy pamiętać, co zostanie ujawnione i co te ujawnione informacje mogą oznaczać dla Twojej prywatności i bezpieczeństwa.
\n\n
Nawet przyjmując analogię gotówki i banku, jeśli wypłacisz dużą kwotę z banku, ponieważ bank zna Twoje dane (w tym adres domowy), kasjer może zobaczyć, ile jest na Twoim koncie i może potencjalnie uczynić nikczemne plany w zależności od Twojego bogactwa. Jest to rzadkie, a ponieważ pieniądze są w banku, a nie w Twoim domu, to mogą w tym scenariuszu niewiele zyskać. To samo nie dotyczy Monero, które nie jest zabezpieczone przez osobę trzecią, ale przez Ciebie. Bycie własnym bankiem nie zawsze jest takie łatwe.
\n\n
Podobnie przejście z BTC na XMR - niezależnie od tego, jak to się robi, pozostawi to ślady na blockchainie Bitcoina. Chociaż jest to rzeczywiście mniej szkodliwe niż przejście BTC na BTC, ponieważ po drugiej stronie wymiany jest obowiązkowa prywatność Monero, to jednak należy pamiętać o pozostawionym śladzie. Ślady te łączą się z jeszcze większym efektem, jeśli w procesie było wymagane przejście przez KYC.
\n\n
Wyobraź sobie scenariusz, w którym brudne Bitcoiny zostały otrzymane za towar lub usługę, co jest możli


(target);

  try {
    boost::dijkstra_shortest_paths(mesh, source, boost::predecessor_map(pred_pmap).visitor(vis));
  } catch (const std::exception& e) {
    std::cout << e.what() << std::endl;
  }

  // Draw the path from target to source and collect the edges along the way
  vertex_descriptor s, t = target;
  do {
    s = get(pred_pmap, t);
    std::pair<edge_descriptor, bool> e = edge(s, t, mesh);
    CGAL_assertion(e.second);
    if(e.second) {
      *oi++ = e.first;
    }
    t = s;
  } while (s != source);
}

template<typename TriangleMesh, typename Cones_vector, typename Seam_container>
void compute_shortest_paths_between_cones(const TriangleMesh& mesh,
                                          const Cones_vector& cones,
                                          Seam_container& seams)
{
  CGAL_precondition(cones.size() == 3 || cones.size() == 4);
  for(std::size_t i=0; i<cones.size() - 1; ++i) {
    compute_shortest_paths_between_two_cones(mesh, cones[i], cones[i+1],
        std::back_inserter(seams));
  }

  std::ofstream out("shortest_path.selection.txt");
  output_shortest_paths_to_selection_file(mesh, seams, out);
}

} // namespace internal

} // namespace Surface_mesh_parameterization

} // namespace CGAL

#endif // CGAL_SURFACE_MESH_PARAMETERIZATION_INTERNAL_SHORTEST_PATH_H


statement.executeBatch()
        }
    }

    fun remove(guildId: Long, channelId: Long) {
        driverManager.executeUpdate(
            "DELETE FROM $table WHERE guild_id = ? AND channel_id = ?",
            guildId, channelId
        )
    }

    suspend fun getAll(guildId: Long, channelId: Long): Map<Long, Pair<Long, Long>> = suspendCoroutine {
        driverManager.executeQuery(
            "SELECT * FROM $table WHERE guild_id = ? AND channel_id = ?",
            { rs ->
                val map = mutableMapOf<Long, Pair<Long, Long>>() // id -> <allowed, denied>

                while (rs.next()) {
                    map[rs.getLong("id")] = rs.getLong("allowed_flag") to rs.getLong("denied_flag")
                }

                it.resume(map)
            }, guildId, channelId
        )
    }

    fun removeAll(guildId: Long, list: List<Long>) {
        driverManager.getUsableConnection {
            val statement = it.prepareStatement(
                "DELETE FROM $table WHERE guild_id = ? AND channel_id = ?"
            )
            statement.setLong(1, guildId)

            for (id in list) {
                statement.setLong(2, id)
                statement.addBatch()
            }

            statement.executeBatch()
        }
    }
}package me.melijn.melijnbot.database.audio

import me.melijn.melijnbot.database.Dao
import me.melijn.melijnbot.database.DriverManager
import me.melijn.melijnbot.internals.models.PodInfo
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine

class TracksDao(driverManager: DriverManager) : Dao(driverManager) {

    override val table: String = "audioTracks"
    override val tableStructure: String = "guildId bigint, position int, track varchar(2048), trackData varchar(2048)"
    override val primaryKey: String = "guildId, position"

    init {
        driverManager.registerTable(table, tableStructure, primaryKey)
    }

    fun set(guildId: Long, position: Int, track: String, trackData: String) {
        driverManager.executeUpdate(
            "INSERT INTO $table (guildId, position, track, trackData) VALUES (?, ?, ?, ?)",
            guildId, position, track, trackData
        )
    }

    suspend fun getMap(podInfo: PodInfo): Map<Long, Map<Int, Pair<String, String>>> = suspendCoroutine {
        val clause = podInfo.shardList.joinToString(", ") { "?" }
        val query = "SELECT * FROM $table WHERE ((guildId >> 22) % ${podInfo.shardCount}) IN ($clause)"

        driverManager.executeQuery(query, { rs ->
            val guildTracksMap = mutableMapOf<Long, Map<Int, Pair<String, String>>>()
            while (rs.next()) {
                val guildId = rs.getLong("guildId")
                val position = rs.getInt("position")
                val trackMap = guildTracksMap.getOrDefault(guildId, emptyMap()).toMutableMap()
                trackMap[position] = rs.getString("track") to rs.getString("trackData")
                guildTracksMap[guildId] = trackMap
            }
            it.resume(guildTracksMap)
        }, *podInfo.shardList.toTypedArray())
    }

    fun clear(podInfo: PodInfo) {
        val clause = podInfo.shardList.joinToString(", ") { "?" }

        driverManager.executeUpdate(
            "DELETE FROM $table WHERE ((guildId >> 22) % ${podInfo.shardCount}) IN ($clause)",
            *podInfo.shardList.toTypedArray()
        )
    }
}pack


png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru Jigokuhen (NGM-063 ~ NGH-063).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru Jigokuhen (Optimized, Hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru Jigokuhen (Perfect V. 1.7, Hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru Jigokuhen (Perfect V. 2.3, Hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru Jigokuhen (Special 2017, Hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063 ~ NGH-063).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen (NGM-063)(NGH-063).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen (Perfect V. 1.2, Hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen (Special 2017, hack) [Hack].png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen (Special 2017, hack).png",
  "Named_Titles/Samurai Shodown II _ Shin Samurai Spirits - Haohmaru jigokuhen Special 2017 (Hack).png",
  "Named_Titles/Samurai Shodown III _ Samurai Spirits - Zankurou Musouken (Boss, Hack).png",
  "Named_Titles/Samurai Shodown III _ Samurai Spirits - Zankurou Musouken (NGH-087).png",
  "Named_Titles/Samurai Shodown III _ Samurai Spirits - Zankurou Musouken (NGM-087).png",
  "Named_Titles/Samurai Shodown IV - Amakusa's Revenge _ Samurai Spirits - Amakusa Kourin (Boss, Hack).png",
  "Named_Titles/Samurai Shodown IV - Amakusa's Revenge _ Samurai Spirits - Amakusa Kourin (NGM-222 ~ NGH-222).png",
  "Named_Titles/Samurai Shodown IV - Amakusa's Revenge _ Samurai Spirits - Amakusa Kourin (NGM-222)(NGH-222).png",
  "Named_Titles/Samurai Shodown IV - Amakusa's Revenge _ Samurai Spirits - Amakusa Kourin (Special 2017, Hack).png",
  "Named_Titles/Samurai Shodown IV - Amakusa's Revenge _ Samurai Spirits - Amakusa Kourin (Special 2017, hack).png",
  "Named_Titles/Samurai Shodown V Perfect _ Samurai Spirits Zero Perfect (bootleg, hack).png",
  "Named_Titles/Samurai Shodown V Special _ Samurai Spirits Zero Special (Fully Decrypted).png",
  "Named_Titles/Samurai Shodown V Special _ Samurai Spirits Zero Special (NGH-2720) (1st release, censored).png",
  "Named_Titles/Samurai Shodown V Special _ Samurai Spirits Zero Special (NGH-2720) (2nd release, less censored).png",
  "Named_Titles/Samurai Shodown V Special _ Samurai Spirits Zero Special (NGH-2720, 1s


.26V15.4Z" class="clr-i-solid--alerted clr-i-solid-path-1--alerted"/><path fill="currentColor" d="M26.85 1.14 21.13 11a1.28 1.28 0 001.1 2h11.45a1.28 1.28 0 001.1-2l-5.72-9.86a1.28 1.28 0 00-2.21 0Z" class="clr-i-solid--alerted clr-i-solid-path-2--alerted clr-i-alert"/><path fill="currentColor" d="M0 0h36v36H0z"/></svg>';
  static const String tasks_solid_badged =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 36 36"><path fill="currentColor" d="M30 13.5a7.49 7.49 0 01-6.46-3.7H11.25V8a1 1 0 011-1h3.44v-.68a2.31 2.31 0 014.63 0V7h2.26a7.53 7.53 0 01-.07-1 7.53 7.53 0 01.08-1.05h-.5a4.31 4.31 0 00-8.17 0H7a1.75 1.75 0 00-2 1.69v25.62a1.7 1.7 0 001.71 1.69h22.58A1.7 1.7 0 0031 32.26V13.43a7.52 7.52 0 01-1 .07Zm-4.23 3.71-9.12 9.12-5.24-5.24a1.4 1.4 0 012-2l3.26 3.26 7.14-7.14a1.4 1.4 0 112 2Z" class="clr-i-solid--badged clr-i-solid-path-1--badged"/><circle cx="30" cy="6" r="5" fill="currentColor" class="clr-i-solid--badged clr-i-solid-path-2--badged clr-i-badge"/><path fill="currentColor" d="M0 0h36v36H0z"/></svg>';
  static const String terminal_line =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 36 36"><path fill="currentColor" d="M32 5H4a2 2 0 00-2 2v22a2 2 0 002 2h28a2 2 0 002-2V7a2 2 0 00-2-2ZM4 7h28v2.2H4Zm0 22V10.8h28V29Z" class="clr-i-outline clr-i-outline-path-1"/><path fill="currentColor" d="M17 23h6v2h-6z" class="clr-i-outline clr-i-outline-path-2"/><path fill="currentColor" d="m7 15.68 6.79 3.12L7 21.91v2.2l9.6-4.41v-1.81L7 13.48v2.2z" class="clr-i-outline clr-i-outline-path-3"/><path fill="currentColor" d="M0 0h36v36H0z"/></svg>';
  static const String terminal_outline_alerted =
      '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="36" height="


*/
fun <A, B> Option<Either<A, B>>.separateEither(): Pair<Option<A>, Option<B>> {
  val asep = flatMap { gab -> gab.fold({ Some(it) }, { None }) }
  val bsep = flatMap { gab -> gab.fold({ None }, { Some(it) }) }
  return asep to bsep
}

/**
 * Separate the inner [Validated] value into the [Validated.Invalid] and [Validated.Valid].
 *
 * @receiver Option of Either
 * @return a tuple containing Option of [Validated.Invalid] and another Option of its [Validated.Valid] value.
 */
fun <A, B> Option<Validated<A, B>>.separateValidated(): Pair<Option<A>, Option<B>> {
  val asep = flatMap { gab -> gab.fold({ Some(it) }, { None }) }
  val bsep = flatMap { gab -> gab.fold({ None }, { Some(it) }) }
  return asep to bsep
}

fun <A> Option<Iterable<A>>.sequence(): List<Option<A>> =
  traverse(::identity)

fun <A> Option<Iterable<A>>.sequence_(): List<Unit> =
  traverse_(::identity)

fun <A, B> Option<Either<A, B>>.sequenceEither(): Either<A, Option<B>> =
  traverseEither(::identity)

fun <A, B> Option<Either<A, B>>.sequenceEither_(): Either<A, Unit> =
  traverseEither_(::identity)

fun <A, B> Option<Validated<A, B>>.sequenceValidated(): Validated<A, Option<B>> =
  traverseValidated(::identity)

fun <A, B> Option<Validated<A, B>>.sequenceValidated_(): Validated<A, Unit> =
  traverseValidated_(::identity)

fun <A, B> Option<Ior<A, B>>.unalign(): Pair<Option<A>, Option<B>> =
  unalign(::identity)

inline fun <A, B, C> Option<C>.unalign(f: (C) -> Ior<A, B>): Pair<Option<A>, Option<B>> =
  when (val option = this.map(f)) {
    is None -> None to None
    is Some -> when (val v = option.t) {
      is Ior.Left -> Some(v.value) to None
      is Ior.Right -> None to Some(v.value)
      is Ior.Both -> Some(v.leftValue) to Some(v.rightValue)
    }
  }

fun <A> Option<Iterable<A>>.unite(MA: Monoid<A>): Option<A> =
  map { iterable ->
    iterable.fold(MA)
  }

fun <A, B> Option<Either<A, B>>.uniteEither(): Option<B> =
  flatMap { either ->
    either.fold({ None }, { b -> Some(b) })
  }

fun <A, B> Option<Validated<A, B>>.uniteValidated(): Option<B> =
  flatMap { validated ->
    validated.fold({ None }, { b -> Some(b) })
  }

fun <A, B> Option<Pair<A, B>>.unzip(): Pair<Option<A>, Option<B>> =
  unzip(::identity)

inline fun <A, B, C> Option<C>.unzip(f: (C) -> Pair<A, B>): Pair<Option<A>, Option<B>> =
  fold(
    { Option.empty<A>() to Option.empty() },
    { f(it).let { pair -> Some(pair.first) to Some(pair.second) }}
  )

/**
 *  Given [A] is a sub type of [B], re-type this value from Option<A> to Option<B>
 *
 *  Option<A> -> Option<B>
 *
 *  ```kotlin:ank:playground
 *


**************************
//  515 * Function Name  : SDIO_StartSDIOReadWait
//  516 * Description    : Starts the SD I/O Read Wait operation.
//  517 * Input          : NewState: new state of the Start SDIO Read Wait operation.
//  518 *                  This parameter can be: ENABLE or DISABLE.
//  519 * Output         : None
//  520 * Return         : None
//  521 *******************************************************************************/

        SECTION `.text`:CODE:NOROOT(2)
        CFI Block cfiBlock18 Using cfiCommon0
        CFI Function SDIO_StartSDIOReadWait
        THUMB
//  522 void SDIO_StartSDIOReadWait(FunctionalState NewState)
//  523 {
//  524   /* Check the parameters */
//  525   assert_param(IS_FUNCTIONAL_STATE(NewState));
//  526
//  527   *(vu32 *) DCTRL_RWSTART_BB = (u32) NewState;
SDIO_StartSDIOReadWait:
        LDR.N    R1,??SDIO_StartSDIOReadWait_0  ;; 0x423005a0
        STR      R0,[R1, #+0]
//  528 }
        BX       LR               ;; return
        Nop
        DATA
??SDIO_StartSDIOReadWait_0:
        DC32     0x423005a0
        CFI EndBlock cfiBlock18
//  529
//  530 /*******************************************************************************
//  531 * Function Name  : SDIO_StopSDIOReadWait
//  532 * Description    : Stops the SD I/O Read Wait operation.
//  533 * Input          : NewState: new state of the Stop SDIO Read Wait operation.
//  534 *                  This parameter can be: ENABLE or DISABLE.
//  535 * Output         : None
//  536 * Return         : None
//  537 *******************************************************************************/

        SECTION `.text`:CODE:NOROOT(2)
        CFI Block cfiBlock19 Using cfiCommon0
        CFI Function SDIO_StopSDIOReadWait
        THUMB
//  538 void SDIO_StopSDIOReadWait(FunctionalState NewState)
//  539 {
//  540   /* Check the parameters */
//  541   assert_param(IS_FUNCTIONAL_STATE(NewState));
//  542
//  543   *(vu32 *) DCTRL_RWSTOP_BB = (u32) NewState;
SDIO_StopSDIOReadWait:
        LDR.N    R1,??SDIO_StopSDIOReadWait_0  ;; 0x423005a4
        STR      R0,[R1, #+0]
//  544 }
        BX       LR               ;; return
        Nop
        DATA
??SDIO_StopSDIOReadWait_0:
        DC32     0x423005a4
        CFI EndBlock cfiBlock19
//  545
//  546 /*******************************************************************************
//  547 * Function Name  : SDIO_SetSDIOReadWaitMode
//  548 * Description    : Sets one of the two options of inserting read wait interval.
//  549 * Input          : SDIOReadWaitMode: SD I/O Read Wait operation mode.
//  550 *                  This parametre can be:
//  551 *                    - SDIO_ReadWaitMode_CLK: Read Wait control by stopping SDIOCLK
//  552 *                    - SDIO_ReadWaitMode_DATA2: Read Wait control using SDIO_DATA2
//  553 * Output         : None
//  554 * Return         : None
//  555 *******************************************************************************/

        SECTION `.text`:CODE:NOROOT(2)
        CFI Block cfiBlock20 Using cfiCommon0
        CFI Function SDIO_SetSDIOReadWaitMode
        THUMB
//  556 void SDIO_SetSDIOReadWaitMode(u32 SDIO_ReadWaitMode)
//  557 {
//  558   /* Check the parameters */
//  559   assert_param(IS_SDIO_READWAIT_MODE(SDIO_ReadWaitMode));
//  560
//  561   *(vu32 *) DCTRL_RWMOD_BB = SDIO_ReadWait


    height: 2rem;
  }
  #mainNav .navbar-nav .nav-item {
    margin-right: 1rem;
  }
  #mainNav .navbar-nav .nav-item:last-child {
    margin-right: 0;
  }
}
header.masthead {
  padding-bottom: 6rem;
  text-align: center;
  color: #333;
  /* background-image: url("../assets/meetings-1149198_1920.jpg"); */
  background-repeat: no-repeat;
  background-attachment: scroll;
  background-position: center center;
  background-size: cover;
}

header.masthead .cover-image {
  max-width: max-content;
}

header.masthead .masthead-subheading {
  font-size: 1.5rem;
  font-style: italic;
  line-height: 1.5rem;
  margin-bottom: 25px;
  font-family: "Droid Serif", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}

header.masthead .masthead-heading {
  font-size: 3.25rem;
  font-weight: 700;
  line-height: 3.25rem;
  margin-bottom: 2rem;
  font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
}

@media (min-width: 768px) {
  header.masthead {
    padding-bottom: 12.5rem;
  }

  header.masthead .masthead-subheading {
    font-size: 2.25rem;
    font-style: italic;
    line-height: 2.25rem;
    margin-bottom: 2rem;
  }

  header.masthead .masthead-heading {
    font-size: 4.5rem;
    font-weight: 700;
    line-height: 4.5rem;
    margin-bottom: 4rem;
  }
}
#portfolio .portfolio-item {
  max-width: 25rem;
  margin-left: auto;
  margin-right: auto;
}
#portfolio .portfolio-item .portfolio-link {
  position: relative;
  display: block;
  margin: 0 auto;
}
#portfolio .portfolio-item .portfolio-link .portfolio-hover {
  display: flex;
  position: absolute;
  width: 100%;
  height: 100%;
  background: rgba(254, 209, 54, 0.9);
  align-items: center;
  justify-content: center;
  opacity: 0;
  transition: opacity ease-in-out 0.25s;
}
#portfolio .portfolio-item .portfolio-link .portfolio-hover .portfolio-hover-content {
  font-size: 1.25rem;
  color: white;
}
#portfolio .portfolio-item .portfolio-link:hover .portfolio-hover {
  opacity: 1;
}
#portfolio .portfolio-item .portfolio-caption {
  padding: 1.5rem;
  text-align: center;
  background-color: #fff;
}
#portfolio .portfolio-item .portfolio-caption .portfolio-caption-heading {
  font-size: 1.5rem;
  font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI


    use std::io::Cursor;

    #[fasync::run_until_stalled(test)]
    async fn logger_stream_test() {
        let (sin, sout) = zx::Socket::create(zx::SocketOpts::DATAGRAM).unwrap();
        let mut packet: fx_log_packet_t = Default::default();
        packet.metadata.pid = 1;
        packet.metadata.severity = 0x30; // INFO
        packet.data[0] = 5;
        packet.fill_data(1..6, 'A' as _);
        packet.fill_data(7..12, 'B' as _);

        let mut ls =
            LogMessageSocket::new(sout, TEST_IDENTITY.clone(), Default::default()).unwrap();
        sin.write(packet.as_bytes()).unwrap();
        let expected_p = Message::from(
            diagnostics_data::LogsDataBuilder::new(diagnostics_data::BuilderArgs {
                timestamp_nanos: zx::Time::from_nanos(packet.metadata.time).into(),
                component_url: TEST_IDENTITY.url.clone(),
                moniker: TEST_IDENTITY.to_string(),
                severity: Severity::Info,
                size_bytes: METADATA_SIZE + 6 /* tag */+ 6, /* msg */
            })
            .set_pid(packet.metadata.pid)
            .set_tid(packet.metadata.tid)
            .add_tag("AAAAA")
            .set_message("BBBBB".to_string())
            .build(),
        );

        let result_message = ls.next().await.unwrap();
        assert_eq!(result_message, expected_p);

        // write one more time
        sin.write(packet.as_bytes()).unwrap();

        let result_message = ls.next().await.unwrap();
        assert_eq!(result_message, expected_p);
    }

    #[fasync::run_until_stalled(test)]
    async fn structured_logger_stream_test() {
        let (sin, sout) = zx::Socket::create(zx::SocketOpts::DATAGRAM).unwrap();
        let timestamp = 107;
        let record = Record {
            timestamp,
            severity: StreamSeverity::Fatal,
            arguments: vec![
                Argument { name: "key".to_string(), value: Value::Text("value".to_string()) },
                Argument { name: "tag".to_string(), value: Value::Text("tag-a".to_string()) },
            ],
        };
        let mut buffer = Cursor::new(vec![0u8; 1024]);
        let mut encoder = Encoder::new(&mut buffer);
        encoder.write_record(&record).unwrap();
        let encoded = &buffer.get_ref()[..buffer.position() as usize];

        let expected_p = Message::from(
            diagnostics_data::LogsDataBuilder::new(diagnostics_data::BuilderArgs {
                timestamp_nanos: timestamp.into(),
                component_url: TEST_IDENTITY.url.clone(),
                moniker: TEST_IDENTITY.to_string(),
                severity: Severity::Fatal,
                size_bytes: encoded.len(),
            })
            .add_tag("tag-a")
            .add_key(diagnostics_data::LogsProperty::String(
                LogsField::Other("key".to_string()),
                "value".to_string(),
            ))
            .build(),
        );

        let mut stream =
            LogMessageSocket::new_structured(sout, TEST_IDENTITY.clone(), Default::default())
                .unwrap();

        sin.write(encoded).unwrap();
        let result_message = stream.next().await.unwrap();
        assert_eq!(result_message, expected_p);

        // write again
        sin.write(encoded).unwrap();
        let result_message = stream.next().await.unwrap();
        assert_eq!(result_message, expected_p);
    }
}
use crate::{
    lib::{


 serv.escalations.append(escalation.uuid)

    def linkify_es_by_h(self, hosts):
        """Add each escalation object into host.escalation attribute

        :param hosts: host list, used to look for a specific host
        :type hosts: alignak.objects.host.Hosts
        :return: None
        """
        for escal in self:
            # If no host, no hope of having a service
            if (not hasattr(escal, 'host_name') or escal.host_name.strip() == '' or
                    (hasattr(escal, 'service_description')
                     and escal.service_description.strip() != '')):
                continue
            # I must be NOT a escalation on for service
            for hname in strip_and_uniq(escal.host_name.split(',')):
                host = hosts.find_by_name(hname)
                if host is not None:
                    host.escalations.append(escal.uuid)

    def explode(self, hosts, hostgroups, contactgroups):
        """Loop over all escalation and explode hostsgroups in host
        and contactgroups in contacts

        Call Item.explode_host_groups_into_hosts and Item.explode_contact_groups_into_contacts

        :param hosts: host list to explode
        :type hosts: alignak.objects.host.Hosts
        :param hostgroups: hostgroup list to explode
        :type hostgroups: alignak.objects.hostgroup.Hostgroups
        :param contactgroups: contactgroup list to explode
        :type contactgroups: alignak.objects.contactgroup.Contactgroups
        :return: None
        """
        for i in self:
            # items::explode_host_groups_into_hosts
            # take all hosts from our hostgroup_name into our host_name property
            self.explode_host_groups_into_hosts(i, hosts, hostgroups)

            # items::explode_contact_groups_into_contacts
            # take all contacts from our contact_groups into our contact property
            self.explode_contact_groups_into_contacts(i, contactgroups)


using System.Globalization;
using System.Text;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Media.Immutable;
using Avalonia.Media.TextFormatting;

namespace TextOutlineAnimation.Controls;
public sealed partial class OutlinedText : TextBlock
{
    private Geometry? _geometry;

    static OutlinedText()
    {
        ClipToBoundsProperty.OverrideDefaultValue<OutlinedText>(true);

        var items = new AvaloniaProperty[]
        {
            BackgroundProperty, ForegroundProperty, StrokeProperty, StrokeDashArrayProperty, StrokeDashOffsetProperty,
            StrokeJoinProperty, StrokeLineCapProperty, StrokeThicknessProperty
        };

        AffectsRender<OutlinedText>(items);
    }

    protected override void RenderTextLayout(DrawingContext context, Point origin)
    {

        ImmutablePen? pen = null;

        if (Stroke is not null)
        {
            var strokeDashArray = StrokeDashArray;

            ImmutableDashStyle? dashStyle = null;

            if (strokeDashArray is not null && strokeDashArray.Count > 0)
            {
                dashStyle = new ImmutableDashStyle(strokeDashArray, StrokeDashOffset);
            }

            pen = new ImmutablePen(Stroke.ToImmutable(), StrokeThickness, dashStyle, StrokeLineCap, StrokeJoin);
        }

        if (TextWrapping == TextWrapping.NoWrap)
        {
            _geometry = _geometry ?? CreateUnwrappedTextGeometry(Text, origin);
            context.DrawGeometry(Foreground, pen, _geometry!);
        }
        else
        {
            // A better approach to caching and invalidation than used here will be needed for wrapped text
            _geometry = CreateWrappedTextGeometryGroup(TextLayout, origin);


), so the limit doesn't apply to them. The backlog is from a shortage of volunteers willing to devote time to working at ACC. — JJMC89 (T·C) 17:28, 29 June 2019 (UTC)Reply

If it's back up to 6, then I don't think further changes are needed. New volunteers can get the accountcreator bit once they have a bit of experience. The biggest issue is number of volunteers. -- Ajraddatz (talk) 01:11, 1 July 2019 (UTC)Reply

IPvandal links with ranges

WP:ANI#Unknown attack on me contains some {{IPvandal}} links to individual IPv4s, individual IPv6s, and IPv6 ranges.  Here are three of them, plus a totally unrelated IPv4 range:

81.152.162.119 (talk · contribs · deleted contribs · filter log · WHOIS · R