format!("{:?}", result), format!("{:?}", expected));
    }

    #[test]
    fn test_include_block() {
        let input = "!% include ./some/path %!";
        let expected = directives::Include {
            path: "./some/path".to_string(),
            parser_config: PARSER_CONFIG.clone(),
        };

        let result = include_block(&PARSER_CONFIG)(input).unwrap().1;
        assert_eq!(format!("{:?}", result), format!("{:?}", expected));
    }

    #[test]
    fn test_tranform_block() {
        let input = indoc!(
            r#"
                !% transform input %!
                    luacode
                    luacode
                !% to %!
                    text
                    text
                !% end %!
            "#
        );

        let expected = directives::Transform {
            transform: "    luacode\n    luacode\n".to_string(),
            blocks: vec![Box::new("    text\n    text\n")],
            input_name: "input".to_string(),
        };

        let result = transform_block(&PARSER_CONFIG)(input).unwrap().1;
        assert_eq!(format!("{:?}", result), format!("{:?}", expected));
    }

    #[test]
    fn test_transform_line() {
        let input = "!% transform input %!";
        let expected = Ok(("", "input"));

        let result = transform_line(&PARSER_CONFIG)(input);
        assert_eq!(result, expected);
    }
}
<reponame>ray33ee/native-regex-lib

use std::collections::HashMap;
use regex_syntax::hir::*;
use regex_syntax::Parser;

#[derive(Debug)]
pub enum NoMatch {
    Stop,
    Break,
}

#[derive(Debug)]
pub enum Range {
    Single(u32),
    Multiple(u32, u32),
}

#[derive(Debug)]
pub enum AnchorLocation {
    Start,
    End
}

#[derive(Debug)]
pub enum AnchorType {
    Regular,
    Newline
}

#[derive(Debug)]
pub enum WordBoundaryType {
    Byte,
    Character
}

#[derive(Debug)]
pub enum Decision {
    CharacterSet(Vec<Range>), //Should be true if the character is NOT within the character set
    Literal(u32), //Determine if the character is a particular literal
    LiteralString(String),
    CountEquals(u32), //
    CountLessThan(u32),
    Anchor(AnchorType, AnchorLocation),
    WordBoundary(WordBoundaryType),
    Middle //Determine if we are NOT at the end of the text
}

#[derive(Debug)]
pub enum CaptureType {
    Beginning,
    End
}

#[derive(Debug, PartialEq)]
pub enum Modifier {
    Is, // A
    Not // !A
}

#[derive(Debug)]
pub enum Token {
    If(Modifier, Decision, NoMatch),
    While(Decision, Box<Token>), //Loop to check repetition
    StartCount, //Set the counter to zero. Used in repetition to check bounds
    IncrementCount, //Increment the counter every time a repetition matches
    Advance, //Advance to the next character
    Capture(u32, Vec<Token>), //TOken representing a capturing group
    Block(Vec<Token>),
    Empty,
}

#[derive(Debug)]
pub struct Ehir<'r> {
    pub _regex: & 'r str,
    pub _tokens: Vec<Token>, //List of tokens representing the EHIR
    pub _capture_names: HashMap<String, u32>, //A hashmap of all named capture groups and their corresponding indices
    pub _capture_count: u32, //Total number of capture groups, (including the entire match)
}

impl<'r> Ehir<'r> {

    fn bounds_check() -> Token {
        Token::If(Modifier::Not, Decision::Middle, NoMatch::Stop)
    }

