oo”、“bar”类似于中文里的“张三”、“李四”，都是无特别含义的名字。参见[维基百科](http://goo.gl/jaq70)。

事实上，许多“入门读物”之中充斥这两个“怪词”，却又几乎从来没有人针对这样的疑问提供充分的解释。

再如，很多人都不明白为什么循环代码块里的起始变量名称是“i”。事实上，谁都不是很确定。据猜测，“i”可能是“index”这个单词的首字母。在循环嵌套的时候，第二层循环的起始变量名称通常是“j”，但这不是某个单词的首字母了，只是因为“j”在英文字母表中排在“i”之后。在其他领域也是如此——学英语的时候，很多初学者都有过如是疑惑：“为什么‘John’这个名字会被翻译成‘约翰’？就算是音译，也差得太远了吧？”

> 可以到Google上搜索一下“[为什么 John 约翰](http://goo.gl/D1Z3O)”， 就知道究竟有多少人曾为此疑惑过了。

这些只是几个常见的例子而已。自学过任何一项技能的人，都能理解这种“牛角尖陷阱”几乎无处不在。

然而，为了进步，**我们必须忍受一定的未知。**

首先，我们要承认自己不可能全知全晓。有些时候，有些问题没有答案，就好像“先有鸡还是先有蛋”一样。而有些时候，即便有了答案，其原因也不见得是我们能够搞懂的。例如，学编程学到流程控制的时候，会知道这样一个知识：除了“顺序”外，只用“分支”和“循环”就能够完成任何流程——初学者大都会好奇，这是如何证明的呢？这个结论当然是经过严谨的证明才被广泛接受的，但究竟有多少初学者可以看懂证明过程呢？在这种时候，不是“反对问为什么”，而是“暂时不去问为什么”可能更划算。

> 参考Böhm和Jacopini于1966年发表的相关论文：[Flow Diagrams, Languages With Only Two Formation Rules](http://goo.gl/LR7d2)。

其次，我们要了解未知分为两种：一种是永远不能解决的，另一种是在可预见的未来也许能够解决的。对一个人来说，超过100年就可以算“永远”了，所以，第一种未知对个人来说意义不大；第二种未知却是我们必须面


о сколько угодно, чтобы обрабатывать ошибки на разных уровнях.

# Реактивные утилиты

Эти утилиты предоставляют возможность лучше планировать обновления и контролировать отслеживание реактивности.

## `untrack`

```ts
import { untrack } from "solid-js";

function untrack<T>(fn: () => T): T;
```

Игнорирует отслеживание любых зависимостей в блоке исполняемого кода и возвращает значение.

## `batch`

```ts
import { batch } from "solid-js";

function batch<T>(fn: () => T): T;
```

Создает транзакцию обновлений в блоке, чтобы предотвратить ненужный пересчет. Это означает, что значения геттеров в следующей строке еще не будут обновлены.

Сеттеры из [Solid Store](#createstore) и эффекты автоматически оборачивают свой код в `batch`.

## `on`

```ts
import { on } from "solid-js";

function on<T extends Array<() => any> | (() => any), U>(
  deps: T,
  fn: (input: T, prevInput: T, prevValue?: U) => U,
  options: { defer?: boolean } = {}
): (prevValue?: U) => U | undefined;
```

Предназначен для передачи в какое-либо вычисление для того чтобы сделать его зависимости явными. Если передается массив зависимостей, `input` и `prevInput` являются массивами.

```js
createEffect(on(a, v => console.log(v, b())))

// Эквивалентен строке выше
createEffect(() => {
  const v = a()
  untrack(() => console.log(v, b()))
})
```

Вы также можете запускать вычисления не сразу, а, например, только при каких-либо изменениях, установив для параметра `defer` значение `true`.

```js
// Не запускается сразу
createEffect(on(a, v => console.log(v), { defer: true }));

// Теперь все работает
setA('new');
```

## `createRoot`

```ts
import { createRoot } from "solid-js";

function createRoot<T>(fn: (dispose: () => void) => T): T;
```

Создает новый неотслеживаемый контекст, который не удаляется автоматически. Это полезно для вложенных реактивных контекстов, которые вы не хотите трогать при повторной оценке родителя. Это мощный шаблон для кэширования.

Весь сплошной код Solid может быть заключен в один из этих верхних уровней, поскольку они гарантируют, что вся память/вычисления будет освобождена.

Обычно вам не нужно беспокоиться об этом, так как `createRoot` встроен во все функции передаваемые в метод `render`.

## `mergeProps`

```ts
import { mergeProps } from "solid-js";

function mergeProps(...sources: any): any;
```


switch(fmt) {
          case "###,###":
          case "##,###":
          case "#,###": var x = commaify(""+aval); return x !== "0" ? sign + x : "";
          default:
            if(fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0,fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
        }
        throw new Error("unsupported format |" + fmt + "|");
      }
      return function write_num(type, fmt, val) {
        return (val|0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
      };})();
    function split_fmt(fmt) {
      var out = [];
      var in_str = false/*, cc*/;
      for(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {
        case 34: /* '"' */
          in_str = !in_str; break;
        case 95: case 42: case 92: /* '_' '*' '\\' */
          ++i; break;
        case 59: /* ';' */
          out[out.length] = fmt.substr(j,i-j);
          j = i+1;
      }
      out[out.length] = fmt.substr(j);
      if(in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
      return out;
    }
    SSF._split = split_fmt;
    var abstime = /\[[HhMmSs]*\]/;
    function fmt_is_date(fmt) {
      var i = 0, /*cc = 0,*/ c = "", o = "";
      while(i < fmt.length) {
        switch((c = fmt.charAt(i))) {
          case 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;
          case '"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) ++i; ++i; break;
          case '\\': i+=2; break;
          case '_': i+=2; break;
          case '@': ++i; break;
          case 'B': case 'b':
            if(fmt.charAt(i+1) === "1" || fmt.charAt(i+1) === "2") return true;
          /* falls through */
          case 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':
          /* falls through */
          case 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;
          case 'A': case 'a':
            if(fmt.substr(i, 3).toUpperCase() === "A/P") return true;
            if(fmt.substr(i, 5).toUpperCase() === "AM/PM") return true;
            ++i; break;
          case '[':
            o = c;
            while(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);
            if(o.match(abstime)) return true;
            break;
          case '.':
          /* falls through */
          case '0': case '#':
            while(i < fmt.length && ("0#?.,E+-%".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\' && fmt.charAt(i+1) == "-" && "0#".indexOf(fmt.charAt(i+2))>-1))){/* empty */}
            break;
          case '?': while(fmt.


n.PushAsync(new NotePage(note, true));
                    }
                };

            // Create and initialize ToolbarItem.
            ToolbarItem addNewItem = new ToolbarItem
            {
                Name = "Add Note",
                Icon = Device.OnPlatform("new.png",
                                         "ic_action_new.png",
                                         "Images/add.png"),
                Order = ToolbarItemOrder.Primary
            };

            addNewItem.Activated += (sender, args) =>
                {
                    // Create unique filename.
                    DateTime datetime = DateTime.UtcNow;
                    string filename = datetime.ToString("yyyyMMddHHmmssfff") + ".note";

                    // Navigate to new NotePage.
                    Note note = new Note(filename);
                    this.Navigation.PushAsync(new NotePage(note));
                };

            this.ToolbarItems.Add(addNewItem);

            // Assemble page.
            this.Content = listView;
        }
    }
}


r of the specific register class available from the current
  /// position backwards to the place before \p To. If \p RestoreAfter is true
  /// this includes the instruction following the current position.
  /// SPAdj is the stack adjustment due to call frame, it's passed along to
  /// eliminateFrameIndex().
  /// Returns the scavenged register.
  ///
  /// If \p AllowSpill is false, fail if a spill is required to make the
  /// register available, and return NoRegister.
  Register scavengeRegisterBackwards(const TargetRegisterClass &RC,
                                     MachineBasicBlock::iterator To,
                                     bool RestoreAfter, int SPAdj,
                                     bool AllowSpill = true);

  /// Tell the scavenger a register is used.
  void setRegUsed(Register Reg, LaneBitmask LaneMask = LaneBitmask::getAll());

private:
  /// Returns true if a register is reserved. It is never "unused".
  bool isReserved(Register Reg) const { return MRI->isReserved(Reg); }

  /// Initialize RegisterScavenger.
  void init(MachineBasicBlock &MBB);

  /// Spill a register after position \p After and reload it before position
  /// \p UseMI.
  ScavengedInfo &spill(Register Reg, const TargetRegisterClass &RC, int SPAdj,
                       MachineBasicBlock::iterator Before,
                       MachineBasicBlock::iterator &UseMI);
};

/// Replaces all frame index virtual registers with physical registers. Uses the
/// register scavenger to find an appropriate register to use.
void scavengeFrameVirtualRegs(MachineFunction &MF, RegScavenger &RS);

} // end namespace llvm

#endif // LLVM_CODEGEN_REGISTERSCAVENGING_H


4₂₄₀, KR 69₃₂₉, SC 16₄₀₀, TC 90₅₇₅.
    '4r4o3k2s6s,'
    // #4782: 5 fonts: HK 94₁₂₁, JP 104₂₄₀, KR 86₃₄₆, SC 87₄₇₁, TC 90₅₇₅.
    '4r4o4b4u3z,'
    // #4783: 5 fonts: HK 94₁₂₁, JP 104₂₄₀, KR 93₃₅₃, SC 84₄₆₈, TC 90₅₇₅.
    '4r4o4i4k4c,'
    // #4784: 5 fonts: HK 94₁₂₁, JP 105₂₄₁, KR 86₃₄₆, SC 85₄₆₉, TC 90₅₇₅.
    '4r4p4a4s4b,'
    // #4785: 5 fonts: HK 94₁₂₁, JP 107₂₄₃, KR 69₃₂₉, SC 85₄₆₉, TC 90₅₇₅.
    '4r4r3h5j4b,'
    // #4786: 5 fonts: HK 94₁₂₁, JP 107₂₄₃, KR 71₃₃₁, SC 84₄₆₈, TC 90₅₇₅.
    '4r4r3j5g4c,'
    // #4787: 5 fonts: HK 94₁₂₁, JP 107₂₄₃, KR 91₃₅₁, SC 85₄₆₉, TC 90₅₇₅.
    '4r4r4d4n4b,'
    // #4788: 5 fonts: HK 94₁₂₁, JP 107₂₄₃, KR 101₃₆₁, SC 78₄₆₂, TC 90₅₇₅.
    '4r4r4n3w4i,'
    // #4789: 5 fonts: HK 94₁₂₁, JP 108₂₄₄, KR 67₃₂₇, SC 77₄₆₁, TC 90₅₇₅.
    '4r4s3e5d4j,'
    // #4790: 5 fonts: HK 94₁₂₁, JP 110₂₄₆, KR 87₃₄₇, SC 55₄₃₉, TC 90₅₇₅.
    '4r4u3w3n5f,'
    // #4791: 5 fonts: HK 94₁₂₁, JP 113₂₄₉, KR 0₂₆₀, SC 80₄₆₄, TC 90₅₇₅.
    '4r4xk7v4g,'
    // #4792: 5 fonts: HK 94₁₂₁, JP 113₂₄₉, KR 93₃₅₃, SC 83₄₆₇, TC 90₅₇₅.
    '4r4x3z4j4d,'
    // #4793: 3 fonts: HK 94₁₂₁, SC 85₄₆₉, TC 90₅₇₅.
    '4r13j4b,'
    // #4794: 3 fonts: HK 94₁₂₁, SC 87₄₇₁, TC 90₅₇₅.
    '4r13l3z,'
    // #4795: 5 fonts: HK 95₁₂₂, JP 5₁₄₁, KR 65₃₂₅, SC 4₃₈₈, TC 91₅₇₆.
    '4ss7b2k7f,'
    // #4796: 5 fonts: HK 95₁₂₂, JP 8₁₄₄, KR 65�


description"]={en:["Dow Jones Commodity Index Cocoa"],he_IL:["דאו ג'ונס מדד סחורות הקקאו"]},e.exports["#DJ:DJCIGR-symbol-description"]={en:["Dow Jones Commodity Index Grains"],he_IL:["מדד דאו ג'ונס סחורות דגנים"]},e.exports["#DJ:DJCIAGC-symbol-description"]={en:["Dow Jones Commodity Index Agriculture Capped Component"],he_IL:["Dow Jones Commodity Index Agriculture Capped Component"]},e.exports["#DJ:DJCISI-symbol-description"]={en:["Dow Jones Commodity Index Silver"],he_IL:["דאו ג 'ונס מדד סחורות כסף"]},e.exports["#DJ:DJCIIK-symbol-description"]={en:["Dow Jones Commodity Index Nickel"],he_IL:["מדד דאו ג 'ונס סחורות ניקל"]},e.exports["#NASDAQ:HGX-symbol-description"]={en:["PHLX Housing Sector Index"],he_IL:["PHLX Housing Sector Index"]},e.exports["#DJ:DJCIGC-symbol-description"]={en:["Dow Jones Commodity Index Gold"],he_IL:["מדד דאו ג'ונס סחורות זהב"]},e.exports["#SP:SPGSCI-symbol-description"]={en:["S&P Goldman Sachs Commodity Index"],he_IL:["S&P Goldman Sachs Commodity Index"]},e.exports["#NASDAQ:UTY-symbol-description"]={en:["PHLX Utility Sector Index"],he_IL:["PHLX Utility Sector Index"]},e.exports["#DJ:DJU-symbol-description"]={en:["Dow Jones Utility Average Index"],
he_IL:["Dow Jones Utility Average Index"]},e.exports["#SP:SVX-symbol-description"]={en:["S&P 500 Value Index"],he_IL:["מדד S&P 500 Value"]},e.exports["#SP:OEX-symbol-description"]={en:["S&P 100 Index"],he_IL:["מדד S&P 100"]},e.exports["#CBOE:OEX-symbol-description"]={en:["S&P 100 Index"],he_IL:["מדד S&P 100"]},e.exports["#NASDAQ:SOX-symbol-description"]={en:["Philadelphia Semiconductor Index"],he_IL:["מדד מוליכים למחצה פילדלפיה"]},e.exports["#RUSSELL:RUI-symbol-description"]={en:["Russell 1000 Index"],he_IL:["מדד Russel 1000"]},e.exports["#RUSSELL:RUA-symbol-description"]={en:["Russell 3000 Index"],he_IL:["מדד Russel 3000"]},e.exports["#RUSSELL:RUT-symbol-description"]={en:["Russell 2000 Index"],he_IL:["מדד Russel 2000"]},e.exports["#NYSE:XMI-symbol-description"]={en:["NYSE ARCA Major Market Index"],he_IL:["NYSE ARCA Major Market Index"]},e.exports["#NYSE:XAX-symbol-description"]={en:["AMEX Composite Index"],he_IL:["מדד AMEX Composite"]},e.exports["#NASDAQ:NDX-symbol-description"]={en:["Nasdaq 100 Index"],he_IL:['מדד נאסד"ק 100']},e.exports["#NASDAQ:IXIC-symbol-description"]={en:["Nasdaq Composite Index"],he_


DeleteAll(shared->MemoryObjects, delete_memory_object_cb, ctx);
      _mesa_DeleteHashTable(shared->MemoryObjects);
   }

   if (shared->SemaphoreObjects) {
      _mesa_HashDeleteAll(shared->SemaphoreObjects, delete_semaphore_object_cb, ctx);
      _mesa_DeleteHashTable(shared->SemaphoreObjects);
   }

   simple_mtx_destroy(&shared->Mutex);
   simple_mtx_destroy(&shared->TexMutex);

   FREE(shared);
}

/**
 * gl_shared_state objects are ref counted.
 * If ptr's refcount goes to zero, free the shared state.
 */
void
_mesa_reference_shared_state(struct gl_context *ctx,
                             struct gl_shared_state **ptr,
                             struct gl_shared_state *state)
{
   if (*ptr == state)
      return;

   if (*ptr) {
      /* unref old state */
      struct gl_shared_state *old = *ptr;
      GLboolean delete;

      simple_mtx_lock(&old->Mutex);
      assert(old->RefCount >= 1);
      old->RefCount--;
      delete = (old->RefCount == 0);
      simple_mtx_unlock(&old->Mutex);

      if (delete) {
         free_shared_state(ctx, old);
      }

      *ptr = NULL;
   }

   if (state) {
      /* reference new state */
      simple_mtx_lock(&state->Mutex);
      state->RefCount++;
      *ptr = state;
      simple_mtx_unlock(&state->Mutex);
   }
}


/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the qmake application of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.  For licensing terms and
** conditions see http://qt.digia.com/licensing.  For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights.  These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef BORLAND_BMAKE_H
#define BORLAND_BMAKE_H

#include "winmakefile.h"

QT_BEGIN_NAMESPACE

class BorlandMakefileGenerator : public Win32MakefileGenerator
{
    bool init_flag;
    void writeBorlandParts(QTextStream &);
    void writeBuildRulesPart(QTextStream &t);
    void writeCleanParts(QTextStream &t);
    bool writeMakefile(QTextStream &);
    void init();

public:
    BorlandMakefileGenerator();
    ~BorlandMakefileGenerator();
};

inline BorlandMakefileGenerator::~BorlandMakefileGenerator()
{ }

QT_END_NAMESPACE

#endif // BORLAND_BMAKE_H


	'',	'',	'',	'',	'',	'',	''},
{'1041927',	'',	'我会的。但在这之前，我们是不是要去找那位岁稔大人？',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'100000',	'',	'1',	'2',	'1',	'%s',	'',	'',	'',	'4',	'',	'',	'',	'',	'',	'',	'',	'',	'1041928',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	''},
{'1041928',	'',	'没错。往这边走，就是通往千穗之宫的路。',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'7041001',	'',	'',	'2',	'',	'鸣刃',	'Buzzing Blade',	'',	'',	'4',	'',	'',	'',	'',	'',	'',	'',	'',	'1041929',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	''},
{'1041929',	'',	'也不知道她在忙些什么，居然把通讯都断掉了……',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'7041001',	'',	'',	'2',	'',	'鸣刃',	'Buzzing Blade',	'',	'',	'2',	'',	'',	'',	'',	'',	'',	'',	'',	'1041930',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	''},
{'1041930',	'',	'奇怪，这具造物守卫是哪部分的回路出了问题？',	'',	'',	'',	'Bg_9129.jpg',	'',	'',	'0.5,0.25',	'1',	'',	'9957001',	'',	'',	'2',	'',	'雪华',	'Snow Night',	'[{"id":9957001,"pos":2,"enter":2}]',	'',	'2',	'',	'',	'',	'',	'',	'',	'',	'',	'1041931',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'',	''},
{'1041931',	'',	'构件正常，传动装置正常……为什么会失控，甚至自行开启无差别攻击模式？',	'',	'',	'',	'',	'',	'',	'',	'',	'',	'9957001',	'',	'',	'2',	'',	'雪华',	'Snow Night',	'',	'',	'2',	'',	'',	'',	'',	'',	'',	'',	'',	'1041932',	'',	'',	'',	'',	'',	'',	'


 2 -100, curAct, curPat);
    }
  }
  if (curdirection < 2 || 5 < curdirection) {
    if (sprite_Shield) {
      sprite_Shield->DrawPattern(GL_WIN_WIDTH / 2, GL_WIN_HEIGHT / 2 - 100, curAct, curPat);
    }
  }
#ifndef USE_LINE
  glDisable(GL_TEXTURE_2D);
#endif
  glFlush();
}

void CChrView::DrawSpritesHead(CSprite *sprite, int x, int y)
{
  sprite->DrawPatternHead(GL_WIN_WIDTH / 2 + x,
                          GL_WIN_HEIGHT / 2 - 100 - y,
                          curAct, curPat);
}

void CChrView::SetNullSprites(void)
{
  sprite_Body = sprite_Head = NULL;
  sprite_Acc1 = sprite_Acc2 = NULL;
  sprite_Acc3 = sprite_Weapon = NULL;
  sprite_WpAftimg = sprite_Shield = NULL;
}

void CChrView::InitNumActPat(void)
{
  if (sprite_Body) {
    numAct = sprite_Body->GetNumAction();
    numPat = sprite_Body->GetNumPattern(0);
  } else {
    numAct = numPat = 0;
  }
  curdirection = 0;
  curAct = 0;
  curPat = 0;
}

void CChrView::SelectAct(int idAct)
{
  sprready = false;
  curAct = curdirection + 8 * idAct;
  numPat = sprite_Body->GetNumPattern(curAct);
  curPat = 0;
  sprready = true;
}

void CChrView::SelectDirection(int idAct, int idDirection)
{
  sprready = false;
  curdirection = idDirection;
  curAct = curdirection + 8 * idAct;
  if (numAct == 1)  curAct = 0;
  if (numAct == 2)  curAct = curdirection % 2;
  numPat = sprite_Body->GetNumPattern(curAct);
  curPat = 0;
  sprready = true;
}

void CChrView::SetWeaponName(char *fnp, char *bodynameW, char *bodyname2)
{
  char name[100];
  char name2[100];
  char dispname[100];

  strcpy(name2, &fnp[strlen(bodynameW)+strlen(bodyname2)+1+1+2]);  // '(body)\(body)_s_'
  name2[strlen(name2)-4] = '\0';
  if (atoi(name2) == 0) {
    if (strstr(name2, AFTERIMAGE_STR) == 0) {
      strcpy(dispname, name2);
    } else {
      return;
    }
  } else {
    sprintf(dispname, "item%s", name2);
  }
  strcpy(name, _(dispname));
  InitNFDADD(name, name2, &NFDPCWeapon);
}

void CChrView::SetShieldName(char *fnp, char *bodynameS, char *bodyname2)
{
  char name[100];
  char name2[100];
  strcpy(name2, &fnp[strlen(bodynameS)+strlen(bodyname2)+1+1+2]);  // '(body)\(body)_s_'
  name2[strlen(name2)-4] = '\0';
  strcpy(name, _(name2));
  InitNFDADD(name, name2, &NFDPCShield);
}

char *CChrView::GetNFDFnameFromDname(NFD *nfd, char *dispname)
{
  NAME_FvsD tmpfd, *nfdret;

  tmpfd.dispname = (char *)malloc(strlen(dispname)+1);


bDatabaseLib.hasUser(stoken["deviceId"].toString())) {
        // 更新
        await HoYoLabDatabaseLib.updateUser(
          deviceId: stoken["deviceId"].toString(),
          aid: stoken["aid"].toString(),
          mid: stoken["mid"].toString(),
          ltoken: ltoken.toString(),
          stoken: stoken["token"].toString(),
          cookieToken: cookieToken
        );
        Application.globalProviderScope.read(globalUserManagerRiverpod).editUser(
          stoken["deviceId"].toString(),
          aid: stoken["aid"].toString(),
          uid: stoken["aid"].toString(),
          mid: stoken["mid"].toString(),
          ltoken: ltoken.toString(),
          stoken: stoken["token"].toString(),
          cookieToken: cookieToken ?? "",
          isExpired: false,
        );
      } else {
        // 添加
        await HoYoLabDatabaseLib.insertUser(
          deviceId: stoken["deviceId"].toString(),
          aid: stoken["aid"].toString(),
          uid: stoken["aid"].toString(),
          mid: stoken["mid"].toString(),
          ltoken: ltoken.toString(),
          stoken: stoken["token"].toString(),
          cookieToken: cookieToken ?? ""
        );

        Application.globalProviderScope.read(globalUserManagerRiverpod).addUser(
          id: stoken["deviceId"].toString(),
          aid: stoken["aid"].toString(),
          uid: stoken["aid"].toString(),
          mid: stoken["mid"].toString(),
          ltoken: ltoken.toString(),
          stoken: stoken["token"].toString(),
          cookieToken: cookieToken ?? "",
          avatar: "",
          isExpired: false,
          nickname: "",
          role: []
        );
      }

      // 异步获取用户信息
      HoYoLabBBSLib.selfInfo(
        stoken: stoken["token"].toString(),
        uid: stoken["aid"].toString(),
        mid: stoken["mid"].toString(),
        deviceId: stoken["deviceId"].toString()
      ).then((userinfo) async {
        if (userinfo == null) {
          return false;
        }

        Application.globalProviderScope.read(globalUserManagerRiverpod).editUser(
          stoken["deviceId"].toString(),
          nickname: userinfo["nickname"].toString(),
          avatar: userinfo["avatar"].toString()
        );

        // 获取角色信息
        await HoYoLabGameRolesLib.stokenGetRoles(
          stoken: stoken["token"].toString(),
          uid: stoken["aid"].toString(),
          mid: stoken["mid"].toString(),
          deviceId: stoken["deviceId"].toString(),
          ltoken: ltoken.toString(),
        ).then((roles) async {
          if (roles != null && roles.isNotEmpty) {
            Application.globalProviderScope.read(globalUserManagerRiverpod).editUser(
              stoken["deviceId"].toString(),
              role: roles
            );
          }
          if (roles != null && roles.isNotEmpty) {
            Application.globalProviderScope.read(globalUserManagerRiverpod).changeUser(stoken["deviceId"].toString());
            await HoYoLabDatabaseLib.selectUser(stoken["deviceId"].toString());
            await Future.delayed(const Duration(milliseconds: 50));
            Application.globalProviderScope.read(globalUserManagerRiverpod).changeRole(int.parse(roles[0]["game_uid"].toString()));
          }
        });
      });

      Application.globalProviderScope.read(globalDialogRiverpod).hidden();
      await Future.delayed(const Duration(milliseconds: 200));
      Application.globalProviderScope.


R8)
	VMOVDQU        Y4, 32(R8)
	ADDQ           $0x40, R8
	VPSRLQ         $0x04, Y7, Y2
	VPAND          Y0, Y7, Y1
	VPAND          Y0, Y2, Y2
	VBROADCASTI128 (CX), Y3
	VBROADCASTI128 64(CX), Y4
	VPSHUFB        Y1, Y3, Y3
	VPSHUFB        Y1, Y4, Y1
	VBROADCASTI128 16(CX), Y4
	VBROADCASTI128 80(CX), Y9
	VPSHUFB        Y2, Y4, Y4
	VPSHUFB        Y2, Y9, Y2
	VPXOR          Y3, Y4, Y3
	VPXOR          Y1, Y2, Y1
	VPAND          Y8, Y0, Y2
	VPSRLQ         $0x04, Y8, Y4
	VPAND          Y0, Y4, Y4
	VBROADCASTI128 32(CX), Y9
	VBROADCASTI128 96(CX), Y10
	VPSHUFB        Y2, Y9, Y9
	VPSHUFB        Y2, Y10, Y2
	VPXOR          Y3, Y9, Y3
	VPXOR          Y1, Y2, Y1
	VBROADCASTI128 48(CX), Y9
	VBROADCASTI128 112(CX), Y2
	VPSHUFB        Y4, Y9, Y9
	VPSHUFB        Y4, Y2, Y2
	VPTERNLOGD     $0x96, Y3, Y9, Y5
	VPTERNLOGD     $0x96, Y1, Y2, Y6
	VPXOR          Y5, Y7, Y7
	VPXOR          Y6, Y8, Y8
	VMOVDQU        Y5, (R9)
	VMOVDQU        Y6, 32(R9)
	ADDQ           $0x40, R9
	VMOVDQU        Y7, (AX)
	VMOVDQU        Y8, 32(AX)
	ADDQ           $0x40, AX
	SUBQ           $0x40, BX
	JNZ            loop
	VZEROUPPER
	RET