    fn stop_break(is_inner_loop: bool) -> NoMatch {
        if is_inner_loop { NoMatch::B


94-7b95, U+7b97, U+7b9a, U+7b9d, U+7ba1, U+7bad, U+7bb1, U+7bb4,
    U+7bb8, U+7bc0-7bc1, U+7bc4, U+7bc6-7bc7, U+7bc9, U+7bd2, U+7be0, U+7be4,
    U+7be9, U+7c07, U+7c12, U+7c1e, U+7c21, U+7c27, U+7c2a-7c2b, U+7c3d-7c3f,
    U+7c43, U+7c4c-7c4d, U+7c60, U+7c64, U+7c6c, U+7c73, U+7c83, U+7c89, U+7c92,
    U+7c95, U+7c97-7c98, U+7c9f, U+7ca5, U+7ca7, U+7cae, U+7cb1-7cb3, U+7cb9,
    U+7cbe, U+7cca, U+7cd6, U+7cde-7ce0, U+7ce7, U+7cfb, U+7cfe, U+7d00, U+7d02,
    U+7d04-7d08, U+7d0a-7d0b, U+7d0d, U+7d10, U+7d14, U+7d17-7d1b, U+7d20-7d21,
    U+7d2b-7d2c, U+7d2e;
}
/* [76] */
@font-face {
  font-family: "Noto Serif KR";
  font-style: normal;
  font-weight: 400;
  src: url(https://fonts.gstatic.com/s/notoserifkr/v28/3JnoSDn90Gmq2mr3blnHaTZXbOtLJDvui3JOncjmeM5z4ZvTefxutxWKI13DA9agQzxl4iCfvB7KDWw.76.woff2)
    format("woff2");
  unicode-range:
    U+7704, U+7708-7709, U+770b, U+771e, U+7720, U+7729, U+7737-7738, U+773a,
    U+773c, U+7740, U+774d, U+775b, U+7761, U+7763, U+7766, U+776b, U+7779,
    U+777e-777f, U+778b, U+7791, U+779e, U+77a5, U+77ac-77ad, U+77b0, U+77b3,
    U+77bb-77bc, U+77bf, U+77d7, U+77db-77dc, U+77e2-77e3, U+77e9, U+77ed-77ef,
    U+7802, U+7812, U+7825-7827, U+782c, U+7832, U+7834, U+7845, U+784f, U+785d,
    U+786b-786c, U+786f, U+787c, U+7881, U+7887, U+788c-788e, U+7891, U+7897,
    U+78a3, U+78a7, U+78a9, U+78ba-78bc, U+78c1, U+78c5, U+78ca-78cb, U+78ce,
    U+78d0, U+78e8, U+78ec, U+78ef, U+78f5, U+78fb, U


osition(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
  case 84215298 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,5,6,2,10>(data_+ii*acsize, roots_+ii*rank_, weights_+ii*rank_, coeff_[ii],
                     basisinfo_[0]->position(), basisinfo_[1]->position(), basisinfo_[2]->position(), basisinfo_[3]->position(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
  case 84215299 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,5,6,3,11>(data_+ii*acsize, roots_+ii*rank_, weights_+ii*rank_, coeff_[ii],
                     basisinfo_[0]->position(), basisinfo_[1]->position(), basisinfo_[2]->position(), basisinfo_[3]->position(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
  case 84215300 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,5,6,4,11>(data_+ii*acsize, roots_+ii*rank_, weights_+ii*rank_, coeff_[ii],
                     basisinfo_[0]->position(), basisinfo_[1]->position(), basisinfo_[2]->position(), basisinfo_[3]->position(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
  case 84215301 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,5,6,5,12>(data_+ii*acsize, roots_+ii*rank_, weights_+ii*rank_, coeff_[ii],
                     basisinfo_[0]->position(), basisinfo_[1]->position(), basisinfo_[2]->position(), basisinfo_[3]->position(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
  case 84215302 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,5,6,6,12>(data_+ii*acsize, roots_+ii*rank_, weights_+ii*rank_, coeff_[ii],
                     basisinfo_[0]->position(), basisinfo_[1]->position(), basisinfo_[2]->position(), basisinfo_[3]->position(),
                     P_+ii*3, Q_+ii*3, xp_[ii], xq_[ii], size_block_, amapping_, cmapping_, asize_, workx, worky, workz, worktx, workty, worktz, worksx, worksy, worksz);
    } break;
#ifdef COMPILE_J_ORB
  case 84215552 :
    for (int j = 0; j != screening_size_; ++j) {
      int ii = screening_[j];
      bvrr_driver<5,


section_title a {
  color: inherit;
  font-weight: bold;
}

div.bz_section_title span {
  margin-left: 1em;
  font-size: var(--font-size-medium);
  font-style: italic;
}

#queryform,
#reportform {
  margin-bottom: 2em;
}

#knob {
  margin-top: 2em;
}

.hide_people_filter #people_filter_section,
.hide_history_filter #history_filter_section,
.hide_detailed_information #detailed_information_section {
  display: none;
}

.arrow {
  display: inline;
}

.bz_search_section,
ul.bz_search_section {
  margin-top: 1em;
}

.bz_simple_search_form th {
  text-align: right;
}

/* let the browser choose the select height from the "size" param */
.search_field_grid select {
  height: auto;
}

@media screen and (max-width: 1023px) {
  .search_field_row .field_label {
    min-width: 8em;
  }

  .search_field_row select,
  .search_field_row input[size="40"] {
    width: 180px;
  }
}

@media screen and (max-width: 799px) {
  .search_field_row {
    display: flex !important;
    flex-wrap: wrap;
    align-items: center;
    gap: 4px;
    margin: 16px 0 !important;
    padding: 0;
    white-space: normal;
  }

  .search_field_row .field_label {
    width: 100%;
    text-align: left;
  }

  .search_field_row select,
  .search_field_row input[size="40"] {
    display: block;
    width: 100%;
    height: fit-content;
  }

  div.bz_section_title span {
    display: block;
    margin: 4px 0 0;
  }

  .bz_simple_search_form.responsive tr {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    margin: 8px 0;
  }

  .bz_simple_search_form.responsive th {
    flex: none;
    width: auto;
    text-align: left;
  }

  .bz_simple_search_form.responsive input:not([type]),
  .bz_simple_search_form.responsive select {
    display: block;
    width: 100%;
  }
}
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This Source Code Form is "Incompatible With Secondary Licenses", as
 * defined by the Mozilla Public License, v. 2.0.
 */

hr {
  margin: 20px auto 40px;
}

.bz_private {
  color: var(--error-message-foreground-color);
}

/* bugfields is table of all fields and values */
.bugfields {
  border: 1px solid var(--primary-region-border-color);
  padding: 5px;
  width: 100%;
  background: var(--primary-region-background-color);
}

.bugfields tr {
  vertical-align: top;
}

.bugfields th {
  width: 10em;
  text-align: left;
  font-weight: normal;
  line-height: var(--line-height-comfortable);
}

.bugfields td {
  font-weight: bold;
  line-height: var(--line-height-comfortable);
}

.bugfields .rightcell {
  padding-left: 10px;
}

/* set line-height to normal for nested tables of bugfields table */
.bugfields table th,
.bugfields t


e Verzögerung könnte dazu führen, dass massenhaft Spieler den Dienst verlassen.

Als Hypixel einer massiven DDoS-Angriffskampagne ausgesetzt war, wandte sich das Unternehmen an Cloudflare, um seine Services mit Cloudflare um Magic Transit zu erweitern, Cloudfares BGP-basierten DDoS-Schutzservice für die Netzwerkinfrastruktur. Nach einem schnellen Onboarding über Nacht war Cloudflare automatisch in der Lage, DDoS-Angriffe auf ihr Netzwerk zu erkennen und abzuwehren — einige davon waren weit über 620 Gbit/s. Der DDoS-Angriff umfasste hauptsächlich TCP-Floods und UDP-Amplification-Angriffe. In der Grafik stellen die verschiedenen Farben die verschiedenen Cloudflare-Systeme dar, die zur Erkennung und Abwehr des Multi-Vektor-Angriffs beitragen – dies unterstreicht den Wert unseres mehrschichtigen DDoS-Ansatzes.

Selbst als sich die Angriffsmuster in Echtzeit änderten, schirmte Magic Transit das Netzwerk von Hypixel ab. Da der gesamte saubere Traffic über das hochperformante Netzwerk von Cloudflare mit niedriger Latenz geroutet wurde, bemerkten die Benutzer von Hypixel keine Veränderung des Spielerlebnisses — selbst während eines aktiven volumetrischen DDoS-Angriffs.

Während der Angriffskampagne erkannte und entschärfte Cloudflare automatisch über 5.000 DDoS-Angriffe: 53 % waren ACK-Floods, 39 % waren UDP-basierte Angriffe und 8 % SYN-Floods.

„Wir hatten mehrere Angriffe mit weit über 620 Gbit/s ohne jegliche Auswirkungen auf unsere Spieler. Ihr Spielerlebnis blieb unterbrechungsfrei und schnell, dank Cloudflare Magic Transit.“ - Simon Collins-Laflamme, CEO, Hypixel Inc.

Hypixel begann die Implementierung von Cloudflare-Produkten mit dem Einsatz von Cloudflare Spectrum zum Schutz ihrer Gaming-Infrastruktur vor DDoS-Angriffen. Mit dem Anwachsen der Nutzerbasis wurden weitere Cloudflare-Produkte eingeführt, um die Robustheit und Widerstandsfähigkeit der gesamten kritischen Infrastruktur zu stärken. Heute nutzt das Unternehmen mehrere Cloudflare-Produkte, darunter CDN, Rate Limiting, Spectrum, Argo Smart Routing, und Load Balancing, um eine sic


: SymbolKind.Constructor,
        name: 'A._privateName',
        start: Position(line: 5, character: 2),
        end: Position(line: 5, character: 24),
        detail: '(num p)',
      );

      _expect(
        outlines_A[6],
        kind: SymbolKind.Method,
        name: 'ma',
        start: Position(line: 6, character: 2),
        end: Position(line: 6, character: 35),
        detail: '(int pa)',
      );

      _expect(
        outlines_A[7],
        kind: SymbolKind.Method,
        name: '_mb',
        start: Position(line: 7, character: 2),
        end: Position(line: 7, character: 14),
        detail: '(int pb)',
      );

      _expect(
        outlines_A[8],
        kind: SymbolKind.Method,
        name: 'mc',
        start: Position(line: 8, character: 2),
        end: Position(line: 8, character: 20),
        detail: '(P p)',
      );

      _expect(
        outlines_A[9],
        kind: SymbolKind.Property,
        name: 'propA',
        start: Position(line: 9, character: 2),
        end: Position(line: 9, character: 27),
      );

      _expect(
        outlines_A[10],
        kind: SymbolKind.Property,
        name: 'propB',
        start: Position(line: 10, character: 2),
        end: Position(line: 10, character: 21),
        detail: '(int v)',
      );
      // // B
      var outline_B = unitOutline[1];
      _expect(
        outline_B,
        kind: SymbolKind.Class,
        name: 'B',
        start: Position(line: 12, character: 0),
        end: Position(line: 14, character: 1),
      );

      // B children
      var outlines_B = outline_B.children!;
      expect(outlines_B, hasLength(1));

      _expect(
        outlines_B[0],
        kind: SymbolKind.Constructor,
        name: 'B',
        start: Position(line: 13, character: 2),
        end: Position(line: 13, character: 11),
        detail: '(int p)',
      );

      _expect(
        unitOutline[2],
        kind: SymbolKind.Function,
        name: 'fa',
        start: Position(line: 15, character: 0),
        end: Position(line: 15, character: 26),
        detail: '(int pa)',
      );

      _expect(
        unitOutline[3],
        kind: SymbolKind.Function,
        name: 'fb',
        start: Position(line: 16, character: 0),
        end: Position(line: 16, character: 18),
        detail: '(P p)',
      );
    }
  }

  void test_isTest_isTestGroup() async {
    BlazeMockPackages.instance.addMeta(resourceProvider);

    var outline = await _compute('''
import 'package:meta/meta.dart';

@isTestGroup
void myGroup(name, body()) {}

@isTest
void myTest(name) {}

void f() {
  myGroup('group1', () {
    myGroup('group1_1', () {
      myTest('test1_1_1');
      myTest('test1_1_2');
    });
    myGroup('group1_2', () {
      myTest('test1_2_1');
    });
  });
  myGroup('group2', () {
    myTest('test2_1');
    myTest('test2_2');
  });
}
''');
    // outline
    expect(outline, hasLength(3));
    // f
    var f_outline = outline[2];
    _expect(
      f_outline,
      kind: SymbolKind.Function,
      name: 'f',
      start: Position(line: 8, character


": 0,
        "dual_fuel_discount_exc_vat": 0,
        "dual_fuel_discount_inc_vat": 0,
        "exit_fees_exc_vat": 0,
        "exit_fees_inc_vat": 0,
        "exit_fees_type": "NONE",
        "links": [
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/electricity-tariffs/E-2R-VAR-22-11-01-C/standing-charges/",
            "method": "GET",
            "rel": "standing_charges"
          },
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/electricity-tariffs/E-2R-VAR-22-11-01-C/day-unit-rates/",
            "method": "GET",
            "rel": "day_unit_rates"
          },
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/electricity-tariffs/E-2R-VAR-22-11-01-C/night-unit-rates/",
            "method": "GET",
            "rel": "night_unit_rates"
          }
        ],
        "day_unit_rate_exc_vat": 30.451,
        "day_unit_rate_inc_vat": 31.97355,
        "night_unit_rate_exc_vat": 12.866,
        "night_unit_rate_inc_vat": 13.5093
      }
    }
  },
  "single_register_gas_tariffs": {
    "_A": {
      "varying": {
        "code": "G-1R-VAR-22-11-01-A",
        "standing_charge_exc_vat": 27.57,
        "standing_charge_inc_vat": 28.9485,
        "online_discount_exc_vat": 0,
        "online_discount_inc_vat": 0,
        "dual_fuel_discount_exc_vat": 0,
        "dual_fuel_discount_inc_vat": 0,
        "exit_fees_exc_vat": 0,
        "exit_fees_inc_vat": 0,
        "exit_fees_type": "NONE",
        "links": [
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/gas-tariffs/G-1R-VAR-22-11-01-A/standing-charges/",
            "method": "GET",
            "rel": "standing_charges"
          },
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/gas-tariffs/G-1R-VAR-22-11-01-A/standard-unit-rates/",
            "method": "GET",
            "rel": "standard_unit_rates"
          }
        ],
        "standard_unit_rate_exc_vat": 5.679,
        "standard_unit_rate_inc_vat": 5.96295
      }
    },
    "_B": {
      "varying": {
        "code": "G-1R-VAR-22-11-01-B",
        "standing_charge_exc_vat": 27.66,
        "standing_charge_inc_vat": 29.043,
        "online_discount_exc_vat": 0,
        "online_discount_inc_vat": 0,
        "dual_fuel_discount_exc_vat": 0,
        "dual_fuel_discount_inc_vat": 0,
        "exit_fees_exc_vat": 0,
        "exit_fees_inc_vat": 0,
        "exit_fees_type": "NONE",
        "links": [
          {
            "href": "https://api.octopus.energy/v1/products/VAR-22-11-01/gas-tariffs/G-1R-VAR-22-11-01-B/standing-charges/",


  }[]
  favicon_url: string
  images: {
    caption?: string
    url: string
    height: number
    width: number
  }[]
  keywords: string[]
  language: string
  media: {
    duration: number
    height: number
    width: number
    type?: 'video'
    html: string
  }
  original_url: string
  provider_display: string
  provider_name: string
  provider_url: string
  published: boolean
  related: any[]
  safe: boolean
  title: string
  type: 'html'
  url: string
}

export default class Embed {
  apiKey: string

  constructor(apiKey: string) {
    this.apiKey = apiKey
  }

  async getContents(urls: string[]): Promise<EmbededContent[]> {
    const options = {
      card: 1,
      key: this.apiKey,
      native: true,
      scheme: 'https',
      urls: urls.join(',')
    }

    const createParams = (data: { [key: string]: any }): string => {
      const params = Object.keys(data).map(key => key + '=' + String(data[key]))
      return params.join('&')
    }

    const requestUrl = 'https://api-cdn.embed.ly/1/card-details?' + createParams(options)
    return await fetch(requestUrl).then(res => res.json())
  }
}
import { keys, isPlainObject } from './object'
import { isArray } from './array'

export const cloneDeep = <T>(obj: T, defaultValue: T = obj): T => {
  if (isArray(obj)) {
    return obj.reduce((result, val) => [...result, cloneDeep(val, val)], [])
  }
  if (isPlainObject(obj)) {
    return keys(obj).reduce<T>(
      (result, key) => ({ ...result, [key]: cloneDeep((obj as any)[key], (obj as any)[key]) }),
      {} as T
    )
  }
  return defaultValue
}

export default cloneDeep
import { test, fail } from 'zora';
import { CustomBlock, Blocks } from './CustomBlock';
import { Location } from 'org.bukkit';
import * as _ from 'lodash';
import * as yup from 'yup';

class TestBlock1 extends CustomBlock {
  counter = 0;

  check() {
    return true;
  }
}

class TestBlock2 extends TestBlock1 {
  check() {
    return false;
  }
}

class TestBlock3 extends TestBlock1 {
  schema = yup.object({
    counter: yup.number(),
  });
}

test('Blocks.get', (t) => {
  const b = server.worlds[0].getBlockAt(5, 50, 5);
  const data1 = Blocks.get(b, TestBlock1);
  t.ok(data1, `Blocks.get() should return data if check() returned true`);
  const data2 = Blocks.get(b, TestBlock2);
  t.notOk(
    data2,
    `Blocks.get() should return undefined if check() returned false`,
  );
  if (data1) {
    data1.counter = 1;
  }
  t.eq(
    data1?.counter,
    1,
    'Setting the value on a custom block should store the value in the object',
  );

  const data3 = Blocks.get(b, TestBlock1);
  t.eq(
    data3?.counter,
    1,
    'The values should be saved for subsequent Blocks.get calls',
  );

  t.ok(
    data3 instanceof TestBlock1,
    'The returned object should be instanceof the CustomBlock class',
  );
});

test('Blocks region handling', (t) => {
  const rand = () => Math.floo


// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.

// Ported from um/vsstyle.h in the Windows SDK for Windows 10.0.26100.0
// Original source is Copyright © Microsoft. All rights reserved.

namespace TerraFX.Interop.Windows;

public static partial class VSCLASS
{
    [NativeTypeName("#define VSCLASS_AEROWIZARDSTYLE L\"AEROWIZARDSTYLE\"")]
    public const string VSCLASS_AEROWIZARDSTYLE = "AEROWIZARDSTYLE";

    [NativeTypeName("#define VSCLASS_AEROWIZARD L\"AEROWIZARD\"")]
    public const string VSCLASS_AEROWIZARD = "AEROWIZARD";

    [NativeTypeName("#define VSCLASS_BUTTONSTYLE L\"BUTTONSTYLE\"")]
    public const string VSCLASS_BUTTONSTYLE = "BUTTONSTYLE";

    [NativeTypeName("#define VSCLASS_BUTTON L\"BUTTON\"")]
    public const string VSCLASS_BUTTON = "BUTTON";

    [NativeTypeName("#define VSCLASS_COMBOBOXSTYLE L\"COMBOBOXSTYLE\"")]
    public const string VSCLASS_COMBOBOXSTYLE = "COMBOBOXSTYLE";

    [NativeTypeName("#define VSCLASS_COMBOBOX L\"COMBOBOX\"")]
    public const string VSCLASS_COMBOBOX = "COMBOBOX";

    [NativeTypeName("#define VSCLASS_COMMUNICATIONSSTYLE L\"COMMUNICATIONSSTYLE\"")]
    public const string VSCLASS_COMMUNICATIONSSTYLE = "COMMUNICATIONSSTYLE";

    [NativeTypeName("#define VSCLASS_COMMUNICATIONS L\"COMMUNICATIONS\"")]
    public const string VSCLASS_COMMUNICATIONS = "COMMUNICATIONS";

    [NativeTypeName("#define VSCLASS_CONTROLPANELSTYLE L\"CONTROLPANELSTYLE\"")]
    public const string VSCLASS_CONTROLPANELSTYLE = "CONTROLPANELSTYLE";

    [NativeTypeName("#define VSCLASS_CONTROLPANEL L\"CONTROLPANEL\"")]
    public const string VSCLASS_CONTROLPANEL = "CONTROLPANEL";

    [NativeTypeName("#define VSCLASS_DATEPICKERSTYLE L\"DATEPICKERSTYLE\"")]
    public const string VSCLASS_DATEPICKERSTYLE = "DATEPICKERSTYLE";

    [NativeTypeName("#define VSCLASS_DATEPICKER L\"DATEPICKER\"")]
    public const string VSCLASS_DATEPICKER = "DATEPICKER";

    [NativeTypeName("#define VSCLASS_DRAGDROPSTYLE L\"DRAGDROPSTYLE\"")]
    public const string VSCLASS_DRAGDROPSTYLE = "DRAGDROPSTYLE";

    [NativeTypeName("#define VSCLASS_DRAGDROP L\"DRAGDROP\"")]
    public const string VSCLASS_DRAGDROP = "DRAGDROP";

    [NativeTypeName("#define VSCLASS_EDITSTYLE L\"EDITSTYLE\"")]
    public const string VSCLASS_EDITSTYLE = "EDITSTYLE";

    [NativeTypeName("#define VSCLASS_EDIT L\"EDIT\"")]
    public const string VSCLASS_EDIT = "EDIT";

    [NativeTypeName("#define VSCLASS_EXPLORERBARSTYLE L\"EXPLORERBARSTYLE\"")]
    public const string VSCLASS_EXPLORERBARSTYLE = "EXPLORERBARSTYLE";

    [NativeTypeName("#define VSCLASS_EXPLORERBAR L\"EXPLORERBAR\"")]
    public const string VSCLASS_EXPLORERBAR = "EXPLORERBAR";

    [NativeTypeName("#define VSCLASS_FLYOUTSTYLE L\"FLYOUTSTYLE\"")]
    public const string VSCLASS_FLYOUTSTYLE = "FLYOUTSTYLE";

    [NativeTypeName("#define VSCLASS_FLYOUT L\"FLYOUT\"")]
    public const string VSCLASS_FLYOUT = "FLYOUT";

    [NativeTypeName("#define VSCLASS_HEADERSTYLE L\"HEADERSTYLE\"")]
    public const string VSCLASS_HEADERSTYL


ipriani.com/2012/12/18/zsh-prompt-customization.html)

## K

### kafeitu

![kafeitu](https://user-images.githubusercontent.com/49100982/108254876-8e230b00-716c-11eb-9adb-50d695796563.jpg)

### kardan

![kardan](https://user-images.githubusercontent.com/49100982/108254877-8ebba180-716c-11eb-9fb5-9b0437433305.jpg)

### kennethreitz

![kennethreitz](https://user-images.githubusercontent.com/49100982/108254878-8f543800-716c-11eb-9373-a3e4e19b58ae.jpg)

### kolo

![kolo](https://user-images.githubusercontent.com/49100982/108254881-8f543800-716c-11eb-8115-2232727264d6.jpg)

### kphoen

![kphoen](https://user-images.githubusercontent.com/49100982/108254883-8fecce80-716c-11eb-9a4d-ad5c465af835.jpg)

# L

### lambda

![lambda](https://user-images.githubusercontent.com/49100982/108254885-8fecce80-716c-11eb-8012-aabac630c475.jpg)

### linuxonly

![linuxonly](https://user-images.githubusercontent.com/49100982/108254886-90856500-716c-11eb-81e8-8ba2b7ea922f.jpg)

(As the name states, this only works on Linux)

### lukerandall

![lukerandall](https://user-images.githubusercontent.com/49100982/108254887-911dfb80-716c-11eb-99a0-275b35afd9ce.jpg)

## M

### macovsky

![macovsky](https://user-images.githubusercontent.com/49100982/108254888-911dfb80-716c-11eb-9595-b08415fb1c17.jpg)

### maran

![maran](https://user-images.githubusercontent.com/49100982/108254890-91b69200-716c-11eb-8fa3-108c8692087c.jpg)

### mgutz

![mgutz](https://user-images.githubusercontent.com/49100982/108254893-91b69200-716c-11eb-9f6c-221967f1adc6.jpg)

### mh

![mh](https://user-images.githubusercontent.com/49100982/108254896-924f2880-716c-11eb-83fe-be8f732f46da.jpg)

### michelebologna

![michelebologna](https://user-images.githubusercontent.com/49100982/108254897-92e7bf00-716c-11eb-86b8-bf00a43d6a43.jpg)

### mikeh

![mikeh](https://github.com/ohmyzsh/wiki/assets/66907184/e76c66e3-0dcb-4f09-a9dd-f23591622cac)

### miloshadzic

![miloshadzic](https://user-images.githubusercontent.com/49100982/108254899-93805580-716c-11eb-84d6-822e33ad5ffb.jpg)

### minimal

![minimal](https://user-images.githubusercontent.com/49100982/108254900-93805580-716c-11eb-9e39-


h: 100% !important; } }

/*# sourceMappingURL=style.css.map */
.engine {
	position: absolute;
	text-indent: -2400px;
	text-align: center;
	padding: 0;
	top: 0;
	left: -2400px;
}/*!
 * Bootstrap v4.0.0 (https://getbootstrap.com)
 * Copyright 2011-2018 The Bootstrap Authors
 * Copyright 2011-2018 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:


/ </summary>
        public virtual long? LastModifierUserId { get; set; }
    }

    /// <summary>
    /// This class can be used to simplify implementing <see cref="IAudited{TUser}"/>.
    /// </summary>
    /// <typeparam name="TPrimaryKey">Type of the primary key of the entity</typeparam>
    /// <typeparam name="TUser">Type of the user</typeparam>
    [Serializable]
    public abstract class AuditedEntity<TPrimaryKey, TUser> : AuditedEntity<TPrimaryKey>, IAudited<TUser>
        where TUser : IEntity<long>
    {
        /// <summary>
        /// Reference to the creator user of this entity.
        /// </summary>
        [ForeignKey("CreatorUserId")]
        public virtual TUser CreatorUser { get; set; }

        /// <summary>
        /// Reference to the last modifier user of this entity.
        /// </summary>
        [ForeignKey("LastModifierUserId")]
        public virtual TUser LastModifierUser { get; set; }
    }
}


k)
		if !EqualApprox(&x, want, 1e-12) {
			t.Errorf("Solve answer mismatch. Want %v, got %v", want, x)
		}
	}

	// Random Cases.
	for i, test := range []struct {
		m, n  int
		rcond float64
	}{
		{m: 5, n: 5},
		{m: 5, n: 10},
		{m: 10, n: 5},
		{m: 5, n: 5},
		{m: 5, n: 10},
		{m: 10, n: 5},
		{m: 5, n: 5},
		{m: 5, n: 10},
		{m: 10, n: 5},
	} {
		m := test.m
		n := test.n
		a := NewDense(m, n, nil)
		for i := 0; i < m; i++ {
			for j := 0; j < n; j++ {
				a.Set(i, j, rnd.Float64())
			}
		}
		br := m
		b := NewVecDense(br, nil)
		for i := 0; i < br; i++ {
			b.SetVec(i, rnd.Float64())
		}

		var svd SVD
		ok := svd.Factorize(a, SVDFull)
		if !ok {
			t.Errorf("unexpected factorization failure for test %d", i)
			continue
		}

		var x VecDense
		rank := svd.Rank(test.rcond)
		if rank == 0 {
			continue
		}
		svd.SolveVecTo(&x, b, rank)

		// Test that the normal equations hold.
		// Aᵀ * A * x = Aᵀ * b
		var tmp, lhs, rhs Dense
		tmp.Mul(a.T(), a)
		lhs.Mul(&tmp, &x)
		rhs.Mul(a.T(), b)
		if !EqualApprox(&lhs, &rhs, 1e-10) {
			t.Errorf("Normal equations do not hold.\nLHS: %v\n, RHS: %v\n", lhs, rhs)
		}
	}
}
// Copyright ©2016 The gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package native

import (
	"math"

	"github.com/gonum/lapack"
)

// Dlanst computes the specified norm of a symmetric tridiagonal matrix A.
// The diagonal elements of A are stored in d and the off-diagonal elements
// are stored in e.
func (impl Implementation) Dlanst(norm lapack.MatrixNorm, n int, d, e []float64) float64 {
	if len(d) < n {
		panic(badD)
	}
	if len(e) < n-1 {
		panic(badE)
	}
	if n <= 0 {
		return 0
	}
	switch norm {
	default:
		panic(badNorm)
	case lapack.MaxAbs:
		anorm := math.Abs(d[n-1])
		for i := 0; i < n-1; i++ {
			sum := math.Abs(d[i])
			if anorm < sum || math.IsNaN(sum) {
				anorm = sum
			}
			sum = math.Abs(e[i])
			if anorm < sum || math.IsNaN(sum) {
				anorm = sum
			}
		}
		return anorm
	case lapack.MaxColumnSum, lapack.MaxRowSum:
		if n == 1 {
			return math.Abs(d[0])
		}
		anorm := math.Abs(d[0]) + math.Abs(e[0])
		sum := math.Abs(e[n-2]) + math


n, teidän Jumalanne, huoneeseenja huutakaa Herran puoleen.</verse>
				<verse number="15">Voi sitä päivää! Sillä lähellä on Herran päivä, ja se tulee niinkuinhävitys Kaikkivaltiaalta.</verse>
				<verse number="16">Eikö ole otettu meiltä ruoka silmäimme edestä sekä meidän Jumalammehuoneesta ilo ja riemu?</verse>
				<verse number="17">Surkastuneet ovat siemenjyvät multiensa alla, varastohuoneet autiot,aitat puretut, kun viljasta on kato.</verse>
				<verse number="18">Kuinka huokaa karja, kuinka hädissään ovat raavaslaumat, sillä eiole niillä laidunta! Myös lammaslaumat joutuvat perikatoon.</verse>
				<verse number="19">Sinua, Herra, minä huudan, sillä tuli on kuluttanut erämaan laitumetja liekki polttanut kaikki kedon puut.</verse>
				<verse number="20">Metsän eläimetkin sinua ikävöivät, sillä vesipurot ovat kuivuneet jatuli on kuluttanut erämaan laitumet.</verse>
			</chapter>
			<chapter number="2">
				<verse number="1">Puhaltakaa pasunaan Siionissa, toitottakaa torvia minun pyhällävuorellani. Jokainen maan asukas on vapiseva, sillä Herran päivä tulee.Niin, se on lähellä:</verse>
				<verse number="2">pimeyden ja synkeyden päivä, pilvien ja pilkkopimeän päivä.Vuorillelevinneenä niinkuin aamurusko on lukuisa ja väkevä kansa, jonkavertaista ei ole ollut ikiajoista asti eikä tämän jälkeen enää tule,tulevaisten polvien vuosiin saakka.</verse>
				<verse number="3">Sen edellä käy kuluttava tuli, sen jäljissä polttava liekki.Niinkuin Eedenin puutarha on maa sen edessä, sen jäljissä on autioerämaa, eikä jää ketään, joka olisi siltä pelastunut.</verse>
				<verse number="4">Ne ovat näöltänsä kuin hevoset, ja niinkuin ratsut ne juoksevat.</verse>
				<verse number="5">Ryskyen kuin sotavaunut ne hyppivät vuorten huipuilla, räiskyen kuintulen liekki, joka kuluttaa oljet; ne ovat kuin väkevä kansa,sotarintaan asettunut.</verse>
				<verse number="6">Niitten edessä kansat vapisevat, kaikki kasvot kalpenevat.</verse>
				<verse number="7">Ne juoksevat kuin sankarit, kuin soturit ne nousevat muurille.Jokainen kulkee tietänsä suoraan, ei mutkittele polullansa.</verse>
				<verse number="8">Toinen ei sysi toistansa: jokainen kulkee omaa suuntaansa.Heittoaseitten välitse ne syöksyvät pysähtymättä.</verse>
				<verse number="9">Kaupunkiin ne hyökkäävät, ryntäävät muurille, nousevat taloihin,tulevat ikkunoista sisään kuin varas.</verse>
				<verse number="10">Niitten edessä maa vapisee, ja taivaat järkkyvät; aurinko ja kuukäyvät mustiksi, ja tähdet kadottavat val


    item_id="nft_123",
    initial_price=500.0,
    counterparty_id="user_456",
    context={
        "urgency": "medium",
        "market_data": {"current_floor": 450.0}
    }
)

# Make offer
offer_result = await agent.make_offer(
    session_id=negotiation["session_id"],
    offer_amount=450.0,
    justification="Market alignment adjustment"
)
```

#### Deal Execution

```python
# Create and execute deal
deal = await agent.deal_manager.create_deal(
    negotiation_id=negotiation["session_id"],
    final_price=450.0,
    terms={
        "payment_method": "crypto",
        "delivery_time": "immediate"
    }
)

result = await agent.deal_manager.execute_deal(
    deal_id=deal["deal_id"]
)
```

### Error Handling

```python
class BargainingError(Exception):
    """Base exception for bargaining-related errors"""
    pass

class NegotiationError(BargainingError):
    """Exception for negotiation failures"""
    pass

class OfferError(BargainingError):
    """Exception for offer-related errors"""
    pass

class DealError(BargainingError):
    """Exception for deal-related errors"""
    pass

try:
    negotiation = await agent.start_negotiation(item_id, price, counterparty)
except NegotiationError as e:
    logger.error(f"Negotiation failed: {e}")
    # Handle negotiation failure
except OfferError as e:
    logger.error(f"Offer error: {e}")
    # Handle offer failure
except BargainingError as e:
    logger.error(f"Bargaining operation failed: {e}")
    # Handle other errors
```

### Best Practices

1. **Price Validation**
   ```python
   def validate_price(price: float, context: dict) -> bool:
       """Validate price against market conditions"""
       if price < context["market_floor"]:
           return False
       if price > context["market_ceiling"]:
           return False
       return True
   ```

2. **Negotiation Timeout**
   ```python
   async def negotiate_with_timeout(
       agent: BargainingAgent,
       timeout: int = 300
   ):
       """Handle negotiation with timeout"""
       async with timeout_scope(timeout):
           try:
               result = await agent.start_negotiation(...)
               return result
           except TimeoutError:
               await agent.cancel_negotiation(...)
               raise NegotiationTimeout("Negotiation timed out")
   ```

3. **Deal Safety**
   ```python
   async def safe_deal_execution(
       deal_manager: DealManager,
       deal_id: str
   ) -> dict:
       """Execute deal with safety checks"""
       # Verify deal status
       if not await deal_manager.verify_deal(deal_id):
           raise DealError("Invalid deal")

       # Check counterparty
       if not await deal_manager.verify_counterparty(deal_id):
           raise DealError("Counterparty verification failed")

       # Execute with retry
       return await retry_with_backoff(
           deal_manager.execute_deal,
           deal_id
       )
   ``` # Arweave CLI Tools

Command line tools for Arweave wallet management and balance checking.

## Quick Start

```bash
# Generate new wallet
python generate_wallet.py

# Check wallet balance
python check_balance.py --address YOUR_WALLET_ADDRESS
```

## Wallet Generation Tool

Gen


#pragma once

#include <torch/csrc/Export.h>
#include <torch/csrc/jit/ir/ir.h>

namespace torch {
namespace jit {

TORCH_API void TransformExits(std::shared_ptr<Graph>& graph);

} // namespace jit
} // namespace torch


ProjectConfiguration().awsLambdaHandlers())
      .containsOnly(
        new AwsLambdaHandlerInfo("aws_lambdas.h1_handler"),
        new AwsLambdaHandlerInfo("aws_lambdas.h2Handler")
      );
  }

  @ParameterizedTest
  @ValueSource(ints = {1, 2})
  void test_issues(int threads) {
    activeRules = new ActiveRulesBuilder()
      .addRule(new NewActiveRule.Builder()
        .setRuleKey(RuleKey.of(PythonRuleRepository.REPOSITORY_KEY, ONE_STATEMENT_PER_LINE_RULE_KEY))
        .build())
      .addRule(new NewActiveRule.Builder()
        .setRuleKey(RuleKey.of(PythonRuleRepository.REPOSITORY_KEY, "S134"))
        .build())
      .addRule(new NewActiveRule.Builder()
        .setRuleKey(RuleKey.of(PythonRuleRepository.REPOSITORY_KEY, FILE_COMPLEXITY_RULE_KEY))
        .setParam("maximumFileComplexityThreshold", "2")
        .build())
      .build();

    PythonInputFile inputFile = inputFile(FILE_2);
    context.settings().setProperty(PythonScanner.THREADS_PROPERTY_NAME, String.valueOf(threads));
    sensor().execute(context);

    assertThat(context.allIssues()).hasSize(3);
    Iterator<Issue> issuesIterator = context.allIssues().iterator();

    int checkedIssues = 0;

    while (issuesIterator.hasNext()) {
      Issue issue = issuesIterator.next();
      IssueLocation issueLocation = issue.primaryLocation();
      assertThat(issueLocation.inputComponent()).isEqualTo(inputFile.wrappedFile());

      switch (issue.ruleKey().rule()) {
        case "S134":
          assertThat(issueLocation.message()).isEqualTo("Refactor this code to not nest more than 4 \"if\", \"for\", \"while\", \"try\" and \"with\" statements.");
          assertThat(issueLocation.textRange()).isEqualTo(inputFile.wrappedFile().newRange(7, 16, 7, 18));
          assertThat(issue.flows()).hasSize(4);
          assertThat(issue.gap()).isNull();
          checkedIssues++;
          break;
        case ONE_STATEMENT_PER_LINE_RULE_KEY:
          assertThat(issueLocation.message()).isEqualTo("At most one statement is allowed per line, but 2 statements were found on this line.");
          assertThat(issueLocation.textRange()).isEqualTo(inputFile.wrappedFile().newRange(1, 0, 1, 50));
          assertThat(issue.flows()).isEmpty();
          assertThat(issue.gap()).isNull();
          checkedIssues++;
          break;
        case FILE_COMPLEXITY_RULE_KEY:
          assertThat(issueLocation.message()).isEqualTo("File has a complexity of 5 which is greater than 2 authorized.");
          assertThat(issueLocation.textRange()).isNull();
          assertThat(issue.flows()).isEmpty();
          assertThat(issue.gap()).isEqualTo(3.0);
          checkedIssues++;
          break;
        default:
          throw new IllegalStateException();
      }
    }

    assertThat(checkedIssues).isEqualTo(3);
    assertThat(logTester.logs(Level.INFO)).contains("Starting global symbols computation");
    assertThat(logTester.logs(Level.INFO)).contains("Starting rules execution");
    assertThat(logTester.logs(Level.INFO).stream().filter(line -> line.equals("1 source file to be analyzed")).count()).isEqualTo(2);
    if (threads == 1) {
      assertThat(logTester.logs(Level.DEBUG)).doesNotContain("Scanning files in");
    } else {
      assertThat(logTester.logs(Level.DEBUG)).contains("Scanning files in " + threads + " threads");
    }
    assertThat(PythonScanner.getWorkingDirectory(cont


 0.7;

  .visible-btn {
    pointer-events: auto;
    opacity: 1;
  }
}
/*!
 * This file is part of StyleBI.
 * Copyright (C) 2024  InetSoft Technology
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
:host {
  .normal-align {
    align-items: normal;
  }

  .self-start {
    align-self: flex-start;
  }

  .justify-end {
    justify-content: flex-end;
  }

  .mat-mdc-card-title {
    display: flex;

    .mat-mdc-card-subtitle {
      margin-bottom: 0;
    }

    span {
      display: flex;
      align-items: center;
    }
  }

  .filter-container > * {
    flex-basis: 0;
  }

  .filter-container {
    padding: 6px;
  }

  .table-container {
    min-height: 0;
    flex-grow: 1;
  }
}

.cycle-name-sort-icon {
  position: sticky;
  float: right;
  top: 0;
  padding-top: 10px;
  padding-right: 10px;
  z-index: 50;
}/*!
 * This file is part of StyleBI.
 * Copyright (C) 2024  InetSoft Technology
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
:host {
  $repositoryTreeWidth: 40%;
  $repositoryEditorWidth: 100% - $repositoryTreeWidth;

  .repository-pane {
    width: 100%;
    height: 100%;
    display: flex;
  }

  .mat-drawer, .mat-drawer-content {
    width: 100%;

    &.repository-tree {
      width: $repositoryTreeWidth;
      max-width: 400px;
    }

    &.repository-editor {
      width: $repositoryEditorWidth;
      flex: 1;
    }
  }
}/*!
 * This file is part of StyleBI.
 * Copyright (C) 2024  InetSoft Technology
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
@import '../../../../../../../../node_modules/@angular/material/theming';
@import '../../../../../styles/constants';

@mixin repository-tree-view-typography($config


ON
				bsr			SHOWM
				movem.l		(sp)+,d0-a6
				rts

*-------------------------------------------------------------------------------

Calc_FIRST_LINE:move.w		d0,-(sp)
				moveq		#5,d0
				add.w		SHOW_ANZAHL,d0
				cmp.w		ZEILEN_SCREEN,d0
				blo.s		.ende
				move.w		ZEILEN_SCREEN,d0
				subq.w		#1,d0
.ende:			move.w		d0,FIRST_LINE
				move.w		(sp)+,d0
				rts

*-------------------------------------------------------------------------------

CHECK_POSITION: cmpi.w		#SCREEN,DEVICE			; Screendevice?
				beq.s		.cont
				rts
.cont:			cmp.w		ZEILEN_SCREEN,d3		; Zeilenposition testen
				blt.s		.zeile_io
				subq.w		#1,SAVE_Y_POSITION
				bsr			SCROLL_DOWN
				move.w		ZEILEN_SCREEN,d3
				subq.w		#1,d3
.zeile_io:		move.w		d3,Y_POSITION
				bsr			POSITIONIEREN
				cmp.w		FIRST_LINE,d3
				bge.s		.ende
				move.w		FIRST_LINE,d3
.ende:			rts

*-------------------------------------------------------------------------------
* PRINT_STRING_C: Printet einen nullterminierten String.
* ---> A3.l = Zeiger auf den zu printenden String
* (---> D3.w) = Zeile auf die geprintet werden soll, keine berprfung.
*				Wird natrlich nur auf dem Screendevice ausgewertet (0...).
* (<--- tst.b flag.ne = im Fehlerfall, allerdings nicht beim Screendevice)
*
* PRINT_STRING_P: Printet einen String mit Lngenbyte.
* ---> A3.l = Zeiger auf den zu printenden String
* (---> D3.w) = Zeile auf die geprintet werden soll, keine berprfung.
*				Wird natrlich nur auf dem Screendevice ausgewertet (0...).
* (<--- tst.b flag.ne = im Fehlerfall, allerdings nicht beim Screendevice)
*-------------------------------------------------------------------------------

PRINT_STRING_C:	movem.l		d0-a6,-(sp)
				move.w		DEVICE,d0
				add.w		d0,d0
				move.w		.DEVICES_C(pc,d0.w),d0
				jsr			.DEVICES_C(pc,d0.w)
				movem.l		(sp)+,d0-a6
				rts

*---------------

				dc.w		DEVICE_FILE_2_C-.DEVICES_C
				dc.w		DEVICE_FILE_1_C-.DEVICES_C
.DEVICES_C:		dc.w		DEVICE_PRINTER_C-.DEVICES_C
				dc.w		DEVICE_RS232_C-.DEVICES_C
				dc.w		DEVICE_SCREEN_C-.DEVICES_C
				dc.w		DEVICE_MIDI_C-.DEVICES_C

*


rseColor(toHexColor(Color.RED)))
    }

}/*
 * Twittnuker - Twitter client for Android
 *
 * Copyright (C) 2013-2017 vanita5 <mail@vanit.as>
 *
 * This program incorporates a modified version of Twidere.
 * Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.vanita5.twittnuker.util

import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class DataStoreUtilsTest {
    @Test
    fun testCleanDatabasesByItemLimit() {
        val context = InstrumentationRegistry.getTargetContext()
        DataStoreUtils.cleanDatabasesByItemLimit(context)
    }

    @Test
    fun testGetAccountKeys() {
        val context = InstrumentationRegistry.getTargetContext()
        DataStoreUtils.getAccountKeys(context)
    }
}/*
 * Twittnuker - Twitter client for Android
 *
 * Copyright (C) 2013-2017 vanita5 <mail@vanit.as>
 *
 * This program incorporates a modified version of Twidere.
 * Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.vanita5.twittnuker.task

import org.junit.Assert.assertEquals
import org.junit.Test

class SaveFileTaskTest {

    @Test
    @Throws(Exception::class)
    fun testGetFileNameWithExtension() {
        assertEquals("pbs_twimg_com_media_abcdefghijklmn.jpg",
                SaveFileTask.getFileNameWithExtension("pbs_twimg_com_media_abcdefghijklmn_jpg",
                        "jpg", '_', null))
        assertEquals("pbs_twimg_com_media_abcdefghijklmn_jpg",
                SaveFileTask.getFileNameWithExtension("pbs_twimg_com_media_abcdefghijklmn_jpg",
                        null, '_', null))
        assertEquals("pbs_twimg_com_media_abcdefghijklmn_jpgsuffix",
                SaveFileTask.getFileNameWithExtension("pbs_twimg_com_media_abcdefghijklmn_jpg",
                        null, '_', "suffix"))
    }
}/*
 * Twittnuker - Twitter client for Android
 *
 * Copyright (C) 2013-2017 vanita5 <mail@vanit.as>
 *
 * This program incorporates a modified version of Twidere.
 * Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
 *
 * This program is free


学术论文的摘要，包括研究背景、目的、方法、结果和意义等要素。|
|旅游规划咨询|请为某个国家或地区的旅游规划制定详细方案，包括交通路线、住宿安排、景点推荐等。|
|职业发展建议|请结合自己的职业经历、能力和兴趣，提出未来三至五年的职业发展目标和建议，并说明实现的可能性和困难。|
|社会问题探讨|请就某一社会问题（如教育公平、环境污染等）进行探讨，分析其原因和影响，并提出解决方案和期望效果。|
| 餐厅推荐 | 您能否为我推荐附近的三家口味独特的餐厅？ |
| 产品比较 | 请比较这两款面霜，哪一款更适合干性皮肤？ |
| 健身建议 | 我最近开始健身，你有什么建议或技巧可以分享吗？ |
| 科技趋势 | 您认为未来十年内最值得关注的科技趋势是什么？ |
| 投资建议 | 如果我有500万人民币可用于投资，您会建议我将资金分散投资在哪些领域？ |
| 旅行攻略 | 下个月我将前往日本东京旅游，您有什么值得推荐的景点和美食吗？ |
| 知识技能 | 学习哪些编程语言可以提高我的职业竞争力？ |
| 科学问题 | 为什么相同质量的物体，在水中会比在空气中浮力大？ |
| 文化交流 | 您如何看待跨文化交流对于促进国际间理解与合作的重要性？ |
| 工作困境 | 我最近在工作中遇到了难以解决的问题，您有什么建议或经验可以分享吗？ |
|旅游|推荐一下去中国旅游的最佳时间和地点。|
|历史|介绍一下古代中国的四大发明。|
|科技|谈谈你对人工智能未来发展的看法。|
|文化|解释一下中国传统文化中"福"字的寓意。|
|娱乐|你觉得现在最受欢迎的电子竞技游戏是哪个？为什么？|
|教育|探讨一下线上教育与传统教育的优缺点。|
|经济|分析一下进口原材料价格上涨对中国制造业的影�


ase-in-out;animation:30s linear 0s infinite normal none running running-line___Fw07U;stroke:#02f657;stop-opacity:1}.butterfly-lineage-dag___FuK_A .butterflies-arrow___vuf8I.hover-chain___TAKCn{transition:all .5s ease-in-out;animation:30s linear 0s infinite normal none running running-line___Fw07U;fill:#28da8f;stroke:#28da8f}.butterfly-lineage-dag___FuK_A .table-node___dWEwA .field___HzHiM.hover-chain___TAKCn .point___GonVh{background:#0095ff;transition:all .5s ease-in-out}.butterfly-lineage-dag___FuK_A .table-node___dWEwA .field___HzHiM{position:relative;align-items:center;height:26px!important;margin:0 6px;padding:4px 4px 4px 6px;white-space:nowrap}.butterfly-lineage-dag___FuK_A .table-node___dWEwA .field___HzHiM.hover-chain___TAKCn{color:#fff;transition:all .5s ease-in-out}.butterfly-lineage-dag___FuK_A .table-node___dWEwA .title-con___HQ5s6 .operator___kuN3r{position:absolute;top:2px;right:5px;display:flex;align-items:baseline;justify-content:space-between;height:100%;max-height:4vh;margin:0 20px}.butterfly-lineage-dag___FuK_A .table-node___dWEwA .title-con___HQ5s6 .operator___kuN3r .operator-item___pnP5j{margin-left:15px}.butterflies-link___TO0RZ{transition:all .5s ease-in-out;fill:none;stroke:#04671f;stroke-width:1.5px;stroke-dasharray:5,8;stroke-dashoffset:-2px;stroke-linecap:round;stroke-linejoin:round}.butterflies-link___TO0RZ:hover{right:0}.butterflies-arrow___vuf8I{padding-right:10px!important;transition:all .5s ease-in-out;fill:#04671f;stroke:#04671f;stroke-width:4px}.butterflies-arrow___vuf8I:hover{right:0;background:#0366d6}.card-list-item-wrapper___P3fAP{display:flex}.card-list-item___irJNZ{width:100%;margin:0}.card-list-item___irJNZ{transition:.3s}.card-button-list___aYosi{display:none}.card-list-item___irJNZ:hover .card-button-list___aYosi{display:block}.card-list-item___irJNZ:hover{box-shadow:0 4px 8px #0000001a}span .mtkb___r92CZ{font-weight:inherit}.split-pane___Yo6xH{position:relative;display:flex;flex-direction:column;width:100%;overflow:hidden}.Resizer___vooSn{z-index:1;box-sizing:border-box;background:#000;background-clip:padding-box;opacity:.2}.Resizer___vooSn:hover{transition:all 2s ease}.Resizer___vooSn.horizontal___T7X3W{height:11px;margin:-5px 0;border-top:5px solid rgba(255,255,255,0);border-bottom:5px solid rgba(255,255,255,0);cursor:row-resize}.Resizer___vooSn.horizontal___T7X3W:hover,.Resizer___vooSn.horizontal___T7X3W.resizing___PukY4{border-top:5px solid rgba(0,0,0,.5);border-bottom:5px solid rgba(0,0,0,.5)}.Resizer___


ree
	 *
	 * @spec DmtAdmin.getSession(String)
	 */
	private void testGetSession003() {
		DmtSession session = null;
		try {
			DefaultTestBundleControl.log("#testGetSession003");
			session = tbc.getDmtAdmin().getSession(null);
			TestCase.assertEquals("Asserting subtree", ".", session.getRootUri());
			TestCase.assertEquals("Asserting lock type",
					DmtSession.LOCK_TYPE_EXCLUSIVE, session.getLockType());
			TestCase.assertNull("Asserting principal", session.getPrincipal());
            TestCase.assertTrue("asserts that null on the parameter subtree gives access to the whole subtree",
                session.isNodeUri(TestExecPluginActivator.INTERIOR_NODE));
		} catch (Exception e) {
			tbc.failUnexpectedException(e);

		} finally {
			tbc.closeSession(session);
		}
	}

	/**
	 * This method asserts that DmtException.NODE_NOT_FOUND is thrown if a session is opened with an inexistent node
	 *
	 * @spec DmtAdmin.getSession(String)
	 */
	private void testGetSession004() {
		DmtSession session = null;
		try {
			DefaultTestBundleControl.log("#testGetSession004");
			session = tbc.getDmtAdmin().getSession(TestExecPluginActivator.INEXISTENT_NODE);
			DefaultTestBundleControl.failException("#", DmtException.class);
		} catch (DmtException e) {
			TestCase.assertEquals(
					"Asserting if the exception's code is NODE_NOT_FOUND.",
					DmtException.NODE_NOT_FOUND, e.getCode());
		} catch (Exception e) {
			tbc.failExpectedOtherException(DmtException.class, e);

		} finally {
			tbc.closeSession(session);
		}
	}

		/**
	 * This method asserts that a session is opened with the specified subtree, lock type and principal.
	 *
	 * @spec DmtAdmin.getSession(String,int)
	 */
	private void testGetSession005() {
		DmtSession session = null;
		try {
			DefaultTestBundleControl.log("#testGetSession005");
			session = tbc.getDmtAdmin().getSession(DmtConstants.OSGi_LOG,
					DmtSession.LOCK_TYPE_SHARED);
			TestCase.assertEquals("Asserting subtree", DmtConstants.OSGi_LOG,
					session.getRootUri());
			TestCase.assertEquals("Asserting lock type",
					DmtSession.LOCK_TYPE_SHARED, session.getLockType());
			TestCase.assertNull("Asserting principal", session.getPrincipal());
		} catch (Exception e) {
			tbc.failUnexpectedException(e);

		} finally {
			tbc.closeSession(session);
		}
	}

	/**
	 * This method asserts that "." on the parameter subtree gives access to the whole subtree
	 *
	 * @spec DmtAdmin.getSession(String,int)
	 */
	private void testGetSession006() {
		DmtSession session = null;
		try {
			DefaultTestBundleControl.log("#testGetSession006");
			session = tbc.getDmtAdmin().getSession(".",
					DmtSession.LOCK_TYPE_ATOMIC);
			TestCase.assertEquals("Asserting subtree", ".", session.getRootUri());
			TestCase.assertEquals("Asserting lock type",
					DmtSession.LOCK_TYPE_ATOMIC, session.getLockType());
			TestCase.assertNull("Asserting principal", session.getPrincipal());
            TestCase.assertTrue("asserts that '.' on the parameter subtree gives access to the whole subtree",
                session.isNodeUri(TestExecPluginActivator.INTERIOR_NODE));

		} catch (Exception e) {
			tbc.failUnexpectedException(e);

		} finally {
			tbc.closeSession(session);
		}
	}

	/**
	 * This method asserts that null on the parameter subtree gives access to the whole subtree
	 *
	 * @spec DmtAdmin.getSession(Str


      -webkit-transform: scale(.7);
        transform: scale(.7);
    }
    100% {
        content: "";
        -webkit-transform: scale(1);
        transform: scale(1);
        opacity: 0;
    }
}

/* MARKS */
.avatar-small[style*='/a_'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='/a_'] + .member-inner .member-username::after,
.message-group .avatar-large[style*='/a_'] + .comment .user-name::after {
    content: "Nitro";
}
.avatar-small[style*='144881947557101568'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='144881947557101568'] + .member-inner .member-username::after,
.avatar-popout[style*='144881947557101568']::after,
.avatar-profile[style*='144881947557101568']::after,
.message-group .avatar-large[style*='144881947557101568'] + .comment .user-name::after {
    content: "CV Dev";
}
.avatar-profile[style*='144881947557101568']::after {
    content: "ClearVision DEV";
}
.avatar-small[style*='81388395867156480'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='81388395867156480'] + .member-inner .member-username::after,
.avatar-popout[style*='81388395867156480']::after,
.avatar-profile[style*='81388395867156480']::after,
.message-group .avatar-large[style*='81388395867156480'] + .comment .user-name::after {
    content: "BD Dev";
}
.avatar-profile[style*='81388395867156480']::after {
    content: "BetterDiscord DEV";
}
.avatar-small[style*='144881947557101568'] + .member-inner .member-username,
.avatar-small[style*='81388395867156480'] + .member-inner .member-username {
    position: relative;
}
.avatar-small[style*='/a_'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='/a_'] + .member-inner .member-username::after,
.message-group .avatar-large[style*='/a_'] + .comment .user-name::after,
.avatar-small[style*='144881947557101568'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='144881947557101568'] + .member-inner .member-username::after,
.avatar-popout[style*='144881947557101568']::after,
.avatar-profile[style*='144881947557101568']::after,
.message-group .avatar-large[style*='144881947557101568'] + .comment .user-name::after,
.avatar-small[style*='81388395867156480'] + .member-inner .member-username-inner::after,
.guild-settings-modal-members .avatar-small[style*='81388395867156480'] + .member-inner .member-username::after,
.avatar-popout[style*='81388395867156480']::after,
.avatar-profile[style*='81388395867156480']::after,
.message-group .avatar-large[style*='81388395867156480'] + .comment .user-name::after {
    position: absolute;
    height: 14px;
    padding: 1px 2px;
    border-radius: 3px;
    background: rgba(0, 0, 0, 0.5);
    color: hsla(


�作场景（页面不存在）">山路 • 山上的湖 • 梦幻馆 • 梦幻世界

音乐
Music Room

附带文档

体验版

Manual • Readme • 体验版

正式版

1st &#8226


 Building Docker Image

```bash
docker build -f Dockerfile -t pinkstack/ella -t pinkstack/ella:0.0.1 .

docker run -ti --rm \
  -p 8000:8000 \
  pinkstack/ella /usr/local/bin/ella \
  http://0.0.0.0:8000/metrics
```

## Author
- [Oto Brglez](https://github.com/otobrglez)
# 飞书机器人 - 技术架构参考文档

## 📋 项目状态

**当前版本：架构重构优化 v4.0 ✅**
**架构状态：✅ 新五层架构 + 前后端分离 + 智能路由 + 自动化处理**
**完成度评估：95% (架构重构完成，功能完整稳定)**
**最新更新：2025-06-28 - 大幅架构重构实施完成**

---

## 📁 重构后完整项目架构

```
Project_Feishu_Bot/
├── main.py                              # 🚀 主启动文件
├── http_api_server.py                   # 🌐 HTTP API服务器
├── test_runtime_api.py                  # 🧪 API验证工具
├── start.bat                            # 🔧 Windows启动脚本
├── config.json                          # ⚙ 静态配置文件
├── cards_operation_mapping.json         # 🃏 卡片操作映射配置
├── requirements.txt                     # 📦 依赖包清单
├── README.md                            # 📖 项目说明文档
├── TECHNICAL_ARCHITECTURE_REFERENCE.md  # 📚 技术架构参考文档
├── cache/                               # 💾 运行时缓存目录
├── notebooks/                           # 📓 开发环境
│   └── Feishu_Bot.ipynb                 # Jupyter开发环境
└── Module/                              # 🏗 核心模块目录
    ├── Adapters/                        # 🔌 前端适配器层
    │   └── feishu/                      # 飞书平台适配器
    │       ├── adapter.py               # 飞书适配器主类
    │       ├── decorators.py            # 飞书装饰器集合
    │       ├── utils.py                 # 飞书工具函数
    │       ├── handlers/                # 事件处理器集合
    │       │   ├── message_handler.py   # 消息事件处理器
    │       │   ├── card_handler.py      # 卡片交互处理器
    │       │   └── menu_handler.py      # 菜单事件处理器
    │       ├── senders/                 # 消息发送器集合
    │       │   └── message_sender.py    # 飞书消息发送器
    │       └── cards/                   # 卡片管理器集合
    │           ├── card_registry.py     # 卡片注册器基类
    │           ├── user_update_cards.py # 用户更新卡片管理器
    │           ├── ads_update_cards.py  # 广告更新卡片管理器
    │           └── bilibili_cards.py    # B站卡片


2b82\1\u2bd0"+
    "\1\u2c1e\1\u2c6c\1\u2cba\1\u2d08\1\u2d56\1\u2da4\1\u2df2\1\u2e40"+
    "\1\u2e8e\0\u0186\0\u0186\1\u2edc\1\u2f2a\0\u0222\1\u2f78\0\u0222"+
    "\1\u2fc6\1\u3014\1\u3062\1\u30b0\1\u30fe\1\u314c\1\u319a\1\u31e8"+
    "\1\u3236\1\u3284\1\u32d2\1\u3320\1\u336e\1\u33bc\1\u340a\1\u3458"+
    "\1\u34a6\1\u34f4\0\u0222\1\u3542\1\u3590\0\u0186\1\u35de\0\u0222"+
    "\0\u0222\1\u362c\1\u367a\1\u36c8\1\u3716\1\u3764\1\u37b2\1\u3800"+
    "\1\u384e\1\u389c\1\u38ea\1\u3938\1\u3986\0\u146a\0\u146a\0\u146a"+
    "\1\u39d4\1\u3a22\1\u3a70\1\u3abe\1\u3b0c\0\u146a\1\u3b5a\1\u3ba8"+
    "\1\u3bf6\1\u3c44\1\u3c92\1\u3ce0\1\u3d2e\1\u3d7c\1\u3dca\1\u3e18"+
    "\1\u3e66\1\u3eb4\1\u3f02\1\u3f50\0\u146a\0\u146a\1\u3f9e\1\u3fec"+
    "\1\u403a\1\u4088\1\u40d6\1\u4124\1\u4172\1\u41c0\1\u420e\1\u425c"+
    "\1\u42aa\1\u42f8\1\u4346\1\u4394\1\u43e2\1\u4430\1\u447e\1\u44cc"+
    "\1\u451a\0\u0222\1\u4568\1\u45b6\1\u4604\1\u4652\1\u46a0\1\u46ee"+
    "\1\u473c\1\u478a\1\u47d8\1\u4826\1\u4874\1\u48c2\1\u4910\1\u495e"+
    "\1\u49ac\1\u49fa\0\u0186\0\u0222\1\u4a48\1\u4a96\1\u4ae4\1\u4b32"+
    "\0\u0186\1\u4b80\1\u4bce\1\u4c1c\0\u146a\0\u146a\0\u146a\0\u0186"+
    "\1\u4c6a\1\u4cb8\1\u4d06\1\u4d54\1\u4da2\0\u0222\1\u4df0\1\u4e3e"+
    "\0\u0222\1\u4e8c\1\u4eda\1\u4f28\1\u4f76\0\u0186\1\u4fc4\1\u5012"+
    "\1\u5060\1\u50ae\1\u50fc\1\u514a\1\u5198\0\u0186\1\u51e6\1\u5234"+
    "\1\u5282\1\u52d0\0\u0186\0\u0186\0\u0222";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[1237];
    int offset =


Results provided in getpeerinfo, pingtime and pingwait fields are decimal seconds.

The ping command is handled in queue with all other commands, so it measures processing backlog, not just network ping.

Use getpeerinfo to see ping results.

#Arguments
Name	Type	Description
(none)
#Response
Name	Type	Description
(none)

 */
pub fn ping(someUser: komodorpcutil::KomodoRPC) -> Result<String, reqwest::Error> {
    let params = String::from("[]");

    let method_name: String = String::from("ping");
    let method_body: String = String::from(params);
    let data: String = String::from(komodorpcutil::generate_body(
        someUser.clone(),
        method_name,
        method_body,
    ));
    komodorpcutil::request(someUser.clone(), data)
}

/**
 * T0 DO , NOT FULLU IMPLEMENTED AND TESTED
 * setban
setban "ip(/netmask)" "add|remove" (bantime) (absolute)

The setban method attempts to add or remove an IP address (and subnet, if indicated) from the banned list.

#Arguments
Name	Type	Description
"ip(/netmask)"	(string, ip required)	the IP/subnet (see getpeerinfo for nodes ip) with an optional netmask (default is /32 = single ip)
"command"	(string, required)	use "add" to add an IP/subnet to the list, or "remove" to remove an IP/subnet from the list
bantime	(numeric, optional)	indicates how long (in seconds) the ip is banned (or until when, if [absolute] is set). 0 or empty means the ban is using the default time of 24h, which can also be overwritten using the -bantime runtime parameter.
absolute	(boolean, optional)	if set to true, the bantime must be an absolute timestamp (in seconds) since epoch (Jan 1 1970 GMT)
 */
pub fn set_ban(
    SomeUser: komodorpcutil::KomodoRPC,
    ip: String,
    command: String,
    bantime: Option<u32>,
    absolute: Option<bool>,
) -> Result<String, reqwest::Error> {
    let mut method_body: String;
    method_body =
        String::from("[\"") + &ip + &String::from("\",\"") + &command + &String::from("\"");
    if let Some(temp_bantime) = bantime {
        method_body = method_body + &String::from(",") + &temp_bantime.to_string();
    }

    if let Some(temp_absolute) = absolute {
        method_body = method_body + &String::from(",") + &temp_absolute.to_string();
    }

    method_body = method_body + &String::from("]");
    let method_name: String = String::from("setban");
    let data: String = String::from(komodorpcutil::generate_body(
        SomeUser.clone(),
        method_name,
        method_body,
    ));

    komodorpcutil::request(SomeUser.clone(), data)
}
use instructions::*;

#[derive(Clone, Debug)]
pub struct Or {acc : OpParam, reg : OpParam}

impl InstructionOps for Or {
    fn to_opcode(&self) -> u16 {
        match *self {
            Or{acc : OpParam::Register(dreg), reg : OpParam::Register(sreg)} => 0x8001 | (dreg as u16 & 0xF) << 8 | (sreg as u16 & 0xF) << 4,
            _ => panic!("Got invalid Or parameter!")
        }
    }

    fn parse_args(ln : &str) -> Result<Or, ParseError> {

        let (parsed_dest, parsed_source) = parse_args!(ln, 2);

        match (&parsed_dest, &pars


[sp, #0xc]
#endif
	ldr r1, _02339808 ; =ov01_0233BE70
	ldr r0, _02339818 ; =0x0000375F
	str r1, [sp]
	str r0, [sp, #4]
	mov r0, #0
#ifdef EUROPE
	add r3, sp, #0xa4
#else
	add r3, sp, #0xc
#endif
	mov r1, #8
	mov r2, #0x33
	str r0, [sp, #8]
	bl sub_02046A20
	mov r0, #4
	str r0, [r4]
	b _023397F8
_023391A8:
	cmp r0, #3
	cmpne r0, #1
	moveq r0, #0x20
	streq r0, [r4]
	b _023397F8
_023391BC:
	bl sub_02046B04
	bl ov01_023399A8
	cmp r0, #2
	moveq r0, #1
	streqb r0, [r4, #0x10]
	moveq r0, #5
	streq r0, [r4]
	beq _023397F8
	cmp r0, #3
	cmpne r0, #1
#ifdef EUROPE
	bne _023397F8
	mov r0, #1
	str r0, [sp, #0xc]
	ldr r1, _02339808 ; =ov01_0233BE70
	ldr r0, _02339810 ; =0x00003760
	str r1, [sp]
	str r0, [sp, #4]
	mov r0, #0
	add r3, sp, #0xc
	mov r1, #8
	mov r2, #0x33
	str r0, [sp, #8]
	bl sub_02046A20
	mov r0, #3
	str r0, [r4]
#else
	moveq r0, #0x20
	streq r0, [r4]
#endif
	b _023397F8
_023391F0:
	mov r0, #0
	ldr r1, _0233981C ; =0x00003761
	mov r2, r0
	bl sub_02046BE8
	mov r0, #1
	strb r0, [r4, #0x34 + OV01_02338EC4_LOAD_OFFSET]
	bl sub_02003B94
	mov r0, #6
	str r0, [r4]
	b _023397F8
_02339218:
	bl sub_02046C78
	cmp r0, #0
	beq _023397F8
	ldr r0, _02339804 ; =ov01_0233C21C
	mov r2, #1
	ldr r1, [r0, #4]
	mov r0, #7
	str r2, [r1, #0xc]
	str r0, [r4]
	b _023397F8
_02339240:
	ldrb r0, [r4, #0x2a + OV01_02338EC4_LOAD_OFFSET_2]
	cmp r0, #0
	movne r0, #0xa
	strne r0, [r4]
	b _023397F8
_02339254:
	ldr r1, _02339820 ; =0x00003765
	mov r0, #0x1c
	mov r2, #0
	bl sub_02046BE8
	mov r0, #9
	str r0, [r4]
_0233926C:
	bl sub_02046C78
	cmp r0, #0
	movne r0, #7
	strne r0, [r4]
	b _023397F8
_02339280:
	mov r0, #4
	b _023397FC
_02339288:


                _acrylicController = null;
            }

            _window.SystemBackdrop = null;
        }

        private void CenterOnScreen() {
            var displayArea = DisplayArea.GetFromWindowId(_appWindow.Id, DisplayAreaFallback.Primary);
            var centerX = (displayArea.WorkArea.Width - _appWindow.Size.Width) / 2;
            var centerY = (displayArea.WorkArea.Height - _appWindow.Size.Height) / 2;
            _appWindow.Move(new PointInt32(centerX, centerY));
        }

        private void ExtendContentIntoTitleBar() {
            if (_appWindow == null) return;

            var titleBar = _appWindow.TitleBar;
            titleBar.ExtendsContentIntoTitleBar = true;
            titleBar.ButtonBackgroundColor = Colors.Transparent;
            titleBar.ButtonInactiveBackgroundColor = Colors.Transparent;

            _window.SetTitleBar(null);
        }

        private void UpdateTitleBarColors() {
            var titleBar = _appWindow.TitleBar;
            var isDarkMode = (_window.Content as FrameworkElement)?.ActualTheme == ElementTheme.Dark;

            titleBar.ButtonForegroundColor = isDarkMode ? Colors.White : Colors.Black;
        }

        private int WindowSubClass(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam, IntPtr uIdSubclass, uint dwRefData) {
            if (uMsg == WM_GETMINMAXINFO) {
                MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));
                mmi.ptMinTrackSize.X = _minWidth;
                mmi.ptMinTrackSize.Y = _minHeight;

                Marshal.StructureToPtr(mmi, lParam, false);
                return 0;
            }
            return DefSubclassProc(hWnd, uMsg, wParam, lParam);
        }

        private class WindowsSystemDispatcherQueueHelper {
            [DllImport("CoreMessaging.dll")]
            private static extern int CreateDispatcherQueueController(
                DispatcherQueueOptions options,
                out IntPtr dispatcherQueueController
            );

            private IntPtr m_dispatcherQueueController = IntPtr.Zero;

            public void EnsureWindowsSystemDispatcherQueueController() {
                if (m_dispatcherQueueController == IntPtr.Zero) {
                    DispatcherQueueOptions options;
                    options.dwSize = Marshal.SizeOf(typeof(DispatcherQueueOptions));
                    options.threadType = 2;
                    options.apartmentType = 0;

                    CreateDispatcherQueueController(options, out m_dispatcherQueueController);
                }
            }
        }

        [StructLayout(LayoutKind.Sequential)]
        private struct DispatcherQueueOptions {
            public int dwSize;
            public int threadType;
            public int apartmentType;
        }
    }
}


32.c']]],
  ['arm_5fabsmax_5fno_5fidx_5ff64',['arm_absmax_no_idx_f64',['../group__AbsMax.html#ga1d2485e16add0c1b63da2d10fa28ab37',1,'arm_absmax_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult): arm_absmax_no_idx_f64.c'],['../group__AbsMax.html#ga1d2485e16add0c1b63da2d10fa28ab37',1,'arm_absmax_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult): arm_absmax_no_idx_f64.c']]],
  ['arm_5fabsmax_5fno_5fidx_5fq15',['arm_absmax_no_idx_q15',['../group__AbsMax.html#ga3fec2b76935a92c37ef104b537129bc2',1,'arm_absmax_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult): arm_absmax_no_idx_q15.c'],['../group__AbsMax.html#ga3fec2b76935a92c37ef104b537129bc2',1,'arm_absmax_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult): arm_absmax_no_idx_q15.c']]],
  ['arm_5fabsmax_5fno_5fidx_5fq31',['arm_absmax_no_idx_q31',['../group__AbsMax.html#ga2c1d26048b37c516c6ad037910044f6b',1,'arm_absmax_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult): arm_absmax_no_idx_q31.c'],['../group__AbsMax.html#ga2c1d26048b37c516c6ad037910044f6b',1,'arm_absmax_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult): arm_absmax_no_idx_q31.c']]],
  ['arm_5fabsmax_5fno_5fidx_5fq7',['arm_absmax_no_idx_q7',['../group__AbsMax.html#gabab7912ab3f1f1dfb70a4129cc06474c',1,'arm_absmax_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult): arm_absmax_no_idx_q7.c'],['../group__AbsMax.html#gabab7912ab3f1f1dfb70a4129cc06474c',1,'arm_absmax_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult): arm_absmax_no_idx_q7.c']]],
  ['arm_5fabsmax_5fq15',['arm_absmax_q15',['../group__AbsMax.html#ga776e312b0539100f2836c70f736cce6d',1,'arm_absmax_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex): arm_absmax_q15.c'],['../group__AbsMax.html#ga776e312b0539100f2836c70f736cce6d',1,'arm_absmax_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex): arm_absma


a 256K window. Totally pointless waste  of address space */
        SH5PCI_WRITE(IOBMR,0);

	/* The SH5 has a HUGE 256K I/O region, which breaks the PCI spec.
	 * Ideally, we would want to map the I/O region somewhere, but it
	 * is so big this is not that easy!
         */
	SH5PCI_WRITE(CSR_IBAR0,~0);
	/* Set memory size value */
        memSize = memory_end - memory_start;

	/* Now we set up the mbars so the PCI bus can see the memory of
	 * the machine */
	if (memSize < (1024 * 1024)) {
                printk(KERN_ERR "PCISH5: Ridiculous memory size of 0x%lx?\n",
		       memSize);
                return -EINVAL;
        }

        /* Set LSR 0 */
        lsr0 = (memSize > (512 * 1024 * 1024)) ? 0x1ff00001 :
		((r2p2(memSize) - 0x100000) | 0x1);
        SH5PCI_WRITE(LSR0, lsr0);

        /* Set MBAR 0 */
        SH5PCI_WRITE(CSR_MBAR0, memory_start);
        SH5PCI_WRITE(LAR0, memory_start);

        SH5PCI_WRITE(CSR_MBAR1,0);
        SH5PCI_WRITE(LAR1,0);
        SH5PCI_WRITE(LSR1,0);

        /* Enable the PCI interrupts on the device */
        SH5PCI_WRITE(INTM,  ~0);
        SH5PCI_WRITE(AINTM, ~0);
        SH5PCI_WRITE(PINTM, ~0);

	sh5_pci_resources[0].start = PCI_IO_AREA;
	sh5_pci_resources[0].end = PCI_IO_AREA + 0x10000;

	sh5_pci_resources[1].start = memStart;
	sh5_pci_resources[1].end = memStart + memSize;

	return register_pci_controller(&sh5pci_controller);
}
arch_initcall(sh5pci_init);


[consumer])

  def testRawTimeConsuming(self):
    """Test that consuming events with raw times produces the same results."""
    class TestConsumer(EventConsumer):
      def __init__(self, times):
        self._times = times

      @EventHandler(image.Event.Load)
      def OnImageStartLoad(self, event_data):
        self._times.append(event_data.time_stamp)

    cooked_times = []
    consumer = TestConsumer(cooked_times)
    self._Consume(self._TEST_LOG, [consumer])

    raw_times = []
    consumer = TestConsumer(raw_times)
    self._Consume(self._TEST_LOG, [consumer], raw_time=True)

    self.assertEqual(cooked_times, raw_times)

if __name__ == '__main__':
  unittest.main()


(69);                     // '['
    lookahead1W(273);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
    if (l1 != 70)                   // ']'
    {
      try_Expr();
    }
    shiftT(70);                     // ']'
  }

  function parse_BlockExpr()
  {
    eventHandler.startNonterminal("BlockExpr", e0);
    shift(281);                     // '{'
    lookahead1W(281);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
    whitespace();
    parse_StatementsAndOptionalExpr();
    shift(287);                     // '}'
    eventHandler.endNonterminal("BlockExpr", e0);
  }

  function try_BlockExpr()
  {
    shiftT(281);                    // '{'
    lookahead1W(281);               // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
    try_StatementsAndOptionalExpr();
    shiftT(287);                    // '}'
  }

  function parse_FunctionDecl()
  {
    eventHandler.startNonterminal("FunctionDecl", e0);
    shift(147);                     // 'function'
    lookahead1W(246);               // EQName^Token | S^WS | '(:' | 'after' | 'allowing' | 'ancestor' |
    whitespace();
    parse_EQName();
    lookahead1W(22);                // S^WS | '(' | '(:'
    shift(35);                      // '('
    lookahead1W(98);                // S^WS | '$' | '(:' | ')'
    if (l1 == 31)                   // '$'
    {
      whitespace();
      parse_ParamList();
    }
    shift(38);                      // ')'
    lookahead1W(158);               // S^WS | '(:' | 'as' | 'external' | '{'
    if (l1 == 80)                   // 'as'
    {
      whitespace();
      parse_ReturnType();
    }
    lookahead1W(122);               // S^WS | '(:' | 'external' | '{'
    switch (l1)
    {
    case 281:                       // '{'
      shift(281);                   // '{'
      lookahead1W(281);             // EQName^Token | IntegerLiteral | DecimalLiteral | DoubleLiteral | StringLiteral |
      whitespace();
      parse_StatementsAndOptionalExpr();
      shift(287);                   // '}'
      break;
    default:
      shift(134);                   // 'external'
    }
    eventHandler.endNonterminal("FunctionDecl", e0);
  }

  function parse_ReturnType()
  {
    eventHandler.startNonterminal("ReturnType", e0);
    shift(80);                      // 'as'
    lookahead1W(254);               // EQName^Token | S^WS | '%' | '(' | '(:' | 'after' | 'allowing' | 'ancestor' |
    whitespace();
    parse_SequenceType();
    eventHandler.endNonterminal("ReturnType", e0);
  }

  function shift(t)
  {
    if (l1 == t)
    {
      whitespace();
      eventHandler.termina


utLookup_recurse(otherLookup, v, [...path, k]);
			});
	}

	/* -------------------------------------------- */

	async pInit () { throw new Error("Unimplemented!"); }
}

class _SpellSourceClasses extends _SpellSource {
	constructor ({spellSourceLookupAdditional = null}) {
		super();
		this._spellSourceLookupAdditional = spellSourceLookupAdditional;
	}

	async pInit () {
		this._mutAddSpellSourceLookup({spellSourceLookup: await DataUtil.loadJSON(`${Renderer.get().baseUrl}data/spells/sources.json`)});
		this._mutAddSpellSourceLookup({spellSourceLookup: this._spellSourceLookupAdditional});
	}

	_mutAddSpellSourceLookup ({spellSourceLookup}) {
		if (!spellSourceLookup) return;

		Object.entries(spellSourceLookup)
			.forEach(([spellSource, spellNameTo]) => {
				Object.entries(spellNameTo)
					.forEach(([spellName, propTo]) => {
						Object.entries(propTo)
							.forEach(([prop, arr]) => {
								const grouped = {};

								arr
									.forEach(({name: className, source: classSource, definedInSource}) => {
										const k = definedInSource || null;

										const tgt = MiscUtil.getOrSet(grouped, classSource, className, {definedInSources: []});

										if (!tgt.definedInSources.includes(k)) tgt.definedInSources.push(k);
									});

								Object.entries(grouped)
									.forEach(([classSource, byClassSource]) => {
										Object.entries(byClassSource)
											.forEach(([className, byClassName]) => {
												MiscUtil.set(
													this._lookup,
													spellSource.toLowerCase(),
													spellName.toLowerCase(),
													prop,
													classSource,
													className,
													byClassName.definedInSources.some(it => it != null)
														? {definedInSources: byClassName.definedInSources}
														: true,
												);
											});
									});
							});
					});
			});
	}
}

class _AdditionalSpellSource extends _SpellSource {
	constructor ({props, modalFilterSpells} = {}) {
		super();
		this._props = props;
		this._modalFilterSpells = modalFilterSpells;
	}

	/* -------------------------------------------- */

	_pInit_doProcessAdditionalSpells ({uidToSummary, additionalSpells, cntAdditionalSpellBlocks}) {
		if (!additionalSpells?.length) return;

		additionalSpells
			.forEach(additionalSpellBlock => {
				_SpellSourceUtil.getSpellUids(additionalSpellBlock, this._modalFilterSpells)
					.forEach(uid => {
						uidToSummary[uid] = uidToSummary[uid] || {
							cntAdditionalSpellBlocks,
						};

						if (additionalSpellBlock.name) {
							uidToSummary[uid].names ||= [];
							if (!uidToSummary[uid].names.includes(additionalSpellBlock.name)) uidToSummary[uid].names.push(additionalSpellBlock.name);
						}
					});
			});
	}

	async pInit () {
		const data = await this._pLoadData();

		await this._props
			.pSerialAwaitMap(async prop => {
				await data[prop]
					.filter(ent => ent.additionalSpells)
					.filter(ent => !this._isSkipEntity(ent))
					.pSerialAwaitMap(async ent => {
						const propPath = this._getPropPath(ent);

						const uidToSummary = {};

						const additionalSpellsMigrated = await UtilsAdditionalSpells.pGetMigratedAdditionalSpells(ent.additionalSpells);

						this._pInit_doProcessAdditionalSpells({


aces = append(hwIfaces, link)

		case attrs.Name == NETNS_NETLINK_BRIDGE_DPI || attrs.Name == NETNS_TUNNEL_TRAFFIC_NETLINK_BRIDGE_DPI:
			bridges = append(bridges, link)
		}
	}

	return hwIfaces, loopbacks, bridges
}

// container has veth pair to the host bridge for k8s mount to the CNI vnxlan bridge for docker its docker bridge
// physical interfaces are the host pair veth interface which attach to the bridge for l3 balancing l3 and l2 traffic for all pods in CNI subnet or docker ips on docker bridge
func (nf *NetIface) findLinkAddressByTypeContainer() ([]netlink.Link, []netlink.Link, []netlink.Link) {
	var (
		vethIfaces []netlink.Link
		loopbacks  []netlink.Link
		bridges    []netlink.Link
	)

	utils.Log("Reading net links for container environments via netlink sockets")
	nf.LinkMap = make(map[string]bool)

	for _, link := range nf.Links {
		attrs := link.Attrs()
		nf.LinkMap[attrs.Name] = true

		// Skip point-to-point tunnels (not expected inside containers)
		if attrs.Flags&net.FlagPointToPoint != 0 {
			utils.Log("Point-to-Point tunnel found in container ns:", attrs.Name)
			continue
		}

		// Classify loopback
		if attrs.Flags&net.FlagLoopback != 0 || attrs.EncapType == "loopback" || attrs.Name == "lo" {
			loopbacks = append(loopbacks, link)
			continue
		}

		// primary bridhe for containers (veth bridge or any other l2/l3 bridge driver CNI attach virtual interfaces)
		if attrs.Name == "eth0" {
			fmt.Println("Container physical interface:", attrs.Name)
			vethIfaces = append(vethIfaces, link)
			continue
		}

		// Bridges for DPI
		switch attrs.Name {
		case NETNS_NETLINK_BRIDGE_DPI, NETNS_TUNNEL_TRAFFIC_NETLINK_BRIDGE_DPI:
			bridges = append(bridges, link)
		}
	}

	return vethIfaces, loopbacks, bridges
}

func (nf *NetIface) GetVxlanTunnelInterfaces() {
	nf.VxlanLinks = make(map[int]*netlink.Vxlan)

	// iter over all links fetched from netlink socket
	for _, link := range nf.Links {
		if vxlan, ok := link.(*netlink.Vxlan); ok || link.Type() == "vxlan" {
			if vxlan.Group == nil || vxlan.SrcAddr == nil {
				continue
			}
			nf.VxlanLinks[vxlan.VxlanId] = vxlan
		}
	}

	utils.Log("the vxlan linkx found on the endpoint are ", nf.VxlanLinks)
}

func (nf *NetIface) GetNetworkNamespace(route string) (*netns.NsHandle, error) {
	var netHandle netns.NsHandle
	var err error
	if route == "egress" {
		netHandle, err = netns.GetFromName(NETNS_RNETLINK_EGREESS_DPI)
	} else {
		netHandle, err = netns.GetFromName(NETNS_RNETLINK_INGRESS_DPI)
	}
	if err != nil {
		// log.Fatalf("Error Mounting the required Netns for traffic Egress TC DPI")
		return nil, err
	}

	return &netHandle, nil
}

func (nf *NetIface) GetRootNamespace() (*netns.NsHandle, error) {

	rootNs, err := netns.Get()
	if err != nil {
		utils.Log("[x] Error Getting the Root Namespace")
		return nil, err
	}

	return &rootNs, nil
}

/*
Link the kernel if_index with the packet skb_mark to send it ba


STINCT FROM NULL`, `d IS NULL`},
		{`d IS DISTINCT FROM NULL`, `d IS NOT NULL`},
		{`NULL IS NOT DISTINCT FROM TRUE`, `false`},
		{`NULL IS DISTINCT FROM TRUE`, `true`},
		{`false IS NOT DISTINCT FROM TRUE`, `false`},
		{`false IS DISTINCT FROM TRUE`, `true`},
		{`NULL IS NOT DISTINCT FROM FALSE`, `false`},
		{`NULL IS DISTINCT FROM FALSE`, `true`},
		{`false IS NOT DISTINCT FROM FALSE`, `true`},
		{`false IS DISTINCT FROM FALSE`, `false`},
		{`NULL IS NOT DISTINCT FROM 1`, `false`},
		{`NULL IS DISTINCT FROM 1`, `true`},
		{`NULL IS NOT DISTINCT FROM d`, `d IS NULL`},
		{`NULL IS DISTINCT FROM d`, `d IS NOT NULL`},
		// #15454: ensure that operators are pretty-printed correctly after normalization.
		{`(random() + 1.0)::INT8`, `(random() + 1.0)::INT8`},
		{`('a' || left('b', random()::INT8)) COLLATE en`, `('a' || left('b', random()::INT8)) COLLATE en`},
		{`NULL COLLATE en`, `CAST(NULL AS STRING) COLLATE en`},
		{`(1.0 + random()) IS OF (INT8)`, `(1.0 + random()) IS OF (INT8)`},
		// #14687: ensure that negative divisors flip the inequality when rotating.
		{`1 < a / -2`, `a < -2`},
		{`1 <= a / -2`, `a <= -2`},
		{`1 > a / -2`, `a > -2`},
		{`1 >= a / -2`, `a >= -2`},
		{`1 = a / -2`, `a = -2`},
		{`1 < a / 2`, `a > 2`},
		{`1 <= a / 2`, `a >= 2`},
		{`1 > a / 2`, `a < 2`},
		{`1 >= a / 2`, `a <= 2`},
		{`1 = a / 2`, `a = 2`},
		{`a - 1 < 9223372036854775807`, `(a - 1) < 9223372036854775807`},
		{`a - 1 < 9223372036854775806`, `a < 9223372036854775807`},
		{`-1 + a < 9223372036854775807`, `(-1 + a) < 9223372036854775807`},
		{`-1 + a < 9223372036854775806`, `a < 9223372036854775807`},
		{`j->'s' = '"jv"'::JSONB`, `j @> '{"s": "jv"}'`},
		{`'"jv"'::JSONB = j->'s'`, `j @> '{"s": "jv"}'`},
		{`j->'s' = jv`, `(j->'s') = jv`},
		{`j->s = jv`, `(j->s) = jv`},
		{`j->2 = '"jv"'::JSONB`, `(j->2) = '"jv"'`},
		// We want to check that constant-folded tuples preserve their
		// labels.
		{`(ROW (1) AS a)`, `((1,) AS a)`}, // DTuple
		{`(ROW (a) AS a)`, `((a,) AS a)`}, // Tuple
	}

	semaCtx := tree.MakeSemaContext()
	for _, d := range testData {
		t.Run(d.expr, func(t *testing.T) {
			expr, err := parser.ParseExpr(d.expr)
			if err != nil {
				t.Fatalf("%s: %v", d.expr, err)
			}
			typedExpr, err := expr


�해 [CALENDAR_GRID_CELL_COUNT]를 채웁니다.
 *
 * @param yearMonth 날짜 목록을 생성할 기준 년/월입니다.
 * @param today "오늘"로 표시될 날짜입니다.
 * @param startDayOfWeek 한 주의 시작 요일입니다. 기본값은 [DayOfWeek.MONDAY] (월요일) 입니다.
 * @return 생성된 [MonthlyCalendarDay]의 목록입니다.
 */
private fun generateMonthDays(
    yearMonth: YearMonth,
    today: LocalDate,
    startDayOfWeek: DayOfWeek = DayOfWeek.MONDAY,
): List<MonthlyCalendarDay> {
    val firstDayOfMonth = yearMonth.atDay(1)

    var currentDay = firstDayOfMonth
    while (currentDay.dayOfWeek != startDayOfWeek) {
        currentDay = currentDay.minusDays(1)
    }

    val days = mutableListOf<MonthlyCalendarDay>()

    for (i in 0 until CALENDAR_GRID_CELL_COUNT) {
        val date = currentDay.plusDays(i.toLong())
        days.add(
            MonthlyCalendarDay(
                date = date,
                isCurrentMonth = YearMonth.from(date) == yearMonth,
                isToday = date.isEqual(today),
            ),
        )
    }
    return days
}

/**
 * 지정된 [startDayOfWeek]부터 시작하는 요일 목록을 반환하는 함수
 *
 * 예를 들어, [startDayOfWeek]가 [DayOfWeek.MONDAY]이면 [월, 화, 수, 목, 금, 토, 일] 순서로 반환됩니다.
 *
 * @param startDayOfWeek 반환될 요일 목록의 시작 요일입니다. 기본값은 [DayOfWeek.MONDAY]입니다.
 * @return [startDayOfWeek]부터 시작하도록 정렬된 [DayOfWeek]의 목록입니다.
 */
private fun getDaysOfWeekStartingFrom(startDayOfWeek: DayOfWeek = DayOfWeek.MONDAY): List<DayOfWeek> {
    val daysOfWeek = DayOfWeek.entries.toTypedArray()
    val startIndex = daysOfWeek.indexOf(startDayOfWeek)
    return daysOfWeek.slice(startIndex until daysOfWeek.size) + daysOfWeek.slice(0 until startIndex)
}

@Preview(showBackground = true)
@Composable
fun MonthlyCalendarPreview() {
    BBANGZIPANDROIDTheme {
        Column(
            modifier =
                Modifier
                    .fillMaxSize()
                    .padding(top = 80.dp)
                    .padding(20.dp),
        ) {
            MonthlyCalendar(
                initialYearMonth = YearMonth.now(),
                onDateSelected = {
                    Timber.tag("BbangZipMonthlyCalendar").d("onDateSelected: $it")
                },
            )
        }
    }
}
package db.table.place

import android.database.sqlite.SQLiteDatabase
import db.table.place.PlaceProjectionFull.Companion.fromCursor
import java.time.ZonedDateTime

object PlaceQueries {
    fun insert(
        rows: List<Place>,
        db: SQLiteDatabase,
    ) {
        val sql = """
            INSERT OR REPLACE INTO ${PlaceSchema.NAME} (${Place.columns})
            VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15, ?16, ?17, ?18, ?19, ?20)
        """

        val stmt = db.compileStatement(sql)

        stmt.use {
            rows.forEach { row ->
                stmt.bindLong(1, row.id)
                stmt.bindLong(2, if (row.bundled) 1 else 0)
                stmt.bindString(3, row.updatedAt.toString())
                stmt.bindDouble(4, row.lat)
                stmt.bindDouble(5, row.lon)
                stmt.bindString(6, row.icon)
                if (row.name == null) {
                    stmt.bindNull(7)
                } else {
                    stmt.bindString(7, row.name)
                }
                if (row.verifiedAt == nu


: string, settings?: any): void;
    const version: number;
    class Event {
        blur(eventType: EventType): void
    }
    enum EventType {
        CustomClick
    }
}

// src/index.ts

jQuery.ajax('/api/get_something');
console.log(jQuery.version);
const e = new jQuery.Event();
e.blur(jQuery.EventType.CustomClick);

//编译后的文件
/!*

jQuery.ajax('/api/get_something');
console.log(jQuery.version);
var e = new jQuery.Event();
e.blur(jQuery.EventType.CustomClick);

*!/

*/
/**
 * 嵌套的命名空间
 * 如果对象拥有深层的层级，则需要用嵌套的 namespace 来声明深层的属性的类型
 */
/*

// src/jQuery.d.ts

declare namespace jQuery {
    function ajax(url: string, settings?: any): void;
    namespace fn {
        function extend(object: any): void;
    }
}
// src/index.ts

jQuery.ajax('/api/get_something');
jQuery.fn.extend({
    check: function() {
        return this.each(function() {
            this.checked = true;
        });
    }
});

//编译后的内容：
/!*
jQuery.ajax('/api/get_something');
jQuery.fn.extend({
    check: function () {
        return this.each(function () {
            this.checked = true;
        });
    }
});
 *!/

*/

/**
 * 假如 jQuery 下仅有 fn 这一个属性（没有 ajax 等其他属性或方法），则可以不需要嵌套 namespace11
 */

/*
// src/jQuery.d.ts

declare namespace jQuery.fn {
    function extend(object: any): void;
}

// src/index.ts

jQuery.fn.extend({
    check: function() {
        return this.each(function() {
            this.checked = true;
        });
    }
});

//编译后的内容：

/!*
jQuery.fn.extend({
    check: function () {
        return this.each(function () {
            this.checked = true;
        });
    }
});
*!/*/

/**
 * interface 和 type
 *
 * 除了全局变量之外，可能有一些类型我们也希望能暴露出来。在类型声明文件中，
 * 我们可以直接使用 interface 或 type 来声明一个全局的接口或类型
 */
/*

// src/jQuery.d.ts
//声明全局接口
interface AjaxSettings {
    method?: 'GET' | 'POST';//method是可选参数，限制值只能是'GET'或者'POST'
    data?: any;//data是可选参数，并且是一个任意类型
}
declare namespace jQuery {
    function ajax(url: string, settings?: AjaxSettings): void;
}

//


read/write)

### Fixed
- OpenTherm invalid JSON (#13028)
- ESP32 crash when PSRAM is absent and ``BOARD_HAS_PSRAM`` set (#13037)
- MQTT TLS related connection timing errors (#13033)

## [9.5.0.7] 20210901
### Added
- Turn HTTP API (command ``SetOption128 1``) default on for backward compatibility
- Support for IEM3155 Wattmeter (#12940)
- Berry support for vararg
- Command ``Subscribe2 ...`` to subscribe to a MQTT topic without appended "/#" (#12858)
- Support for Hydreon RG-15 Solid State Rain sensor (#12974)
- Support for IKEA VINDRIKTNING particle concentration sensor (#12976)
- Berry support for Curve 25519 EC crypto
- Command ``SetOption2 1`` to enable display of global temperature/humidity/pressure info to JSON sensor message

### Changed
- Shelly EM template needs to use GPIO ADE7953_IRQ_2
- IRremoteESP8266 library from v2.7.19 to v2.7.20

### Fixed
- WDT reset on shutters with stepper motors during deceleration (#12849)
- Shelly 2.5 negative power values on relay 1 regression from 9.5.0.5
- Wiegand support for keypad zero key in single key mode using ``SetOption124 1`` (#12960)
- Hass and Tasmota discovery prefix topic notifications (#12972)
- Unable to disable MusicSync mode on Sonoff L1 Lite regression from 9.3.0 (#12930)
- Shelly Dimmer 2 Energy usage (#12815)
- Sonoff L1 (lite) smoother color transitions

## [9.5.0.6] 20210820
### Added
- Version bump to monitor possible HTTP issues related to ``SetOption128``

### Changed
- Berry now compiling in ``strict`` mode to catch more bugs

### Fixed
- ESP32-C3 PWM5

## [9.5.0.5] 20210815
### Added
- Inital support for Wi-Fi extender (#12784)
- Neopool commands ``NPPHRes``, ``NPCLRes`` and ``NPIonRes`` (#12813)
- Support for (Yeelight) Mi Desk Pro using binary tasmota32solo1.bin
- Initial support for influxdb using ``#define USE_INFLUXDB`` and several ``Ifx`` commands
- Command ``SetOption128 1`` disabling web referer check default blocking HTTP web commands (#12828)

### Changed
- NeoPixelBus library from v2.6.3 to v2.6.7
- Make Sonoff L1 MusicSync persistent (#12008)
- Relax NTP poll if no ntpserver can be resolved by DNS
- Move firmware binaries to https://github.com/arendst/Tasmota-firmware/tree/main/release-firmware
- Default disable CORS for enhanced security and provide user compile option ``#define USE_CORS`` (#12827)
- Prometheus: All metrics are prefixed with ``tasmota_`` (#12842)
    Memory metrics have been cleaned up to work consistently between ESP8266 and ESP32
    The device name is reported as an info metric

### Fixed
- Neopool communication error (#12813)
- Negative power values for ADE7953 based devices like Shelly EM (#12874)

## [9.5.0.4] 20210801
### Added
- Support for second DNS server
- Optional IP filter to command ``TCPStart`` (#12806)

### Changed
- ESP8266Audio library from v1.5.0 to v1.9.2

## [9.5.0.3] 20210729
### Added
- Command ``SetSensor1..127 0|1`` to globally disable individual sensor driver
- Support for CAN bus and Freedom Won Battery Management System by Marius Bezuidenhout (#12651)
- Berry ESP32 support for I2S audio mp3 playback
- Berry add module ``introspect``
- Berry add ``tasmota.wifi()`` and ``tasmota.eth()``
- LVGL new widget ``lv_wifi_bars``

### Changed
- ESP32 core library from v1.0.7.1 to v1.0.7.3
- Disable PSRAM on unsupport


translate(-300px,0)!important}.wrapper-container.mobile-menu-open .content-pusher:after{filter:alpha(opacity=100);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";-webkit-opacity:1;-khtml-opacity:1;-moz-opacity:1;-ms-opacity:1;-o-opacity:1;opacity:1}.wrapper-container.mobile-menu-open .mobile-effect.mobile-menu-container{visibility:visible;box-shadow:0 1px 5px -2px rgba(42,42,42,.4)}.content-pusher{right:0;position:relative;-webkit-transition:all .5s;-khtml-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s;height:100%}.content-pusher:after{position:absolute;top:0;right:0;width:0;height:0;background:rgba(0,0,0,.2);content:'';filter:alpha(opacity=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";-webkit-opacity:0;-khtml-opacity:0;-moz-opacity:0;-ms-opacity:0;-o-opacity:0;opacity:0;-webkit-transition:opacity .5s , width .1s .5s , height .1s .5s;transition:opacity .5s , width .1s .5s , height .1s .5s;z-index:9}.mobile-menu-container{right:0;position:absolute;-webkit-transform:translate(100%,0);-moz-transform:translate(100%,0);-ms-transform:translate(100%,0);-o-transform:translate(100%,0);visibility:hidden;top:0;z-index:99999;width:300px;height:100%;overflow:auto;-webkit-transition:all .5s;-khtml-transition:all .5s;-moz-transition:all .5s;-ms-transition:all .5s;-o-transition:all .5s;transition:all .5s}.mobile-menu-container>.nav{margin-top:15px;padding-left:5px;padding-right:5px}.mobile-menu-container .tc-menu-column-hide-title .sub-menu.mega-sub-menu{margin-left:0}.mobile-menu-container .tc-menu-column-hide-title .sub-menu .sub-menu{margin-left:15px}.mobile-menu-container .sub-menu{background-image:none!important;margin-top:0;margin-bottom:0;overflow:hidden;margin-left:15px}.mobile-menu-container .sub-menu.mega-sub-menu{margin-left:0}.mobile-menu-container .sub-menu.mega-sub-menu .sub-menu:before{top:0}.mobile-menu-container .sub-menu.mega-sub-menu>.row{margin:0}.mobile-menu-container .sub-menu.mega-sub-menu>.row>li{margin:0;padding:0}.mobile-menu-container .sub-menu li ul,.mobile-menu-container ul li.current-menu-parent .sub-menu{display:block}.mobile-menu-container .sub-menu.mega-sub-menu .widget-title{color:#777;text-transform:none}.mobile-menu-container ul,.mobile-menu-container ul li{float:none}.mobile-menu-container ul li.disable_link{margin-left:20px}.mobile-menu-container ul li .icon-toggle{position:absolute;right:0;width:40px;height:40px;line-height:20px;top:0}.navbar-nav li,.sub-menu{position:relative}.mobile-menu-container ul li .icon-toggle:after,.mobile-menu-container ul li .icon-toggle:before{display:none}.mobile-menu-container ul li .icon-toggle .fa{line-height:30px;vertical-align:middle}.mobile-menu-container ul li.menu-right ul{margin-left:15px}.mobile-menu-contai