// func ifftDIT4_avx512_1(work [][]byte, dist int, table01 *[128]uint8, table23 *[128]uint8, table02 *[128]uint8)
// Requires: AVX, AVX2, AVX512F, AVX512VL, SSE2
TEXT ·ifftDIT4_avx512_1(SB), NOSPLIT, $0-56
	// dist must be multiplied by 24 (size of slice header)
	MOVQ           table01+32(FP), AX
	MOVQ           table23+40(FP), AX
	MOVQ           table02+48(FP), CX
	VBROADCASTI128 (CX), Y1
	VBROADCASTI128 64(CX), Y0
	VMOVAPS        Z1, Z16
	VMOVAPS        Z0, Z17
	VBROADCASTI128 16(CX), Y1
	VBROADCASTI128 80(CX), Y0
	VMOVAPS        Z1, Z18
	VMOVAPS        Z0, Z19
	VBROADCASTI128 32(CX), Y1
	VBROADCASTI128 96(CX), Y0
	VMOVAPS        Z1, Z20
	VMOVAPS        Z0, Z21
	VBROADCASTI128 48(CX), Y1
	VBROADCASTI128 112(CX), Y0
	VMOVAPS        Z1, Z22
	VMOVAPS        Z0, Z23
	VBROADCASTI128 (AX), Y1
	VBROADCASTI128 64(AX), Y0
	VMOVAPS        Z1, Z24
	VMOVAPS        Z0, Z25


    Future<bool> _testNativeMessagingHostsInterfaceAccess() async {
      const nativeManifestDomain = 'io.github.glitterware.passy_cli';
      const nativeManifestNewFilename = '$nativeManifestDomain.test';
      String? home = Platform.environment['SNAP_REAL_HOME'];
      home ??= Platform.environment['HOME']!;
      Directory? nativeManifestDir;
      for (String nativeManifestPath in const [
        '.mozilla/native-messaging-hosts',
        '.config/microsoft-edge/NativeMessagingHosts',
        '.config/google-chrome/NativeMessagingHosts',
        '.config/chromium/NativeMessagingHosts',
        '.config/BraveSoftware/Brave-Browser/NativeMessagingHosts',
      ]) {
        Directory testDir = Directory(path_lib.join(home, nativeManifestPath));
        bool exists;
        try {
          exists = await testDir.exists();
        } catch (_) {
          continue;
        }
        if (exists) {
          nativeManifestDir = testDir;
          break;
        }
      }
      if (nativeManifestDir == null) return true;
      File testManifestFile =
          File(nativeManifestDir.path + '/' + nativeManifestNewFilename);
      try {
        await testManifestFile.create();
        if (await testManifestFile.exists()) {
          await testManifestFile.delete();
          return true;
        }
      } catch (_) {}
      return false;
    }

    Future<void> _copyExtensionFiles() async {
      File? passyCliTemp = await _getTemporaryCliExecutable();
      if (passyCliTemp == null) return;
      File? manifest = await _prepareManifest(passyCliTemp.path);
      if (manifest == null) return;
      if (Platform.isLinux) {
        if (isSnap()) {
          dynamic hasAccess = await _testNativeMessagingHostsInterfaceAccess();
          if (hasAccess != true) {
            showSnackBar(
              backgroundColor: const Color.fromRGBO(255, 82, 82, 1),
              message: localizations.unableToConnectBrowserExtension,
              icon: const Icon(Icons.extension_rounded,
                  color: Color.fromRGBO(227, 242, 253, 1)),
              duration: const Duration(seconds: 10),
              action: SnackBarAction(
                textColor: const Color.fromRGBO(227, 242, 253, 1),
                label: localizations.details,
                onPressed: () => openUrl(
                    'https://github.com/GlitterWare/Passy/blob/dev/SNAP-STORE.md#enabling-browser-extension-support'),
              ),
              textStyle: const TextStyle(
                color: Color.fromRGBO(227, 242, 253, 1),
                backgroundColor: Color.fromRGBO(255, 82, 82, 1),
              ),
            );
            return;
          }
        }
        _copyManifestLinux(manifest);
        return;
      }
      _copyManifestWindows(manifest);
    }

    Future<void> _load() async {
      await Future.delayed(const Duration(milliseconds: 5));
      if (Platform.isWindows || Platform.isLinux) _copyExtensionFiles();
      data = await loadPassyData();
      loaded = true;
      PassyAppTheme? appTheme = data.getAppTheme(data.info.value.lastUsername);
      switchAppTheme(context, appTheme);
      if (data.noAccounts) {
        Navigator.pushReplacementNamed(context, AddAccountScreen.routeName);
        return;
      }
      Navigator.pushReplacementNamed(context, LoginScreen.routeName);
      if (const String.fromEnvironment('UPDATES_POPUP_ENABLED') != 'false') {
        try {
          String _version;
          if (kDebugMode) {
            _version = passyVersion;
          } else {
            _version = await getLatestVersion();
          }
          if (_version == passyVersion) return;


 with Python Development?](./docs/en/2024-03-16-weekly.md)
  - Shared 12 articles, 12 open-source projects, 6 books given away: "Fluent Python"
- Issue 41: [Writing Code is Simple, But Writing Good Code is Hard](./docs/en/2024-03-09-weekly.md)
  - Shared 12 articles, 12 open-source projects, 5 books given away: "Python Craftsman"
- Issue 40: [White House Recommends Memory-Safe Languages Like Python](./docs/en/2024-03-02-weekly.md)
  - Shared 12 articles, 11 open-source projects
- Issue 39: [Ultra-Fast Packaging Tool Developed in Rust](./docs/en/2024-02-24-weekly.md)
  - Shared 13 articles, 13 open-source projects, 2 podcasts
- Issue 38: [Building Full-Stack Projects with Django + Next.js](./docs/en/2024-02-03-weekly.md)
  - Shared 12 articles, 12 open-source projects, 5 books given away: "AI Drawing in Practice: Midjourney from Beginner to Expert"
- Issue 37: [Python's "Disappointing" Dynamic Typing Superpower](./docs/en/2024-01-27-weekly.md)
  - Shared 12 articles, 12 open-source projects
- Issue 36: [Python Packaging Ecosystem Still Not Optimistic](./docs/en/2024-01-20-weekly.md)
  - Shared 11 articles, 12 open-source projects
- Issue 35: [Python JIT Compiler and Numpy2 Coming Soon](./docs/en/2024-01-13-weekly.md)
  - Shared 12 articles, 12 open-source projects, 2 hot discussions
- Issue 34: [Python 3.13's JIT Solution is Both New and Good!](./docs/en/2024-01-06-weekly.md)
  - Shared 13 articles, 13 open-source projects, 2 audio/videos
- Issue 33: [FastAPI is Good, Flask Isn't Dead, Both Have a Future](./docs/en/2023-12-30-weekly.md)
  - Shared 15 articles, 13 open-source projects, 1 video
- Issue 32: [Building a Personal News Aggregator](./docs/en/2023-12-23-weekly.md)
  - Shared 10 articles, 10 open-source projects, 3 audio/videos
- Issue 31: [After iOS, New PEP Proposes Adding Android as an Officially Supported Platform](./docs/en/2023-12-16-weekly.md)
  - Shared 13 articles, 12 open-source projects, 3 audio/videos
- [Season 1 Collection](./docs/2023-12-11-weekly.md)
  - Highlights from issues 1-30, totaling 62K words
- Issue 30: [An Open Letter from the African Python Community to PSF](./docs/en/2023-12-09-weekly.md)
  - Shared 12 articles, 12 open-source projects
- Issue 29: [Can Rust Be Slower Than Python?!](./docs/en/2023-12-02-weekly.md)
  - Shared 12 articles, 12 open-source projects, 2 podcasts, 2 hot discussions
- Issue 28: [Two Types of Thread Pools, Four Methods to Optimize Programs](./docs/en/2023-11-25-weekly.md)
  - Shared 12 articles, 12 open-source projects
- Issue 27: [How Should We Handle Program Errors?](./docs/en/2023-11-18-weekly.md)
  - Shared 12 articles, 12 open-source projects, 2 videos
- Issue 26: [The Current State of requests3](./docs/en/2023-11-11-weekly.md)
  - Shared 12 articles, 12 open-source projects, 3 audio/videos
- Issue 25: [Ruff: The Fastest Code Formatting Tool!](./docs/en/2023-11-04-weekly.md)
  - Shared 12 articles, 12 open-source projects
- Issue 24: [no-GIL Proposal Officially Adopted!](./docs/en/2023-10-29-weekly.md)
  -


�行，直到点击“终止运行”按钮 ![](images/image42.png) 为止。此时，调整“旋钮”和“转盘”的数值，“量表”中的数值会立刻随之变化。

但是，这个连续运行的方案有其不足之处，它只在临时调试时使用。因为通常提供给最终用户的是 LabVIEW 编译生成的可执行文件，它是没有“连续运行”按钮的。并且，使用“连续运行”按钮，程序内所有的代码都会反复运行，没办法将程序中只需运行一次的代码和需要重复运行的代码区分开来。

持续运行的真正有效方案是使用循环结构。在函数选板中选择“编程 -\> 结构 -\> While 循环”，把循环结构拖到 VI 的程序框图上，再把加法运算的整个代码都置于循环体内。while 循环结构看上去是一个深色的矩形方块，方块包围的区域称为循环体。while 循环的含义是：若不满足循环停止条件（或者满足循环继续运行条件），程序将持续重复执行循环体内的代码。本书会在 [循环结构](data_array) 一节中对 while 循环结构做详细阐述。

while 循环结构的矩形框内，右下角的红色小块用来输入循环条件。鼠标右键点击在循环条件上，在右键菜单中选择“创建输入控件”，就可以为循环条件创建一个控制按钮，名为“停止”。当点击这个按钮的时候，循环就停止运行。

现在再点击工具条上的“运行”按钮，程序将持续运行，与前文提到的点击“连续运行”按钮起到的效果是相同的。点击 VI 前面板上的“停止”控件，可以使 VI 运行停止。

但是，这个程序还需要再改进一下。因为这个程序在运行时，短时间内循环就可以达到非常高的迭代次数：每秒钟循环迭代可达一千万次以上（与电脑硬件配置有关），它会占用大量 CPU 资源。实际上，运算的更新速度不需要那么快。“转盘”数值的更新速度如果超过每秒三、四次，人眼就已经跟不上其变化了。因此，我们可以通过延时来降低循环的迭代频率。把函数选板中的“编程 -\> 定时 -\> 等待”函数添加到循环体内，并设置等待时间为 200 毫秒。这样，循环体内的加法计算结束后，需要等待大约


, stop, (ftnlen)1);
	sigerr_("SPICE(DEGENERATEINTERVAL)", (ftnlen)25);
	chkout_("CKW02", (ftnlen)5);
	return 0;
    }
    i__1 = *nrec;
    for (i__ = 2; i__ <= i__1; ++i__) {
	if (stop[i__ - 1] <= start[i__ - 1]) {
	    setmsg_("The STOP time is less than or equal to the START time f"
		    "or interval number #. START time is # and STOP time is #."
		    , (ftnlen)112);
	    errint_("#", &i__, (ftnlen)1);
	    errdp_("#", &start[i__ - 1], (ftnlen)1);
	    errdp_("#", &stop[i__ - 1], (ftnlen)1);
	    sigerr_("SPICE(DEGENERATEINTERVAL)", (ftnlen)25);
	    chkout_("CKW02", (ftnlen)5);
	    return 0;
	}
	if (start[i__ - 1] <= start[i__ - 2]) {
	    setmsg_("The START times are not strictly increasing.  START(#) "
		    "= # and START(#) = #.", (ftnlen)76);
	    errint_("#", &i__, (ftnlen)1);
	    errdp_("#", &start[i__ - 1], (ftnlen)1);
	    i__2 = i__ - 1;
	    errint_("#", &i__2, (ftnlen)1);
	    errdp_("#", &start[i__ - 2], (ftnlen)1);
	    sigerr_("SPICE(TIMESOUTOFORDER)", (ftnlen)22);
	    chkout_("CKW02", (ftnlen)5);
	    return 0;
	}
	if (stop[i__ - 2] > start[i__ - 1]) {
	    setmsg_("The STOP time for interval # is greater than the follow"
		    "ing START time. STOP(#) = # and START(#) = #.", (ftnlen)
		    100);
	    i__2 = i__ - 1;
	    errint_("#", &i__2, (ftnlen)1);
	    i__2 = i__ - 1;
	    errint_("#", &i__2, (ftnlen)1);
	    errdp_("#", &stop[i__ - 2], (ftnlen)1);
	    errint_("#", &i__, (ftnlen)1);
	    errdp_("#", &start[i__ - 1], (ftnlen)1);
	    sigerr_("SPICE(BADSTOPTIME)", (ftnlen)18);
	    chkout_("CKW02", (ftnlen)5);
	    return 0;
	}
    }

/*     Make sure that the quaternions all have unit length. */

    i__1 = *nrec;
    for (i__ = 1; i__ <= i__1; ++i__) {
	l = quats[(i__ << 2) - 4] * quats[(i__ << 2) - 4] + quats[(i__ << 2)
		- 3] * quats[(i__ << 2) - 3] + quats[(i__ << 2) - 2] * quats[(
		i__ << 2) - 2] + quats[(i__ << 2) - 1] * quats[(i__ << 2) - 1]
		;

/*        This is only a sanity check.  We make sure that */
/*        we have a unit quaternion to single precision. */

	if ((d__1 = 1. - l, abs(d__1)) > .01) {
	    setmsg_("The #'th quaternion is not a unit quaternion. It's squa"
		    "red length is #. ", (ftnlen)72);
	    errint_("#", &i__, (ftnlen)1);
	    errdp_("#", &l, (ftnlen)1);
	    sigerr_("SPICE(NONUNITQUATERNION)", (ftnlen)24);
	    chkout_("CKW02", (ftnlen)5);
	    return 0;
	}
    }

/*     No more checks, begin writing the segment. */

    dafbna_(handle, descr, segid, segid_len);
    if (failed_()) {
	chkout_("CKW02", (ftnlen)5);
	return 0;
    }

/*     Now add the quaternions, angular velocity vectors, and time */
/*     conversion factors for each interval. */

    i__1 = *nrec;
    for (i__ = 1; i__ <= i__1; ++i__) {
	dafada_(&quats[(i__ << 2) - 4], &c__4);
	dafada_(&avvs[i__ * 3 - 3], &c__3);
	dafada_(&rates[i__ - 1], &c__1);
    }

/*     The SCLK start times. */

    dafada_(start, nrec);

/*     The SCLK stop times. */

    dafada_(stop, nrec);

/*     The time tag directory.  The Ith element is defined to be the */
/*     average of the (I*100)th STOP time and the (I*100+1)th START time. */

    ndir = (*nrec - 1) / 100;
    index = 100;
    i__1 = ndir;
    for (i__ = 1; i__ <= i__1; ++i__) {
	dirent = (stop[index - 1] + start[index]) / 2.;
	dafada_(&dirent, &c__1);
	index += 100;
    }

/*     End the segment. */

    dafena_();
    chkout_("CKW02", (ftnlen)5);
    return 0;
} /* ckw02_ */


, 226, 230, 0.75);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #dee2e6;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(222, 226, 230, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23dee2e6' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23dee2e6' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: rgb(45.05, 45.05, 45.05);--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subt


| translate }}</button>

    <button mat-stroked-button
            color="primary"
            *ngIf="showNext"
            [disabled]="(isLoading$ | async)"
            (click)="nextStep()">{{ 'action.next-with-label' | translate:{label: (getFormLabel(this.selectedIndex+1) | translate)} }}</button>

  <mat-divider style="width: 100%"></mat-divider>

    <button mat-button
            [disabled]="(isLoading$ | async)"
            (click)="cancel()">{{ 'action.cancel' | translate }}</button>
    <button mat-raised-button
            [disabled]="(isLoading$ | async)"
            color="primary"
            (click)="add()">{{ 'action.add' | translate }}</button>

timewindow.style

    <mat-slide-toggle class="mat-slide" formControlName="showIcon">
      {{ 'timewindow.icon' | translate }}
    </mat-slide-toggle>

      <mat-form-field appearance="outline" subscriptSizing="dynamic">
        <input matInput formControlName="iconSize">
      </mat-form-field>
      <tb-material-icon-select asBoxInput
                               iconClearButton
                               formControlName="icon">
      </tb-material-icon-select>

timewindow.icon-position

    <mat-form-field class="flex-1" appearance="outline" subscriptSizing="dynamic">
      <mat-select formControlName="iconPosition" placeholder="{{ 'widget-config.set' | translate }}">
        <mat-option [value]="'left'">
          {{ 'timewindow.icon-position-left' | translate }}
        </mat-option>
        <mat-option [value]="'right'">
          {{ 'timewindow.icon-position-right' | translate }}
        </mat-option>
      </mat-select>
    </mat-form-field>

timewindow.font

    <tb-font-settings
      clearButton
      [previewText]="timewindowComponent.displayValue()"
      [initialPreviewStyle]="{fontSize: '14px',
                              color: 'rgba(0, 0, 0, 0.87)',
                              opacity: '0.85',
                              lineHeight: 'normal',
                              letterSpacing: 'normal'}"
      formControlName="font">
    </tb-font-settings>

timewindow.color

    <tb-color-input
      formControlName="color"
      colorClearButton
      asBoxInput>
    </tb-color-input>

    <mat-slide-toggle class="mat-slide" formControlName="displayTypePrefix">
      {{ 'timewindow.displayTypePrefix' | translat


quence(block).asIterable())
/*
 * Copyright 2018-2024 KMath contributors.
 * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
 */

@file:Suppress("DEPRECATION")

package space.kscience.kmath.commons.expressions

import org.apache.commons.math3.analysis.differentiation.DerivativeStructure
import space.kscience.attributes.SafeType
import space.kscience.kmath.UnstableKMathAPI
import space.kscience.kmath.expressions.*
import space.kscience.kmath.operations.DoubleField
import space.kscience.kmath.operations.ExtendedField
import space.kscience.kmath.operations.NumbersAddOps
import space.kscience.kmath.structures.Float64
import space.kscience.kmath.structures.MutableBufferFactory

/**
 * A field over commons-math [DerivativeStructure].
 *
 * @property order The derivation order.
 * @param bindings The map of bindings values. All bindings are considered free parameters
 */
@OptIn(UnstableKMathAPI::class)
@Deprecated("Use generic DSAlgebra from the core")
public class CmDsField(
    public val order: Int,
    bindings: Map<Symbol, Double>,
) : ExtendedField<DerivativeStructure>, ExpressionAlgebra<Double, DerivativeStructure>,
    NumbersAddOps<DerivativeStructure> {

    override val bufferFactory: MutableBufferFactory<DerivativeStructure> = MutableBufferFactory()

    public val numberOfVariables: Int = bindings.size

    override val zero: DerivativeStructure by lazy { DerivativeStructure(numberOfVariables, order) }
    override val one: DerivativeStructure by lazy { DerivativeStructure(numberOfVariables, order, 1.0) }

    override fun number(value: Number): DerivativeStructure = const(value.toDouble())

    /**
     * A class implementing both [DerivativeStructure] and [Symbol].
     */
    public inner class DerivativeStructureSymbol(
        size: Int,
        index: Int,
        symbol: Symbol,
        value: Double,
    ) : DerivativeStructure(size, order, index, value), Symbol {
        override val identity: String = symbol.identity
        override fun toString(): String = identity
        override fun equals(other: Any?): Boolean = this.identity == (other as? Symbol)?.identity
        override fun hashCode(): Int = identity.hashCode()
    }

    /**
     * Identity-based symbol bindings map
     */
    private val variables: Map<String, DerivativeStructureSymbol> = bindings.entries.mapIndexed { index, (key, value) ->
        key.identity to DerivativeStructureSymbol(numberOfVariables, index, key, value)
    }.toMap()

    override fun const(value: Double): DerivativeStructure = DerivativeStructure(numberOfVariables, order, value)

    override fun bindSymbolOrNull(value: String): DerivativeStructureSymbol? = variables[value]
    override fun bindSymbol(value: String): DerivativeStructureSymbol = variables.getValue(value)

    public fun bindSymbolOrNull(symbol: Symbol): DerivativeStructureSymbol? = variables[symbol.identity]
    public fun bindSymbol(symbol: Symbol): DerivativeStructureSymbol = variables.getValue(symbol.identity)

    public fun DerivativeStructure.derivative(symbols: List<Symbol>): Double {
        require(symbols.size <= order) { "The order of derivative ${symbols.size} exceeds computed order $order" }
        val ordersCount = symbols.map { it.identity }.groupBy { it }.mapValues { it.value.size }
        return getPartialDerivative


 = socket(AF_UNIX, SOCK_STREAM, PF_UNSPEC)))
			panic_m("socket");
		if (-1 == (flags = fcntl(connect_fd, F_GETFL)))
			panic_m("fcntl");
		if (0 != fcntl(connect_fd, F_SETFL, flags|O_NONBLOCK))
			panic_m("fcntl");
		memset(&sun, 0, sizeof sun);
		sun.sun_family = AF_UNIX;
		strncpy(sun.sun_path, tmp.name, sizeof sun.sun_path);
		(void)connect(connect_fd, (struct sockaddr *)&sun, sizeof sun);

		/* Minix segfaults when passing NULL */
		memset(&none, 0, sizeof none);
		if (-1 == (accept_fd = accept(listen_fd, (struct sockaddr *)&none, &(socklen_t){ sizeof none })))
			panic_m("accept");

		/*
		 * Minix requires that we connect asynchronously. All other systems
		 * completed the test with a synchrous connect followed by
		 * synchronous accept
		 */
		while (0 != connect(connect_fd, (struct sockaddr *)&sun, sizeof sun)) {
			if (errno == EALREADY || errno == EISCONN)
				break;
			if (errno != EINPROGRESS)
				panic_m("connect %s", tmp.name);
		}

		name[1] = getname(accept_fd, GETNAME_ACCEPTFD|GETNAME_SOCKNAME);
		name[2] = getname(accept_fd, GETNAME_ACCEPTFD|GETNAME_PEERNAME);
		name[3] = getname(connect_fd, GETNAME_CONNECTFD|GETNAME_SOCKNAME);
		name[4] = getname(connect_fd, GETNAME_CONNECTFD|GETNAME_PEERNAME);

		if (0 != socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair_fd))
			panic_m("socketpair");

		name[5] = getname(pair_fd[0], GETNAME_SOCKETPAIRFD|GETNAME_SOCKNAME);
		name[6] = getname(pair_fd[0], GETNAME_SOCKETPAIRFD|GETNAME_PEERNAME);

		for (i = 0; i < (int)(sizeof name / sizeof *name); i++)
			printname(name[i]);
		return 0;
	} /* main() */

---------------------------------------------------------------------------
## http.websocket

### `new_from_uri(uri, protocols)` <!-- --> {#http.websocket.new_from_uri}

Creates a new `http.websocket` object of type `"client"` from the given URI.

  - `protocols` (optional) should be a lua table containing a sequence of protocols to send to the server

### `new_from_stream(stream, headers)` <!-- --> {#http.websocket.new_from_stream}

Attempts to create a new `http.websocket` object of type `"server"` from the given request headers and stream.

  - [`stream`](#http.h1_stream) should be a live HTTP 1 stream of the `"server"` type.
  - [`headers`](#http.headers) should be headers of a suspected websocket upgrade request from an HTTP 1 client.

This function does **not** have side effects, and is hence okay to use tentatively.

### `websocket.close_timeout` <!-- --> {#http.websocket.close_timeout}

Amount of time (in seconds) to wait between sending a close frame and actually closing the connection.
Defaults to `3` seconds.

### `websocket:accept(options, timeout)` <!-- --> {#http.websocket:accept}

Completes negotiation with a websocket client.

  - `options` is a table containing:
	  - `headers` (optional) a [headers](#http.headers) object to use as a prototype for the response headers
	  - `protocols` (optional) should be a lua table containing a sequence of protocols to allow from the client

Usually called after a successful [`new_from_stream`](#http.websocket.new_from_stream)

### `websocket:connect(timeout)` <!-- --> {#http.websocket:connect}

Connect to a websocket ser


onRequestMinimize = onRequestMinimize,
        onRequestToggleMaximize = onRequestToggleMaximize,
        onWindowIconClicked = onWindowIconClicked,
        content = content,
    )
}

@Composable
private fun CustomWindowImpl(
    onCloseRequest: () -> Unit,
    windowController: WindowController,
    titleBarStyle: TitleBarStyle,
    onWindowIconClicked: (() -> Unit)?,
    onRequestMinimize: (() -> Unit)?,
    onRequestToggleMaximize: (() -> Unit)?,
    content: @Composable (() -> Unit),
) {
    val titleBar = TitleBar.getPlatformTitleBar()
    val start = windowController.start
    val end = windowController.end
    val title = windowController.title.orEmpty()
    val icon = windowController.icon
    val showTitleInTitleBar = windowController.showTitleInTitleBar
    val showWindowIcon = windowController.showWindowIconInTitleBar

    CompositionLocalProvider(
        LocalWindowController provides windowController,
    ) {
        Column(
            modifier =
                Modifier
                    .fillMaxSize()
                    .background(MaterialTheme.colorScheme.background),
        ) {
            titleBar.RenderTitleBar(
                modifier =
                    Modifier
                        .fillMaxWidth(),
                titleBar = titleBar,
                title = title,
                windowIcon = icon,
                showTitle = showTitleInTitleBar,
                showWindowIcon = showWindowIcon,
                style = titleBarStyle,
                start = start,
                end = end,
                onWindowIconClicked = onWindowIconClicked,
                onRequestClose = onCloseRequest,
                onRequestMinimize = onRequestMinimize,
                onRequestToggleMaximize = onRequestToggleMaximize,
            )
            content()
        }
    }
}

package io.github.composefluent.icons.filled

import androidx.compose.ui.graphics.vector.ImageVector
import io.github.composefluent.icons.Icons
import io.github.composefluent.icons.fluentIcon
import io.github.composefluent.icons.fluentPath

public val Icons.Filled.TextColumnOneWideLightning: ImageVector
    get() {
        if (_textColumnOneWideLightning != null) {
            return _textColumnOneWideLightning!!
        }
        _textColumnOneWideLightning = fluentIcon(name = "Filled.TextColumnOneWideLightning") {
            fluentPath {
                moveTo(4.0f, 5.0f)
                arcToRelative(1.0f, 1.0f, 0.0f, false, false, 0.0f, 2.0f)
                horizontalLineToRelative(16.0f)
                arcToRelative(1.0f, 1.0f, 0.0f, true, false, 0.0f, -2.0f)
                lineTo(4.0f, 5.0f)
                close()
                moveTo(4.0f, 9.0f)
                arcToRelative(1.0f, 1.0f, 0.0f, false, false, 0.0f, 2.0f)
                horizontalLineToRelative(16.0f)
                arcToRelative(1.0f, 1.0f, 0.0f, true, false, 0.0f, -2.0f)
                lineTo(4.0f, 9.0f)


"#", &daflun, (ftnlen)1);
	    errint_("#", &iostat, (ftnlen)1);
	    sigerr_("SPICE(FILEWRITEFAILED)", (ftnlen)22);
	    chkout_("DAFAC", (ftnlen)5);
	    return 0;
	}
	++recno;
	curpos = 1;
	s_copy(crecrd, " ", (ftnlen)1000, (ftnlen)1);
    }

/*     Add the end of comments mark to the final comment record and */
/*     write it to the file. */

    *(unsigned char *)&crecrd[curpos - 1] = *(unsigned char *)eocmrk;
    io___33.ciunit = daflun;
    io___33.cirec = recno;
    iostat = s_wdue(&io___33);
    if (iostat != 0) {
	goto L100005;
    }
    iostat = do_uio(&c__1, crecrd, (ftnlen)1000);
    if (iostat != 0) {
	goto L100005;
    }
    iostat = e_wdue();
L100005:
    if (iostat != 0) {
	setmsg_("Error writing to record # of the binary file named '#'. IOS"
		"TAT = #.", (ftnlen)67);
	errint_("#", &recno, (ftnlen)1);
	errfnm_("#", &daflun, (ftnlen)1);
	errint_("#", &iostat, (ftnlen)1);
	sigerr_("SPICE(FILEWRITEFAILED)", (ftnlen)22);
	chkout_("DAFAC", (ftnlen)5);
	return 0;
    }

/*     Check out and leave DAFAC. */

    chkout_("DAFAC", (ftnlen)5);
    return 0;
} /* dafac_ */


er',
      '3': 8,
      '4': 1,
      '5': 5,
      '9': 6,
      '10': 'burnAfter',
      '17': true
    },
    {
      '1': 'pre_message_id',
      '3': 9,
      '4': 1,
      '5': 3,
      '9': 7,
      '10': 'preMessageId',
      '17': true
    },
    {
      '1': 'custom_attributes',
      '3': 15,
      '4': 3,
      '5': 11,
      '6': '.im.turms.proto.Value',
      '10': 'customAttributes'
    },
  ],
  '8': [
    {'1': '_message_id'},
    {'1': '_is_system_message'},
    {'1': '_group_id'},
    {'1': '_recipient_id'},
    {'1': '_delivery_date'},
    {'1': '_text'},
    {'1': '_burn_after'},
    {'1': '_pre_message_id'},
  ],
};

/// Descriptor for `CreateMessageRequest`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List createMessageRequestDescriptor = $convert.base64Decode(
    'ChRDcmVhdGVNZXNzYWdlUmVxdWVzdBIiCgptZXNzYWdlX2lkGAEgASgDSABSCW1lc3NhZ2VJZI'
    'gBARIvChFpc19zeXN0ZW1fbWVzc2FnZRgCIAEoCEgBUg9pc1N5c3RlbU1lc3NhZ2WIAQESHgoI'
    'Z3JvdXBfaWQYAyABKANIAlIHZ3JvdXBJZIgBARImCgxyZWNpcGllbnRfaWQYBCABKANIA1ILcm'
    'VjaXBpZW50SWSIAQESKAoNZGVsaXZlcnlfZGF0ZRgFIAEoA0gEUgxkZWxpdmVyeURhdGWIAQES'
    'FwoEdGV4dBgGIAEoCUgFUgR0ZXh0iAEBEhgKB3JlY29yZHMYByADKAxSB3JlY29yZHMSIgoKYn'
    'Vybl9hZnRlchgIIAEoBUgGUglidXJuQWZ0ZXKIAQESKQoOcHJlX21lc3NhZ2VfaWQYCSABKANI'
    'B1IMcHJlTWVzc2FnZUlkiAEBEkIKEWN1c3RvbV9hdHRyaWJ1dGVzGA8gAygLMhUuaW0udHVybX'
    'MucHJvdG8uVmFsdWVSEGN1c3RvbUF0dHJpYnV0ZXNCDQoLX21lc3NhZ2VfaWRCFAoSX2lzX3N5'
    'c3RlbV9tZXNzYWdlQgsKCV9ncm91cF9pZEIPCg1fcmVjaXBpZW50X2lkQhAKDl9kZWxpdmVyeV'
    '9kYXRlQgcKBV90ZXh0Qg0KC19idXJuX2FmdGVyQhEKD19wcmVfbWVzc2FnZV9pZA==');
//
//  Generated code. Do not modify.
//  source: request/message/create_message_reactions_request.proto
//
// @dart = 2.12

// ignore_for_file: annotate_overrides, camel_case_types, comment_references
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import

import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;

@$core.Deprecated('Use createMessageReactionsRequestDescriptor instead')
const CreateMessageReactionsRequest$json = {
  '1': 'CreateMessageReactionsRequest',
  '2': [
    {'1': 'message_id', '3': 1, '4': 1, '5':


ckage views

import (
	"bufio"
	"fmt"

	"github.com/ngocphuongnb/tetua/app/asset"
	"github.com/ngocphuongnb/tetua/app/cache"
	"github.com/ngocphuongnb/tetua/app/config"
	"github.com/ngocphuongnb/tetua/app/entities"
	"github.com/ngocphuongnb/tetua/app/utils"
)

const (
	profile__19 = `
<svg viewBox="0 0 24 24"><path fill="currentColor" d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z"></path></svg>

`
	profile__20 = `<h1 style="text-align:center">`
	profile__21 = `

<svg viewBox="0 0 24 24"><path fill="currentColor" d="M12,15C12.81,15 13.5,14.7 14.11,14.11C14.7,13.5 15,12.81 15,12C15,11.19 14.7,10.5 14.11,9.89C13.5,9.3 12.81,9 12,9C11.19,9 10.5,9.3 9.89,9.89C9.3,10.5 9,11.19 9,12C9,12.81 9.3,13.5 9.89,14.11C10.5,14.7 11.19,15 12,15M12,2C14.75,2 17.1,3 19.05,4.95C21,6.9 22,9.25 22,12V13.45C22,14.45 21.65,15.3 21,16C20.3,16.67 19.5,17 18.5,17C17.3,17 16.31,16.5 15.56,15.5C14.56,16.5 13.38,17 12,17C10.63,17 9.45,16.5 8.46,15.54C7.5,14.55 7,13.38 7,12C7,10.63 7.5,9.45 8.46,8.46C9.45,7.5 10.63,7 12,7C13.38,7 14.55,7.5 15.54,8.46C16.5,9.45 17,10.63 17,12V13.45C17,13.86 17.16,14.22 17.46,14.53C17.76,14.84 18.11,15 18.5,15C18.92,15 19.27,14.84 19.57,14.53C19.87,14.22 20,13.86 20,13.45V12C20,9.81 19.23,7.93 17.65,6.35C16.07,4.77 14.19,4 12,4C9.81,4 7.93,4.77 6.35,6.35C4.77,7.93 4,9.81 4,12C4,14.19 4.77,16.07 6.35,17.65C7.93,19.23 9.81,20 12,20H17V22H12C9.25,22 6.9,21 4.95,19.05C3,17.1 2,14.75 2,12C2,9.25 3,6.9 4.95,4.95C6.9,3 9.25,2 12,2Z"></path></svg>`
	profile__22 = `<svg viewBox="0 0 24 24"><path fill="currentColor" d="M9,10H7V12H9V10M13,10H11V12H13V10M17,10H15V12H17V10M19,3H18V1H16V3H8V1H6V3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3M19,19H5V8H19V19Z"></path></svg>`
	profile__24 = `</div><div class="bio">`
	profile__25 = `</div></div><div class="layout"><div class="left"></div><main class="main">`
	profile__26 = `<h2 style="margin-top:0">Recent comments</h2><div class="comments">`
	profile__27 = `</div><h2>Recent posts</h2><div class="article-list">`
	profile__30 = `</ul></main></div></div><div class="mobile-menu"><div class="menu-head">`
	profile__69 = `<svg viewBox


">Changing the Similarity

Summary of the Ranking Methods

{@link org.apache.lucene.search.similarities.DefaultSimilarity} is the original Lucene
scoring function. It is based on a highly optimized
Vector Space Model. For more
information, see {@link org.apache.lucene.search.similarities.TFIDFSimilarity}.

{@link org.apache.lucene.search.similarities.BM25Similarity} is an optimized
implementation of the successful Okapi BM25 model.

{@link org.apache.lucene.search.similarities.SimilarityBase} provides a basic
implementation of the Similarity contract and exposes a highly simplified
interface, which makes it an ideal starting point for new ranking functions.
Lucene ships the following methods built on
{@link org.apache.lucene.search.similarities.SimilarityBase}:

Amati and Rijsbergen's {@linkplain org.apache.lucene.search.similarities.DFRSimilarity DFR} framework;

Clinchant and Gaussier's {@linkplain org.apache.lucene.search.similarities.IBSimilarity Information-based models}
    for IR;

The implementation of two {@linkplain org.apache.lucene.search.similarities.LMSimilarity language models} from
  Zhai and Lafferty's paper.

Since {@link org.apache.lucene.search.similarities.SimilarityBase} is not
optimized to the same extent as
{@link org.apache.lucene.search.similarities.DefaultSimilarity} and
{@link org.apache.lucene.search.similarities.BM25Similarity}, a difference in
performance is to be expected when using the methods listed above. However,
optimizations can always be implemented in subclasses; see
below.

Changing Similarity

Chances are the available Similarities are sufficient for all
    your searching needs.
    However, in some applications it may be necessary to customize your Similarity implementation. For instance, some
    applications do not need to
    distinguish between shorter and longer documents (see a "fair" similarity).

To change {@link org.apache.lucene.search.similarities.Similarity}, one must do so for both indexing and
    searching, and the changes must happen before
    either of these actions take place. Although in theory there is nothing stopping you from changing mid-stream, it
    just isn't well-defined what is going to happen.

To make this change, implement your own {@link org.apache.lucene.search.similarities.Similarity} (likely
    you'll want to simply subclass an existing method, be it
    {@link org.apache.lucene.search.similarities.DefaultSimilarity} or a descendant of
    {@link org.apache.lucene.search.similarities.SimilarityBase}), and
    then register the new class by calling
    {@link org.apache.lucene.index.IndexWriterConfig#setSimilarity(Similarity)}
    before indexing and
    {@link org.apache.lucene.search.IndexSearcher#setSimilarity(Similarity)}
    before searching.

Extending {@linkplain org.apache.lucene.search.similarities.SimilarityBase}

The easiest way to quickly implement a new ranking method is to extend
{@link org.apache.lucene.search.similarities.SimilarityBase}, wh


Bounce.fileManager.settingsDir, args[2])

        if (scriptFile.exists()) {
            try {
                chat("§9Loading config...")
                val settings = scriptFile.readText()
                chat("§9Set config...")
                SettingsUtils.executeScript(settings)
                chat("§6Config applied successfully.")
                MinusBounce.hud.addNotification(Notification("Config Loaded", Notification.Type.SUCCESS))
                playEdit()
            } catch (e: IOException) {
                e.printStackTrace()
            }
            return
        }

        chat("§cConfig file does not exist!")

    }

    private fun deleteConfig(args: Array<String>) {
        if (args.size <= 2) {
            chatSyntax("config delete <name>")
            return
        }

        val scriptFile = File(MinusBounce.fileManager.settingsDir, args[2])

        if (scriptFile.exists()) {
            scriptFile.delete()
            chat("§6Config file deleted successfully.")
            return
        }

        chat("§cConfig file does not exist!")
    }

    override fun tabComplete(args: Array<String>): List<String> {
        if (args.isEmpty()) return emptyList()

        return when (args.size) {
            1 -> listOf("delete", "list", "load", "save").filter { it.startsWith(args[0], true) }
            2 -> {
                when (args[0].lowercase()) {
                    "delete", "load" -> {
                        val settings = this.getLocalSettings() ?: return emptyList()

                        return settings
                            .map { it.name }
                            .filter { it.startsWith(args[1], true) }
                    }
                }
                return emptyList()
            }
            3 -> {
                if (args[0].equals("save", true)) {
                    return listOf("all", "states", "binds", "values").filter { it.startsWith(args[2], true) }
                }
                return emptyList()
            }
            else -> emptyList()
        }
    }

    private fun getLocalSettings(): Array<File>? = MinusBounce.fileManager.settingsDir.listFiles()
}
package net.minusmc.minusbounce.utils

import kotlin.math.abs

class Translate(var x: Float, var y: Float) {
    private var lastMS: Long

    init {
        lastMS = System.currentTimeMillis()
    }

    fun interpolate(targetX: Float, targetY: Float, xSpeed: Int, ySpeed: Int) {
        val currentMS = System.currentTimeMillis()
        val delta = currentMS - lastMS //16.66666
        lastMS = currentMS
        val deltaX = (abs((targetX - x).toDouble()) * 0.51f).toInt()
        val deltaY = (abs((targetY - y).toDouble()) * 0.51f).toInt()
        x = AnimationHelper.calculateCompensation(targetX, x, delta, deltaX)
        y = AnimationHelper.calculateCompensation(targetY, y, delta, deltaY)
    }

    fun interpolate(targetX: Float, targetY: Float, speed: Double) {
        val currentMS = System.currentTimeMillis()
        val delta = currentMS - lastMS //16.66666
        lastMS = currentMS
        var deltaX = 0.0
        var deltaY = 0.0
        if (speed != 0.0) {
            deltaX = abs((targetX - x).toDouble()) * 0.35f / (10 / speed)
            deltaY = abs((targetY - y).toDouble()) * 0.35f / (10 / speed)
        }
        x = AnimationHelper.calculateCompensation(targetX, x, delta, deltaX.toInt())
        y = AnimationHelper.calculateCompensation(targetY, y, delta, deltaY.toInt())
    }
}
/*
 * MinusBounce Hacked Client
 * A free open so


.whereType<TableInfo<Table, Object?>>();
  @override
  List<DatabaseSchemaEntity> get allSchemaEntities => [
    cloudAuthUsers,
    cedarTypes,
    cedarEntities,
    cloudAuthUsersCreateTrg,
    cedarRelationships,
    cloudAuthUsersDeleteTrg,
    cloudAuthUserEmails,
    cloudAuthUserPhoneNumbers,
    cloudAuthUsersView,
    cloudAuthProjects,
    cloudAuthApis,
    cloudAuthApisProjectIdx,
    cloudAuthApisCreateTrg,
    cloudAuthApisDeleteTrg,
    cloudAuthFunctions,
    cloudAuthFunctionsApiIdx,
    cloudAuthFunctionsCreateTrg,
    cloudAuthFunctionsDeleteTrg,
    cloudAuthMeta,
    OnCreateQuery(
      'INSERT INTO cloud_auth_meta (schema_version) VALUES (6) ON CONFLICT DO NOTHING',
    ),
    cloudAuthCryptoKeys,
    cloudAuthCryptoKeysExternalCryptoKeyIdIdx,
    cloudAuthSessions,
    cloudAuthSessionsUserIdx,
    cloudAuthSessionsCryptoKeyIdx,
    cloudAuthSessionsExternalSessionIdIdx,
    cloudAuthSessionsUpdateTimeTrg,
    cloudAuthOtpCodes,
    cloudAuthOtpCodesSessionIdIdx,
    cloudAuthCorks,
    cloudAuthCorksCryptoKeyIdx,
    cloudAuthCorksBearerIdx,
    cloudAuthCorksAudienceIdx,
    cloudAuthCorksIssuerIdx,
    cedarRelationshipsFkEntityIdx,
    cedarRelationshipsFkParentIdx,
    cedarPolicies,
    cedarPolicyTemplates,
    cedarPolicyTemplateLinks,
    cedarPolicyTemplateLinksFkTemplateIdIdx,
    cedarPolicyTemplateLinksFkPrincipalIdx,
    cedarPolicyTemplateLinksFkResourceIdx,
    cedarAuthorizationLogs,
  ];
  @override
  StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules([
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_users',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_users',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_apis',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_apis',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_functions',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_functions',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
    WritePropagation(
      on: TableUpdateQuery.onTableName(
        'cloud_auth_sessions',
        limitUpdateKind: UpdateKind.delete,
      ),
      result: [],
    ),
  ]);
  @override
  int get schemaVersion => 6;
}
// dart format width=80
// ignore_for_file: type=lint
import 'package:drift/drift.dart' as i0;
import 'package:celest_cloud_auth/src/database/schema/cloud_auth_users.drift.dart'
    as i1;
import 'package:celest_cloud_auth/src/database/schema/cedar.drift.dart' as i2;
import 'pac


0b3ius\x0c!b\x84\xdb\xc9\
r\xb2Gb\xf3\xa2\x89\x96\x8d\xe6\xb5\x02\x5c\xc3%\xe6\
\x88\x14O\xb4,Q\xcb}$\x191ogY#[\
a/\x999\x8d\x9c\xab:C&\xc8\xe7\x0c\x0e\xd6\xd9\
\xb6\xb4\xf1\x1e\xa2\xd7\xc9\xa5\xf8\x82]\x12\x0b[\x0dv\
ySM\xb7\xbc\x8a\xf5\x19\xb4[\xab\xa8\xad\xad\xa7)\
n\xe2\xda\xcdcT\x92D\xb7\xbb_\xb3\xca\x05\x9c\xde\
Z\xce\xd0\xd5\xbbX\xadl,4q\xa8\xb6\xbd>\x99\
\x15\x98}~\xd9fM\x22S\xabi\xbeU\xd5\xa3\xc3\
-\x94%nt\xdb\xf1\x13\xc4\x1b|mqb\xf79\
\xd4\xac\xa6\xb3\x9d\xbe5N\x0a\xa5\xa39r\xf7\xe6~\
O_M5]<\xec|\xbc\xaa\xcd'\xcbRj\xda\
k-\xb6\xb7]/\xdd\xd9~%8\xeft\x9b\xf8\x84\
\xcf\x05\xf3\x9b\xb4/-\xa2\x9b\x9d=\xae\xed\x03\x90\xcd\
\x05\xe4q\x99\xad\x9e\x07\x82H\xa5e\x831\xcc\xbb]\
C\x07\x8e\xaf\xe9\xd3\xd8y\x97+\x0e\x83is5\xcd\
\xb3\xdb}\x8ex\xf5K\xbb\x0b;}F<M,S\
I$l<\x92\xb2\x9b9\xae.~\xd1grm\xa5\
\x05\xe3B\x8fj\xeb\xc6:~\xa5\xae\x0dC\x5c\xd6\xf5\
Im-n\xad\xad%\xbdM*;\x99\xee\xec\xad\xe7\
f\xfbU\xecP]\xc2\x9a\x9bC$\xb3Is3\x15\
\x99\xc4-o\x11W\x92\xd8\xa6u\xcc\xfac\xa9K\xbb\
\xbdJ\x09l\xae\xaf\xfe\xd7q\xa5\xdcI\x1d\x86\xa1o\
z\xebu\xa6[Gg\x1d\xfd\xa9\xb4KuW6\xb2\
[\xcc\xcf,7\xd6\xd0\xdc-\xb3\xda\xf9\xd71\x1cL\
iT\x94y\x92\x8c\x9a\xd5\xbd6\xddi\xae\xab\xb7O\
\xbe%\x88\x95\xa2\xf9\xa4\xda\xea\xe5\xafN\xb7\xba}5\
\xb2\xebvG=\xb2\xc1kug6\x8byc\xa7\x89\
\xa2f\x06\xdb\xec6\x97\x97\x91\xb0\x95d\xb3+l\xb1\
\xcf\x14\xb7\xa9\xb2\xe6X \x81\x1eU\x0a%p\x8c]\
\x91\xc8\xeb\xe4C}g\x07\x9f,\xd15\xb3\xcdu\x1a\
Ap\xb7;\x1e\x1b\x7f\xb4J\xd0F\xfb\xe6\x22\x09S\
\xcc\x5c\x9e\x1b\xe5\x05\x85\xcf\x11\xf8\x87H\xb8\xb5\xb2\xb3\
\xb9\xf0\xeb\xdaj\xbaL\x9a\xd5\x8bkQ\xdf\xcdsp\
\xb6\xf2\xce\xb7\x16Z\x14\xf2\xdd\xde=\xd2Y\xe8\xac\xd2\
\x0d2\x07\xb4xl\xae\x1e{\xaf\xb6]=\xe3\x182\
\xaco4\xbda!\xb7\xd6o/\xad\xb1v\xb1\xc8\xda\
R]_]i\xba\x5c6\xd7\x13G.#\x92V\xbb\
\xdf,\xb2L\xdakyr\x0bv\x9e\xe2#(G\x8a\
K\x9e\x22\x9b\xd6\x15n\xda\xbe\x8d\xf9%\xe5\xbf\xde\xd1\
\x0f\x13+\xa4\xa7'\xa2O\xdev\xf2\xebk-.\xae\
\xf5\xfb\xc7\xdb_K\x0d\xcc\xa2\xe2)\xad\xfc\xc4\x8c\xac\
Il\xc2\x22\xb7\x8f\xba\xc9C\xed\x19C\x11F>[\
\xf9\x93\xaa\xb3\x1c\xed\xc5tRIo|-[K\xb7\
\xb8\xd5/\x05\xed\x8d\xbc\xb2\x9bk\x82\x96\xf1[\xc3y\
x\xbao\x9b\x0a\xb5\xb0\xbe\xbex\xc4\x8b\x1d\xcc\x82\xea\
Kk;\x85\xfb:E#\xca1\xde\xf6-6\xd3\xc2\
\xfa\x86\xa9\x0e\xb5s\xa6jm\x1d\xebj\xd7w\x82)\
\x8e\x8ao\x16\xd4\xc9\x1a\xb1\xb9\x93M\x96\x11owo\
i5\xe4B(\xe2\x92\xd1\x85\xabA\x00y\xb9C\xe2\
\xbd&\xea\xfe\xda\xca\xd0]O{\x1e\xab\xbe;H5\
3o\x13\xad\xbd\xbc\xa2W\x9em6D\x9c\xdd\xdb\x09\
Q\x0f\xd9R2\xd6\xf3\xc9\x12y70\x80\xf8\xe1\xf1\
2r\xb7=\xf5\xb3nO}4k\xbe\xd6V\xd7\xf3\
>\xb3(\xb5i\xc9Y5nio\xa5\xb4]\x12[\
\xf5\xd0\x87L\xf1~\xa5\xe2\x0dJ\xfa\xd2\x1f\x09x\x8f\
N\xf0\xf5\x84\xb7\x16\x1f\xf0\x92^[\x9b[{\xb7\x91\
\xd7\xca\xb7\xb33\xce\xe9\xb68\x92I\xa0i\xed\xe0\x96\
Vi<\x93,h\xac:\xf0t\x94\xb3\x94>\x9f\xae\
\xc8\xc2\xca\xec\xd9I\xb9\xdd\xaf\xaf\x95\xa6\x0a\xf6\xd61\
C\x0bMogn\xf1$\xad+\xdcgcK\x0c\xe3\
2\x84\xa9g\x7f\xae\xdb>\xb9\xabZ5\xd7\xd8\xe2\x9e\
{=^\xe55\x16\xb8\xd1\xe6\x92\xf0\xcdaa\xa7\xae\
\x9f\x91&\xaf-\x8f\xd9\xb5)b\x12}\xb6\xde\xc0\xda\
Gu$\x91]'\xda\x1f\xcf\xf5}k\xc5\xcb\xe2\xe8\
[M\xb2\xba\x93\xc0\xcf\x1e\x9b\xa5>\xb3w\xad\xcb-\
\xcc\x90\xdc9\xbe\x22\xefA\xd2\x16\xf2d\xd3\xb4\xbdN\
\x08'\xbd\x86\xd6\xc6{\xaf\xb1\xc6\x96P^\xde\xb5\xc4\
\xaa\xfd\x11\xa9NSmM\xdd)J\xceZY(\xec\
\xf6{\xa7{\xadV\x9d\x028\xba\xd6\xd6s]\x9bo\
M\x22\x96\xafM\xee\xff\x00\xc8\xf5\xabmZ\x1b]\x16\
%\xd4\xa0\xd4\xe7\x8axo4\xfb=R\xda\xd8\xa4\x9f\
\xdaq=\xb5\xc4\xd6gu\xb4\xf6\xf7WPY\xca\xf6\
\xc2\xd8\xdcYM\x0f\x9f\x0d\xc2\xceL\x06\x17\xa1e6\
\x8d5\xb5\xf0\xd6-\xf5\x18m\x04-e\x05\xae\xa9k\
\xe4\xc8.\xa5p\x91\x96\xb7\xdc\x09\x99\xb2%\x8c&\x1c\
J\xb1\x8f.B\x08i\xd7Skk\xd9 \xd4\xb4H\
\xc3\xc9\xa9Mxt\x8b\xfb\xa4\xb8\xb4}F\xf5\xae-\
\xe5\xb7\x9e\xe6\x18n\xa7\x93\xfb=\x9cIi5\xcd\xb5\
\xf4\xb7a\xa0\x86h\x5c\xb3\x97\x96+\xb6\x83Qm>\
\xf2\xea\xc5c\xd2\x84\xb7pY=\x82[\xea77\xda\
vm\xf5\x18\xec\x8e\xa4\xa8c\xbe\x0b-\xac\x90-\xc8\
\x8a\x1b\x99R\xe6\xecIq{h\xb9\xd6\x15\x94\xa4\xb9\
&\xd5\x9e\xb6{\xdb\x97\xf0\xd3\xa7N\xba#X\xe31\
\x11\x8aJ\xa4\xdd\x9d\xef\xcc\xf4J\xcd_]S\x7f\xd6\
\xba\xb6\xdfC\xf0M\xd5\x8a\xcdp\xb7z\x85\x94\x17\x0b\
\x1b\xde\xc5%\xa5\xdb\xba\xa4\xcf\x15\xbb\xdd[\xbb4\xd0\
\xdc\xdb]Z\xf9\x92\xb2\xeeuf\x8aA\x14I\xbdF\
\xec\x1a.\x8b\xa6\x0b\xd9\xa5\xd5\xe0\x82(\xe3\xb6\x16\xb2\
\xba\xa1\xba\xb8\xb4\xbb\x89n\xb4\xf9-\xc4\x0d%\xc6\xa1\
\xe7\xc0ZKu\xb0W\x95\xe4-2B\xe0\x98\xd3\x1b\
I\xb8\x92+X\xac\xee\xac4\xd9\xf5\x0b\xcb\xcb{\xab\
-*\xda\xce\x0b\x1b\x9b\x0b\x96\xb8\x87R\xb9\xbe\xd65\
g\x8e].\xee\xc2;=^[\x88\xf4\xcb!gy\
rt\xc5\x13\xdb=\xccmk{\x9f{-


i-compliance:
req.unicode-ansi:
req.idl:
req.max-support:
req.namespace:
req.assembly:
req.type-library:
req.lib:
req.dll:
req.irql:
targetos: Windows
req.typenames: FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6
f1_keywords:
 - FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6_
 - fwpsk/FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6_
 - FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6
 - fwpsk/FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6
topic_type:
 - APIRef
 - kbSyntax
api_type:
 - HeaderDef
api_location:
 - fwpsk.h
api_name:
 - FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6_
 - FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6
---

# FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6_ enumeration

## -description

The FWPS_FIELDS_ALE_FLOW_ESTABLISHED_V6 enumeration type specifies the data field identifiers for the
  FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6 and FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6_DISCARD
  run-time filtering layers.

## -enum-fields

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_ALE_APP_ID

The full path of the application.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_ALE_USER_ID

The identifier of the local user.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_ADDRESS

The local IP address.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_ADDRESS_TYPE

The local IP address type. The possible values are defined by the
     NL_ADDRESS_TYPE enumeration.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_LOCAL_PORT

The local transport protocol port number.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_PROTOCOL

The IP protocol number, as specified in RFC 1700.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_REMOTE_ADDRESS

The remote IP address.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_REMOTE_PORT

The remote transport protocol port number.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_ALE_REMOTE_USER_ID

The identification of the remote user.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_ALE_REMOTE_MACHINE_ID

The identification of the remote machine.

### -field FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_DESTINATION_ADDRESS_TYPE

The destination IP address type. The possible values are defined by


, 1)).clone();
                    let m13 = self.get_unchecked((0, 2)).clone();

                    let m21 = self.get_unchecked((1, 0)).clone();
                    let m22 = self.get_unchecked((1, 1)).clone();
                    let m23 = self.get_unchecked((1, 2)).clone();

                    let m31 = self.get_unchecked((2, 0)).clone();
                    let m32 = self.get_unchecked((2, 1)).clone();
                    let m33 = self.get_unchecked((2, 2)).clone();

                    let minor_m12_m23 = m22.clone() * m33.clone() - m32.clone() * m23.clone();
                    let minor_m11_m23 = m21.clone() * m33.clone() - m31.clone() * m23.clone();
                    let minor_m11_m22 = m21.clone() * m32.clone() - m31.clone() * m22.clone();

                    let determinant = m11.clone() * minor_m12_m23.clone()
                        - m12.clone() * minor_m11_m23.clone()
                        + m13.clone() * minor_m11_m22.clone();

                    if determinant.is_zero() {
                        false
                    } else {
                        *self.get_unchecked_mut((0, 0)) = minor_m12_m23 / determinant.clone();
                        *self.get_unchecked_mut((0, 1)) = (m13.clone() * m32.clone()
                            - m33.clone() * m12.clone())
                            / determinant.clone();
                        *self.get_unchecked_mut((0, 2)) = (m12.clone() * m23.clone()
                            - m22.clone() * m13.clone())
                            / determinant.clone();

                        *self.get_unchecked_mut((1, 0)) = -minor_m11_m23 / determinant.clone();
                        *self.get_unchecked_mut((1, 1)) =
                            (m11.clone() * m33 - m31.clone() * m13.clone()) / determinant.clone();
                        *self.get_unchecked_mut((1, 2)) =
                            (m13 * m21.clone() - m23 * m11.clone()) / determinant.clone();

                        *self.get_unchecked_mut((2, 0)) = minor_m11_m22 / determinant.clone();
                        *self.get_unchecked_mut((2, 1)) =
                            (m12.clone() * m31 - m32 * m11.clone()) / determinant.clone();
                        *self.get_unchecked_mut((2, 2)) = (m11 * m22 - m21 * m12) / determinant;

                        true
                    }
                }
                4 => {
                    let oself = self.clone_owned();
                    do_inverse4(&oself, self)
                }
                _ => {
                    let oself = self.clone_owned();
                    lu::try_invert_to(oself, self)
                }
            }
        }
    }
}

// NOTE: this is an extremely efficient, loop-unrolled matrix inverse from MESA (MIT licensed).
fn do_inverse4<T: C


# Exercício - sistema de perguntas e respostas

perguntas = [
    {
        'Pergunta': 'Quanto é 2+2?',
        'Opções': ['1', '3', '4', '5'],
        'Resposta': '4',
    },
    {
        'Pergunta': 'Quanto é 5*5?',
        'Opções': ['25', '55', '10', '51'],
        'Resposta': '25',
    },
    {
        'Pergunta': 'Quanto é 10/2?',
        'Opções': ['4', '5', '2', '1'],
        'Resposta': '5',
    },
]

# Contador de acertos
acertou = 0

# Aqui eu gerei cada uma das perguntas
for questao in perguntas:
    print('Pergunta:', questao['Pergunta'],'')
    print(f'Opções:')

 # Ainda dentro do primeiro for eu criei a lista de opções (para comparar com a resposta certa)
    options = list(questao.get('Opções'))

 # Peguei a resposta certa dentro do dicionario
    resposta_certa = questao.get('Resposta')

 # Abri outro for para exibir as opções
    for i, multipla in enumerate(questao['Opções']):
        print(f'{i}) {multipla}')

 # Usei o try para pegar o erro de inserir caracteres aleatórios como opção
    try:
        resposta_user = options[int(input(f'Escolha uma opção: '))]
    except ValueError:
        print(f'\nVocê errou! ❌\n\n')
        continue
    except IndexError:
        print(f'\nVocê errou! ❌\n\n')
        continue

 # Criando o padrão de retorno
    if resposta_user == resposta_certa:
        print(f'\nVocê acertou! ✅\n\n')
        acertou += 1
    elif resposta_user != resposta_certa:
        print(f'\nVocê errou! ❌\n\n')

if acertou == len(perguntas):
    print(f'Você acertou {acertou}\nde um total de {len(perguntas)} perguntas!\nPARABÉNS! 🎉')
elif acertou > 0 and acertou < len(perguntas):
    print(f'Você acertou {acertou}\nde um total de {len(perguntas)} perguntas!\nFoi quase 🙃')
else:
    print(f'Você acertou {acertou}\nde um total de {len(perguntas)} perguntas!\nVamos estudar? 😡')


order_by: Some(("name".to_owned(), ValueType::String)),
            order_direction: Some(EntityOrder::Descending),
            range: EntityRange::first(100),
        },
    );
}

#[test]
fn find_where_nested_and_or() {
    test_find(
        vec!["1", "2"],
        EntityQuery {
            subgraph_id: TEST_SUBGRAPH_ID.clone(),
            entity_types: vec!["user".to_owned()],
            filter: Some(EntityFilter::And(vec![EntityFilter::Or(vec![
                EntityFilter::Equal("id".to_owned(), Value::from("1")),
                EntityFilter::Equal("id".to_owned(), Value::from("2")),
            ])])),
            order_by: Some(("id".to_owned(), ValueType::String)),
            order_direction: Some(EntityOrder::Ascending),
            range: EntityRange::first(100),
        },
    )
}

fn make_entity_change(
    entity_type: &str,
    entity_id: &str,
    op: EntityChangeOperation,
) -> EntityChange {
    EntityChange {
        subgraph_id: TEST_SUBGRAPH_ID.clone(),
        entity_type: entity_type.to_owned(),
        entity_id: entity_id.to_owned(),
        operation: op,
    }
}

fn make_deployment_change(entity_id: &str, op: EntityChangeOperation) -> EntityChange {
    EntityChange {
        subgraph_id: SubgraphDeploymentId::new("subgraphs").unwrap(),
        entity_type: "SubgraphDeployment".to_owned(),
        entity_id: entity_id.to_owned(),
        operation: op,
    }
}

// Get as many events as expected contains from stream and check that they
// are equal to the expected events
fn check_events(
    stream: StoreEventStream<impl Stream<Item = StoreEvent, Error = ()> + Send>,
    expected: Vec<StoreEvent>,
) -> impl Future<Item = (), Error = graph::tokio_timer::timeout::Error<()>> {
    stream
        .take(expected.len() as u64)
        .collect()
        .timeout(Duration::from_secs(3))
        .and_then(move |events| {
            assert_eq!(events.len(), expected.len());
            assert_eq!(events, expected);
            Ok(())
        })
        .and_then(|_| Ok(()))
}

// Subscribe to store events from the store. This implementation works
// very hard to make sure that only events that were generated after the
// subscription started will actually be seen on the returned stream
fn subscribe_and_consume(
    store: Arc<DieselStore>,
    subgraph: &SubgraphDeploymentId,
    entity_type: &str,
) -> StoreEventStream<impl Stream<Item = StoreEvent, Error = ()> + Send> {
    static MARKER_ID: &str = "fake marker";

    let subscription = store.subscribe(vec![(subgraph.clone(), entity_type.to_owned())]);

    // Generate fake activity on the stream by removing a nonexistent entity and
    // skip anything on the stream before this faked event. That makes sure that
    // users of the stream do not see any events that were generated before the
    // subscription was started which can happen depending on how fast the event
    // processing thread is compared to the thread that runs this code.
    //
    // There is still a small possibility that earlier events get through since
    // the fake event is generated in its own transaction and Postgres is free to
    // reorder delivery of events across transactions, like those generated by
    // setup code in the tests.
    let key = EntityKey {
        subgraph_id: subgraph.clone(),
        entity_type: entity_type.to_owned(),
        entity_id: MARKER_ID.to_owned(),
    };
    let op = EntityOperation::R


--------------------------------------\\
        #region --Set-, Get- Methods--

        #endregion
        //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\
        #region --Misc Methods (Public)--

        #endregion

        #region --Misc Methods (Private)--

        #endregion

        #region --Misc Methods (Protected)--
        protected override XElement getContent(XNamespace ns)
        {
            XElement itemsNode = base.getContent(ns);
            XElement itemNode = new XElement(ns + "item");
            itemNode.Add(new XAttribute("id", DEVICE_ID));
            itemsNode.Add(itemNode);
            return itemsNode;
        }

        #endregion
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--

        #endregion
    }
}


using System.Runtime.InteropServices;

namespace ClrDebug.DbgEng
{
    /// <summary>
    /// An interface to a particular symbol.
    /// </summary>
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    [Guid("0F819103-87DE-4E96-8277-E05CD441FB22")]
    [ComImport]
    public interface IDebugHostSymbol
    {
        /// <summary>
        /// The GetContext method returns the context where the symbol is valid. While this will represent things such as the debug target and process/address space in which the symbol exists, it may not be as specific as a context retrieved from other means (e.g.: from an <see cref="IModelObject"/>).
        /// </summary>
        /// <param name="context">The host context in which the symbol is located will be returned here.</param>
        /// <returns>This method returns HRESULT that indicates success or failure.</returns>
        [PreserveSig]
        HRESULT GetContext(
            [Out, MarshalAs(UnmanagedType.Interface)] out IDebugHostContext context);

        /// <summary>
        /// The EnumerateChildren method returns an enumerator which will enumerate all children of a given symbol. For a C++ type, for example, the base classes, fields, member functions, and the like are all considered children of the type symbol.
        /// </summary>
        /// <param name="kind">Indicates what kinds of child symbols the caller wishes to enumerate. If the flat value Symbol is passed, all kinds of child symbols will be enumerated.</param>
        /// <param name="name">If specified, only child symbols with a name as given in this argument will be enumerated.</param>
        /// <param name="ppEnum">An enumerator which enumerates child symbols of the specified kind and name will be returned here.</param>
        /// <returns>This method returns HRESULT that indicates success or failure.</returns>
        [PreserveSig]
        HRESULT EnumerateChildren(
            [In] SymbolKind kind,
            [In, MarshalAs(UnmanagedType.LPWStr)] string name,
            [Out, MarshalAs(UnmanagedType.Interface)] out IDebugHostSymbolEnumerator ppEnum);

        /// <summary>
        /// Gets the kind of symbol that this is (e.g.: a field, a base class, a type, etc...).
        /// </summary>
        /// <param name="kind">The kind of symbol (e.g.: a type, field, base class, etc…) will be returned here. For more information, see <see cref="SymbolKind"/>.</param>
        /// <returns>This method


`cid` int(10) unsigned NOT NULL,
`score` tinyint(3) unsigned DEFAULT NULL,
PRIMARY KEY (`sid`,`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
**测试数据**
mysql> select * from student;
+-----------+--------------+
| sid | sname |
+-----------+--------------+
| 201910001 | 张三 |
| 201910002 | 李四 |
| 201910003 | 武松 |
| 201910004 | 潘金莲 |
| 201910005 | 菠菜 |
| 201910006 | 杨发财 |
| 201910007 | 欧阳修 |
| 201910008 | 郭靖 |
| 201910009 | 黄蓉 |
| 201910010 | 东方不败 |
+-----------+--------------+
10 rows in set (0.00 sec)
mysql> select * from score;;
+-----------+----------+-------+
| sid | cid | score |
+-----------+----------+-------+
| 201910001 | 20192001 | 50 |
| 201910001 | 20192002 | 88 |
| 201910001 | 20192003 | 54 |
| 201910001 | 20192004 | 43 |
| 201910001 | 20192005 | 89 |
| 201910002 | 20192001 | 79 |
| 201910002 | 20192002 | 97 |
| 201910002 | 20192003 | 82 |
| 201910002 | 20192004 | 85 |
| 201910002 | 20192005 | 80 |
| 201910003 | 20192001 | 48 |
| 201910003 | 20192002 | 98 |
| 201910003 | 20192003 | 47 |
| 201910003 | 20192004 | 41 |
| 201910003 | 20192005 | 34 |
| 201910004 | 20192001 | 81 |
| 201910004 | 20192002 | 69 |
| 201910004 | 20192003 | 67 |
| 201910004 | 20192004 | 99 |
| 201910004 | 20192005 | 61 |
| 201910005 | 20192001 | 40 |
| 201910005 | 20192002 | 52 |
| 201910005 | 20192003 | 39 |
| 201910005 | 20192004 | 74 |
| 201910005 | 20192005 | 86 |
| 201910006 | 20192001 | 42 |
| 201910006 | 20192002 | 52 |
| 201910006 | 20192003 | 36 |
| 201910006 | 20192004 | 58 |
| 201910006 | 20192005 | 84 |
| 201910007 | 20192001 | 79 |
| 201910007 | 20192002 | 43 |
| 201910007 | 20192003 | 79 |
| 201910007 | 20192004 | 98 |
| 201910007 | 20192005 | 88 |
| 201910008 | 20192001 | 45 |
| 201910008 | 20192002 | 65 |
| 201910008 | 20192003 | 90 |
| 201910008 | 20192004 | 89 |
| 201910008 | 20192005 | 74 |
| 201910009 | 20192001 | 73 |
| 201910009 | 20192002 | 42 |
| 201910009 | 20192003 | 95 |
| 201910009 | 20192004 | 46 |
| 201910009 | 20192005 | 45 |
| 201910010 | 20192001 | 58 |
| 201910010 | 20192002 | 52 |
| 201910010 | 20192003 | 55 |
| 201910010 | 20192004 | 87 |


22)12(24)14(32-5)33-36(28,29)34-35(26,27)30-4-6-9(21)11(23)13(31-6)17-2-1-7(19)16-15(17)25/h1-2,5-6,8-14,18,20-24H,3-4H2,(H,26,27)(H,28,29)(H,16,19,25)/t5-,6-,8-,9-,10+,11+,12-,13+,14+/m0/s1",
    "Carbohydrates",
    // "names":{"synonyms":[]}
  },

  {
    "InChI=1S/C12H22O11/c13-1-4-6(16)8(18)9(19)11(21-4)23-12(3-15)10(20)7(17)5(2-14)22-12/h4-11,13-20H,1-3H2/t4-,5-,6-,7-,8+,9-,10+,11-,12+/m1/s1",
    "Carbohydrates",
    // "names":{"synonyms":["Sucrose","Cane sugar","Saccharose","1-alpha-D-Glucopyranosyl-2-beta-D-fructofuranoside"]}
  },
  {
    "InChI=1S/C12H22O11/c13-1-4-6(16)8(18)9(19)11(21-4)23-12(3-15)10(20)7(17)5(2-14)22-12/h4-11,13-20H,1-3H2/t4-,5+,6+,7+,8+,9-,10-,11+,12-/m0/s1",
    "Carbohydrates",
    // "names":{"synonyms":[]}
  },
  {
    "InChI=1S/C12H22O11/c13-1-4-6(16)8(18)9(19)11(21-4)23-12(3-15)10(20)7(17)5(2-14)22-12/h4-11,13-20H,1-3H2/t4-,5+,6-,7-,8+,9-,10+,11-,12-/m1/s1",
    "Carbohydrates",
    // "names":{"synonyms":["Allosucrose","AC1L4W5N","AR-1L8547","ZINC05224791","|A-d-allopyranosyl |A-d-fructofuranoside","alpha-D-Allopyranosyl beta-D-fructofuranoside","alpha-D-Allopyranoside","beta-D-fructofuranosyl","(2R,3R,4R,5S,6R)-2-[(2S,3S,4S,5R)-3,4-dihydroxy-2,5-bis(hydroxymethyl)oxolan-2-yl]oxy-6-(hydroxymethyl)oxane-3,4,5-triol"]}
  },
  {
    "InChI=1S/C12H22O11/c13-1-4-6(16)8(18)9(19)11(21-4)23-12(3-15)10(20)7(17)5(2-14)22-12/h4-11,13-20H,1-3H2/t4-,5-,6-,7-,8+,9-,10+,11+,12+/m0/s1",
    "Carbohydrates",
    // "names":{"synonyms":[]}
  },
  {
    "InChI=1S/C12H22O11/c13-1-4-6(16)8(18)9(19)11(21-4)23-12(3-15)10(20)7(17)5(2-14)22-12/h4-11,13-20H,1-3H2",
    "Carbohydrates",
    // "names":{"synonyms":["Sugar","D-sucrose","beta-D-Fructofuranosyl-alpha-D-glucopyranoside"]}
  },
  {
    "InChI=1S/C12H22O11/c


eizi
 *     class  : com.example.flutter_dynamic_weather.base.BaseFragment
 *     e-mail : 1012126908@qq.com
 *     time   : 2020/10/15
 *     desc   :
 * </pre>
 */
abstract class BaseFragment : Fragment(), BaseCallback {

    private lateinit var mRootView: View

    override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View? {
        mRootView = inflater.inflate(getLayoutId(), container, false)
        return mRootView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initView()
        initData()
    }

    override fun initView() {
    }

    override fun initData() {
    }

    fun finish() {
        if (activity != null && !activity!!.isFinishing) {
            activity?.finish()
        }
    }

    open fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        return false
    }

    open fun onBackPressed(): Boolean {
        return false
    }

    open fun onNewIntent(intent: Intent?) {
    }

    // Fragment页面onResume函数重载
    override fun onResume() {
        super.onResume()
        MobclickAgent.onPageStart(this.javaClass.simpleName)
    }

    // Fragment页面onResume函数重载
    override fun onPause() {
        super.onPause()
        MobclickAgent.onPageEnd(this.javaClass.simpleName)
    }

    protected open fun showToast(message: String?) {
        if (!TextUtils.isEmpty(message)) {
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
        }
    }

}package com.example.flutter_dynamic_weather.map

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
import com.example.flutter_dynamic_weather.R

/**
 * <pre>
 *     author : xiaweizi
 *     class  : com.eiffelyk.weather.weizi.map.AmapLocationMarkerView
 *     e-mail : 1012126908@qq.com
 *     time   : 2020/11/08
 *     desc   :
 * </pre>
 */
class AmapLocationMarkerView : View {
    private var mOuterRadius = 0
    private var mInnerRadius = 0
    private var mPaint: Paint? = null
    private var mOuterColor = 0
    private var mInnerColor = 0

    constructor(context: Context?) : this(context, null)
    constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, -1)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
        context,
        attrs,
        defStyleAttr
    ) {
        initView(context!!)
    }

    private fun initView(context: Context) {
        mOuterRadius =
            resources.getDimensionPixelSize(R.dimen.amap_marker_view_located_outer_radius)
        mInnerRadius =
            resources.getDimensionPixelSize(R.dimen.amap_marker_view_located_inner_radius)
        mOuterColor = resources.getColor(R.color.amap_marker_view_located_outer_color)
        mInnerColor = resources.getColor(R.color.amap_marker_view_located_inner_color)
        mPaint = Paint(Paint.ANTI_ALIAS_FLAG)
        mPaint!!.style = Paint.Style.FILL
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        setMeasuredDimension(mOuterRadius * 2, mOuterRadius * 2)
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas


Autodesk.DesignScript.Geometry.Point startHandler, Autodesk.DesignScript.Geometry.Point endHandler,
        Autodesk.DesignScript.Geometry.Point end, int numPoints = 20)
    {
        // Generate a set of t values to use in the Bézier curve calculation
        var t = new double[numPoints];
        for (int i = 0; i < numPoints; i++)
        {
            t[i] = (double) i / (numPoints - 1);
        }

        // Calculate the x, y, and z coordinates of each point on the Bézier curve
        var xPoints = new double[numPoints];
        var yPoints = new double[numPoints];
        var zPoints = new double[numPoints];
        for (int i = 0; i < numPoints; i++)
        {
            double u = 1 - t[i];
            double tt = t[i] * t[i];
            double uu = u * u;
            double uuu = uu * u;
            double ttt = tt * t[i];

            xPoints[i] = uuu * start.X + 3 * uu * t[i] * startHandler.X + 3 * u * tt * endHandler.X + ttt * end.X;
            yPoints[i] = uuu * start.Y + 3 * uu * t[i] * startHandler.Y + 3 * u * tt * endHandler.Y + ttt * end.Y;
            zPoints[i] = uuu * start.Z + 3 * uu * t[i] * startHandler.Z + 3 * u * tt * endHandler.Z + ttt * end.Z;
        }

        // Create a list of Point3D objects to represent the points on the curve
        var points = new List<Autodesk.DesignScript.Geometry.Point>();
        for (int i = 0; i < numPoints; i++)
        {
            points.Add(Autodesk.DesignScript.Geometry.Point.ByCoordinates(xPoints[i], yPoints[i], zPoints[i]));
        }

        return points;
    }

    /// <summary>
    /// Converts a curve to a list of points based on the specified number of points.
    /// </summary>
    /// <param name="curve">The curve to convert to a list of points.</param>
    /// <param name="numPoints">The number of points to generate on the curve.</param>
    /// <returns>A list of Point3D objects representing the points on the curve.</returns>
    /// <example>
    /// ![](../OpenMEPPage/geometry/dyn/pic/Curve.ToPoints.png)
    /// [Curve.ToPoints.dyn](../OpenMEPPage/geometry/dyn/Curve.ToPoints.dyn)
    /// </example>
    public static List<Autodesk.DesignScript.Geometry.Point> ToPoints(Autodesk.DesignScript.Geometry.Curve curve,
        int numPoints)
    {
        var points = new List<Autodesk.DesignScript.Geometry.Point>();
        double tInterval = 1.0 / (numPoints - 1);

        for (int i = 0; i < numPoints; i++)
        {
            double t = tInterval * i;
            Autodesk.DesignScript.Geometry.Point pt = curve.PointAtParameter(t);
            points.Add(Autodesk.DesignScript.Geometry.Point.ByCoordinates(pt.X, pt.Y, pt.Z));
        }

        return points;
    }

    /// <summary>
    /// Gets start and end points and parameter values
    /// Use Open Source From lunchbox package : https://bitbucket.org/provingground-io/lunchbox-for-dynamo/src/master/
    /// </summary>
    /// <param name="curve">Curve</param>
    /// <returns name="StartPoint">Start point.</returns>
    /// <returns name="EndPoint">Start point.</returns>
    /// <returns name="StartParameter">Start parameter.</returns>
    /// <returns name="EndParameter">End parameter.</returns>
    /// <search>lunchbox,curve,points,start,end,parameter</search>
    [MultiReturn(new[] {"StartPoint", "EndPoint", "StartParameter", "EndParameter"})]
    public static Dictionary<string, object> EndP


  setSupportActionBar(toolbar)
        supportActionBar?.setDisplayHomeAsUpEnabled(homeAsUpEnabled)
    }

    /**
     * Network Change
     */
    @Subscribe(threadMode = ThreadMode.MAIN)
    fun onNetworkChangeEvent(event: NetworkChangeEvent) {
        hasNetwork = event.isConnected
        checkNetwork(event.isConnected)
    }

    private fun checkNetwork(isConnected: Boolean) {
        if (enableNetworkTip()) {
            if (isConnected) {
                doReConnected()
                if (mTipView != null && mTipView.parent != null) {
                    mWindowManager.removeView(mTipView)
                }
            } else {
                if (mTipView.parent == null) {
                    mWindowManager.addView(mTipView, mLayoutParams)
                }
            }
        }
    }

    override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
        if (ev?.action == MotionEvent.ACTION_UP) {
            val v = currentFocus
            // 如果不是落在EditText区域，则需要关闭输入法
            if (KeyBoardUtil.isHideKeyboard(v, ev)) {
                KeyBoardUtil.hideKeyBoard(this, v)
            }
        }
        return super.dispatchTouchEvent(ev)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                onBackPressed()
            }
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onBackPressed() {
        super.onBackPressed()
        // Fragment 逐个出栈
        val count = supportFragmentManager.backStackEntryCount
        if (count == 0) {
            super.onBackPressed()
        } else {
            supportFragmentManager.popBackStack()
        }
    }

    override fun onPause() {
        if (mNetworkChangeReceiver != null) {
            unregisterReceiver(mNetworkChangeReceiver)
            mNetworkChangeReceiver = null
        }
        super.onPause()
    }

    override fun onDestroy() {
        super.onDestroy()
        if (useEventBus()) {
            EventBus.getDefault().unregister(this)
        }
        CommonUtil.fixInputMethodManagerLeak(this)
        App.getRefWatcher(this)?.watch(this)
    }

    override fun finish() {
        super.finish()
        if (mTipView != null && mTipView.parent != null) {
            mWindowManager.removeView(mTipView)
        }
    }

}package com.cxz.wanandroid.utils

import android.app.ProgressDialog
import android.content.Context
import android.content.DialogInterface
import android.text.TextUtils
import androidx.appcompat.app.AlertDialog

/**
 * Created by chenxz on 2018/6/9.
 * 对话框辅助类,需要自己调用show方法
 */
object DialogUtil {

    /**
     * 获取一个Dialog
     *
     * @param context
     * @return
     */
    fun getDialog(context: Context): AlertDialog.Builder {
        return AlertDialog.Builder(context)
    }

    /**
     * 获取一个耗时的对话框 ProgressDialog
     *
     * @param context
     * @param message
     * @return
     */
    fun getWaitDialog(context: Context, message: String): ProgressDialog {
        val waitDialog = ProgressDialog(context)
        if (!TextUtils.isEmpty(message)) {
            waitDialog.setMessage(message)
        }
        return waitDialog
    }

    /**
     * 获取一个信息对话框,注意需要自己手动调用show方法
     *
     * @param context
     * @param message