wKICAgICAgICBzdW0obGluZXNfYWRkZWQpIEFTIGxpbmVzX2FkZGVkLAogICAgICAgIHN1bShsaW5lc19kZWxldGVkKSBBUyBsaW5lc19kZWxldGVkCiAgICBGUk9NIGdpdF9jbGlja2hvdXNlLmZpbGVfY2hhbmdlcwogICAgV0hFUkUgcGF0aCBMSUtFICdzcmMvRnVuY3Rpb25zJScKICAgIEdST1VQIEJZIHRvSG91cih0aW1lKSBBUyBob3VyT2ZEYXkKKQ==)

```sql
SELECT
    hourOfDay,
    bar(commits, 0, 400, 50) AS commits,
    bar(lines_added, 0, 30000, 50) AS lines_added,
    bar(lines_deleted, 0, 15000, 50) AS lines_deleted
FROM
(
    SELECT
        hourOfDay,
        uniq(commit_hash) AS commits,
        sum(lines_added) AS lines_added,
        sum(lines_deleted) AS lines_deleted
    FROM git.file_changes
    WHERE path LIKE 'src/Functions%'
    GROUP BY toHour(time) AS hourOfDay
)

┌─hourOfDay─┬─commits───────────────────────┬─lines_added────────────────────────────────────────┬─lines_deleted──────────────────────────────────────┐
│         0 │ ████████▊                     │ ██████▊                                            │ ███████████▎                                       │
│         1 │ ███████████▎                  │ ███▌                                               │ ██████▍                                            │
│         2 │ ████████                      │ ███▊                                               │ █████                                              │
│         3 │ █████████▌                    │ ████▎                                              │ █▋                                                 │
│         4 │ ███████▋                      │ ██▍                                                │ ████▎                                              │
│         5 │ ████▋                         │ ██▋                                                │ ▋                                                  │
│         6 │ █████████████                 │ ███████▍                                           │ █████████▊                                         │
│         7 │ ██████████████▋               │ ██████▊                                            │ █████▌                                             │
│         8 │ █████████████▎                │ ███████▋                                           │ ███████████████▌                                   │
│         9 │ ████████████████▊             │ ██████████████████████████████████████████████████ │ ████████▊                                          │
│        10 │ ██████████████████▋           │ ██████████▏                                        │ ███████████▌                                       │
│        11 │ ██████████████████████▋       │ █████████████▍                                     │ ████████████▋                                      │
│        12 │ ██████████████████████████    │ ██████████


(6, 1fr);
        grid-template-rows: 1fr 1fr;
        max-width: 1000px;
        margin: 0 auto;
        gap: 0 20px;
    }
}

.rwd-About_SVG-pages {
    width: 36px;
    height: 41px;
    margin-bottom: 19px;
}

.rwd-About_SVG-code {
    width: 69px;
    height: 41px;
    margin-bottom: 19px;
}

.rwd-About_SVG-3rd {
    width: 58px;
    height: 60px;
}
.rwd-About_Minor {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    margin: 40px 0 0;
}

.rwd-About_MinorTitle {
    font-family: "Oswald", sans-serif;
    font-size: 22px;
    text-transform: uppercase;
    color: #000;
}

.rwd-About_Minor p {
    font-size: 1rem;
    line-height: 22px;
    margin-top: 10px;
}

.rwd-About_MajorTitle {
    font-family: "Oswald", sans-serif;
    font-size: 22px;
    text-transform: uppercase;
    color: #000;
}

.rwd-About_Major {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    margin: 40px 0 0;
}

.rwd-About_Major p {
    font-size: 1rem;
    line-height: 22px;
    margin-top: 10px;
}

.rwd-About_Skip {
    color: #b50404;
    font-size: 1rem;
    padding: 5%;
    text-align: center;
    line-height: 22px;
    margin: 20px 0;
}

@media (min-width: 800px) {
    .rwd-About_Minor:nth-child(1) {
        grid-column: 1/3;
        grid-row: 1;
    }
    .rwd-About_Minor:nth-child(2) {
        grid-column: 3/5;
        grid-row: 1;
    }
    .rwd-About_Minor:nth-child(3) {
        grid-column: 5/-1;
        grid-row: 1;
    }
    .rwd-About_Major:nth-child(4) {
        grid-column: 1/4;
        grid-row: 2;
    }
    .rwd-About_Major:nth-child(5) {
        grid-column: 4/-1;
        grid-row: 2;
    }
    .rwd-About_Minor p {
        font-size: 15px;
        max-width: 205px;
    }
}

.rwd-Buy {
    display: flex;
    align-items: center;
    position: sticky;
    top: 0;
    z-index: 20;
    padding: 10px 0;
    margin: 10px 0;
    justify-content: space-evenly;
    @media (min-width: 1000px) {
        display: grid;
        grid-template-columns: calc(50vw - 500px) repeat(5, 1fr) calc(
                50vw - 500px
            );
        grid-template-rows: 70px;
        background-color: rgba(255, 255, 255, 0.25);
    }
}

.rwd-Buy_Link {
    border-radius: 25px;
    padding: 5px 20px;
    background-color: #089df4;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-family: "Oswald", sans-serif;
    font-size: 14px;
    text-transform: uppercase;
    color: #fff;
    border: 3px solid transparent;
    transition: border 0


(frame, body)
	if (not IsValidFrame(frame)) then
		error("Invalid header frame");
		return;
	end
	if (not select(2, frame:IsProtected())) then
		error("Header frame must be explicitly protected");
		return;
	end
	if (type(body) ~= "string") then
		error("Invalid body");
		return;
	end
	LOCAL_API_Frame:SetAttribute("_apiframe", frame);
	LOCAL_API_Frame:SetAttribute("_execute", body);
end

-- Create a frame handle reference and store it against a frame
function SecureHandlerSetFrameRef(frame, label, refFrame)
	if (not IsValidFrame(frame)) then
		error("Invalid frame");
		return;
	end
	if (type(label) ~= "string") then
		error("Invalid body");
		return;
	end
	if (not IsValidFrame(refFrame)) then
		error("Invalid reference frame");
		return;
	end
	LOCAL_API_Frame:SetAttribute("_apiframe", frame);
	LOCAL_API_Frame:SetAttribute("_frame-" .. label, refFrame);
end

---------------------------------------------------------------------------
-- Helper Methods, these are just f


Label.REPEATED
  )
  @JvmField
  public val enums: List<KeywordKotlinEnum> = immutableCopyOf("enums", enums)

  public override fun newBuilder(): Builder {
    val builder = Builder()
    builder.object_ = object_
    builder.when_ = when_
    builder.fun_ = fun_
    builder.return_ = return_
    builder.enums = enums
    builder.addUnknownFields(unknownFields)
    return builder
  }

  public override fun equals(other: Any?): Boolean {
    if (other === this) return true
    if (other !is KeywordKotlin) return false
    if (unknownFields != other.unknownFields) return false
    if (object_ != other.object_) return false
    if (when_ != other.when_) return false
    if (fun_ != other.fun_) return false
    if (return_ != other.return_) return false
    if (enums != other.enums) return false
    return true
  }

  public override fun hashCode(): Int {
    var result = super.hashCode
    if (result == 0) {
      result = unknownFields.hashCode()
      result = result * 37 + object_.hashCode()
      result = result * 37 + when_.hashCode()
      result = result * 37 + fun_.hashCode()
      result = result * 37 + return_.hashCode()
      result = result * 37 + enums.hashCode()
      super.hashCode = result
    }
    return result
  }

  public override fun toString(): String {
    val result = mutableListOf<String>()
    if (object_ != null) result += """object_=${sanitize(object_)}"""
    result += """when_=$when_"""
    if (fun_.isNotEmpty()) result += """fun_=$fun_"""
    if (return_.isNotEmpty()) result += """return_=$return_"""
    if (enums.isNotEmpty()) result += """enums=$enums"""
    return result.joinToString(prefix = "KeywordKotlin{", separator = ", ", postfix = "}")
  }

  public fun copy(
    object_: String? = this.object_,
    when_: Int = this.when_,
    fun_: Map<String, String> = this.fun_,
    return_: List<Boolean> = this.return_,
    enums: List<KeywordKotlinEnum> = this.enums,
    unknownFields: ByteString = this.unknownFields
  ): KeywordKotlin = KeywordKotlin(object_, when_, fun_, return_, enums, unknownFields)

  public class Builder : Message.Builder<KeywordKotlin, Builder>() {
    @JvmField
    public var object_: String? = null

    @JvmField
    public var when_: Int? = null

    @JvmField
    public var fun_: Map<String, String> = emptyMap()

    @JvmField
    public var return_: List<Boolean> = emptyList()

    @JvmField
    public var enums: List<KeywordKotlinEnum> = emptyList()

    public fun object_(object_: String?): Builder {
      this.object_ = object_
      return this
    }

    public fun when_(when_: Int): Builder {
      this.when_ = when_
      return this
    }

    public fun fun_(fun_: Map<String, String>): Builder {
      this.fun_ = fun_
      return this
    }

    public fun return_(return_: List<Boolean>): Builder {
      checkElementsNotNull(return_)
      this.return_ = return_
      return this
    }

    public fun enums(enums: List<KeywordKotlinEnum>): Builder {
      checkElementsNotNull(enums)
      this.enums = enums
      return this
    }

    public override fun build(): KeywordKotlin = KeywordKotlin(
      object_ = object_,
      when_ = when_ ?: throw missingRequiredFields(when_, "when_"),
      fun_ = fun_,
      return_ = return_,
      enums = enums,
      unknownFields = buildUnknownFields()
    )
  }

  public compa


Y08rvXlU10YkdvhMfecGnzGNBXi2jI/V19HUD55zaifxnx2TR0RbO9p0afJf95QZzH8iyX+s8iWa+U4e1yKQ5WGcqGb+/B0tTGP/hkGfaUFBrdEG1EAhaID5GfOa6Oa3BDJmXIWQcUVXtMwEaE9qgBqgBqiBRNMAgYxARiCjBqgBaoAaoAaogThrgEAWZwckGuHzfvjWSg1QA9QANUANhK8BAhmBjG9F1AA1QA1QA9QANRBnDRDI4uwAvkWE/xZBm9Fm1AA1QA1QA4mmAQIZgYxvRdQANUANUAPUADUQZw0QyOLsgEQjfN4P31qpAWqAGqAGqIHwNUAgI5DxrYgaoAaoAWqAGqAG4qwBAlmcHcC3iPDfImgz2owaoAaoAWog0TRAICOQ8a2IGqAGqAFqgBqgBuKsAQJZnB2QaITP++FbKzVADVAD1AA1EL4GCGQEMr4VUQPUADVADVAD1ECcNUAgi7MD+BYR/lsEbUabUQPUADVADSSaBghkBDK+FVED1AA1QA1QA9RAnDVAIIuzAxKN8Hk/fGulBqgBaoAaoAbC1wCBjEDGtyJqgBqgBqgBaoAaiLMGXAFknQaNkaGb9wsSy5U2oAaoAWqAGqAGqIFE0wA4p+OA0ZKSkmLWmjVrSrhLSrgnhHL8zTff7E3UY290lk6Dxsrr/UZwpQ2oAWqAGqAGqAFqIOE0AM557PV3vezjGCCrXr26N1E2LfK/h5ppB9qBGqAGqAFqgBpIbA2gYircJSY1ZHXr1iWQWdWWfOgS+6Gjf+lfaoAaoAaoAX8N3HXXXeHymMQEyGbPni1IDAiRK21ADVAD1AA1QA1QA8miAfDP3LlznQFkYaeCJ9ACtAAtQAvQArQALZDEFohJDVkS25O3TgvQArQALUAL0AK0QNgWIJCFbTKeQAvQArQALUAL0AK0QHQtQCCLrj15NVqAFqAFaAFagBagBcK2AIEsbJPxBFqAFqAFaAFagBagBaJrAQJZdO3Jq9ECtAAtQAvQArQALRC2BQhkYZuMJ9ACtAAtQAvQArQALRBdCxDIomtPXo0WoAVoAVqAFqAFaIGwLUAgC9tkPIEWoAVoAVqAFqAFaIHoWoBAFl178mq0AC1AC9ACtAAtQAuEbQECWdgm4wm0AC1AC9ACtAAtQAtE1wIEsujak1ejBWgBWoAWoAVoAVogbAv8Px4EI72/Q95bAAAAAElFTkSuQmCC" width = "378" height = "193" alt = "" style = "vertical-align: baseline; width: 378px; height: 193px;">

Trials are stored in a TimeIntervals object which subclasses DynamicTable. Here, we are adding 'correct', which will be a logical array.

trials = types.core.TimeIntervals( ...

    <span style="color: #a7


local conf = {
	["filename"] = 's-商店配置1.xlsx',
	["sheetname"] = '商店配置',
	["types"] = {
'int','string','int','int','string','string','json','json','int','int','float','string','string','string','string','int','int','int','int','string'
},
	["names"] = {
'id','key','group','nType','sName','sIcon','jGets','jCosts','nBuyLimitType','nBuyLimitVal','fDiscount','sDiscountStart','sDiscountEnd','sBuyStart','sBuyEnd','nOnecBuyLimit','nSumBuyLimit','nResetType','nResetValue','sDesc'
},
	["data"] = {
{'11001',	'11001',	'1',	'1',	'金币',	'gift_package',	'[[10001,3000,2]]',	'[[10002,100]]',	'0',	'0',	'0',	'',	'',	'',	'',	'1',	'-1',	'1',	'1',	'花费100钻石可获得3000金币。'},
{'11002',	'11002',	'1',	'1',	'金币',	'gift_package',	'[[10001,10000,2]]',	'[[10002,300]]',	'0',	'0',	'0.9',	'',	'',	'',	'',	'3',	'-1',	'2',	'1',	'花费300钻石可获得10000金币。'},
{'11003',	'11003',	'1',	'1',	'金币',	'gift_package',	'[[10001,30000,2]]',	'[[10002,800]]',	'0',	'0',	'0.8',	'',	'',	'',	'',	'5',	'-1',	'3',	'1',	'花费800钻石可获得30000金币。'},
{'12001',	'12001',	'1',	'1',	'建造加速素材',	'gift_package',	'[[11001,10,2]]',	'[[10002,200]]',	'0',	'0',	'0',	'',	'',	'',	'',	'10',	'10',	'0',	'0',	'花费200钻石购买建造加速素材10个'},
{'12002',	'12002',	'1',	'1',	'建造资材',	'gift_package',	'[[11002,10,2]]',	'[[10002,500]]',	'0',	'0',	'0',	'',	'',	'',	'',	'5',	'5',	'0',	'0',	'花费500钻石购买建造资材10个'},
{'13001',	'13001',	'1',	'1',	'中级冷却装置',	'gift_package',	'[[11004,5,2]]',	'[[10002,80]]',	'0',	'0',	'0',	'',	'',	'',	'',	'-1',	'999',	'0',	'


 { (a, b) ->
      val result = a.zip(b) { _, aa, bb -> Pair(aa, bb) }
      val expected = a.filter { (k, _) -> b.containsKey(k) }
        .map { (k, v) -> Pair(k, Pair(v, b[k]!!)) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip2Null() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int().orNull()),
    ) { (mapA, mapB) ->
      val result = mapA.zip(mapB) { _, aa, bb -> Pair(aa, bb) }
      val expected = mapA.filter { (k, _) -> mapB.containsKey(k) }
        .map { (k, v) -> Pair(k, Pair(v, mapB[k])) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip3Ok() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int()),
    ) { (a, b) ->
      val result = a.zip(b, b) { _, aa, bb, cc -> Triple(aa, bb, cc) }

      val expected = a.filter { (k, _) -> b.containsKey(k) }
        .map { (k, v) -> Pair(k, Triple(v, b[k]!!, b[k]!!)) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip3Null() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int().orNull()),
    ) { (mapA, mapB) ->
      val result = mapA.zip(mapB, mapB) { _, aa, bb, cc -> Triple(aa, bb, cc) }
      val expected = mapA.filter { (k, _) -> mapB.containsKey(k) }
        .map { (k, v) -> Pair(k, Triple(v, mapB[k], mapB[k])) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip4Ok() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int()),
    ) { (a, b) ->
      val result = a.zip(b, b, b) { _, aa, bb, cc, dd -> Tuple4(aa, bb, cc, dd) }

      val expected = a.filter { (k, _) -> b.containsKey(k) }
        .map { (k, v) -> Pair(k, Tuple4(v, b[k]!!, b[k]!!, b[k]!!)) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip4Null() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int().orNull()),
    ) { (mapA, mapB) ->
      val result = mapA.zip(mapB, mapB, mapB) { _, aa, bb, cc, dd -> Tuple4(aa, bb, cc, dd) }
      val expected = mapA.filter { (k, _) -> mapB.containsKey(k) }
        .map { (k, v) -> Pair(k, Tuple4(v, mapB[k], mapB[k], mapB[k])) }
        .toMap()

      result shouldBe expected
    }
  }

  @Test fun zip5Ok() = runTest {
    checkAll(
      Arb.map2(Arb.int(), Arb.int(), Arb.int()),
    ) { (a, b)


 the point
	in ptsi is within some tag we are displaying, and if so, fill in the rest of the struct
	to indicate which tag was clicked.
	Char indexes are in rendered chars.
----------------------------------------------------------------------------------------------*/
void VwParagraphBox::DrawOverlayTags(IVwGraphics * pvg, Rect rcSrc, Rect rcDst,
	VwStringBox * psbox, VwOverlayFlags vof, int ydTop, int ydBottom, TagSelectInfo * ptsi,
	FobData & fobd)
{
	bool fAbove = vof & kgrfofTagAbove;
	bool fBelow = vof & kgrfofTagBelow;
	// We should not have been called if neither is wanted.
	if (!fAbove && !fBelow)
		return;

	ILgSegment * pseg = psbox->Segment();
	int ichMin = psbox->IchMin();
	int dichLim;
	CheckHr(pseg->get_Lim(psbox->IchMin(), &dichLim));
	int ichLimSeg = ichMin + dichLim;

	// All variables in this routine are rendered char indexes, not logical ones.
	int ichMinRun;
	int ichLimRun;
	int isbt;
	int irun = 0;
	ITsTextPropsPtr qttp;
	int ichMinRun2;
	int ichLimRun2;
	int isbt2;
	int irun2;
	ITsTextPropsPtr qttp2;
	IVwOverlay * pvo = dynamic_cast<VwParagraphBox *>(psbox->Container())->Source()->Overlay();

	// This vector stores info that we need to display about the beginnings of tags. When
	// we reach the end of the segment or another place where we need to display opening
	// info, that gives us the available space, and we then display it, clear it, and
	// use it for the next.
	VecTagInfo vtiPending;
	// This character position indicates where we last drew close-of-tag info, for the
	// purpose of knowing how much space we have available for drawing the next.
	// Initially, we have available everything from the start of the segment.
	int ichLastClose = ichMin;
	// This indicates the character position where the pending tags need to be drawn.
	int ichPending = ichMin;

	// We are interested in boundaries between tagging. If this segment starts at 0, we begin by
	// marking a start label of all unhidden tags for the first character. Otherwise, we
	// initialize with the tagging properties of the character before the first of interest, and
	// ichMin get tags only if different from the previous character.
	// This code sets qttp to the properties of the first character, and vtiPending to the
	// opening tags, if any, that need to be drawn at the very start of the segment.
	if (ichMin == 0)
	{
		// We need this info anyway as it may be used to compute end tags for the
		// next run.
		Source()->GetCharPropInfo(0, &ichMinRun, &ichLimRun, &isbt, &irun, &qttp, NULL);
		if (fAbove)
		{
			// The info we really want from this call is the qttp for the char offset.
			// Maybe someday make a more efficient routine that just gets that?
			irun = 0;
			FindGuidDiffs(qttp, NULL, pvo, vtiPending, ptsi);
		}
	}
	else
	{
		irun = 0;
		Source()->GetCharPropInfo(ichMin, &ichMinRun, &ichLimRun, &isbt, &irun, &qttp, NULL);
		if (ichMinRun == ichMin && fAbove)
		{
			// It is possible that we need opening tag info at the start of the segment.
			// Get the props of the previous character and see.
			irun2 = 0;
			Source()->GetCharPropInfo(ichMin - 1, &ichMinR


bc3 = bits.RotateLeft64(t, 21)
		t = a[4] ^ d4
		bc4 = bits.RotateLeft64(t, 14)
		a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3]
		a[1] = bc1 ^ (bc3 &^ bc2)
		a[2] = bc2 ^ (bc4 &^ bc3)
		a[3] = bc3 ^ (bc0 &^ bc4)
		a[4] = bc4 ^ (bc1 &^ bc0)

		t = a[5] ^ d0
		bc2 = bits.RotateLeft64(t, 3)
		t = a[6] ^ d1
		bc3 = bits.RotateLeft64(t, 45)
		t = a[7] ^ d2
		bc4 = bits.RotateLeft64(t, 61)
		t = a[8] ^ d3
		bc0 = bits.RotateLeft64(t, 28)
		t = a[9] ^ d4
		bc1 = bits.RotateLeft64(t, 20)
		a[5] = bc0 ^ (bc2 &^ bc1)
		a[6] = bc1 ^ (bc3 &^ bc2)
		a[7] = bc2 ^ (bc4 &^ bc3)
		a[8] = bc3 ^ (bc0 &^ bc4)
		a[9] = bc4 ^ (bc1 &^ bc0)

		t = a[10] ^ d0
		bc4 = bits.RotateLeft64(t, 18)
		t = a[11] ^ d1
		bc0 = bits.RotateLeft64(t, 1)
		t = a[12] ^ d2
		bc1 = bits.RotateLeft64(t, 6)
		t = a[13] ^ d3
		bc2 = bits.RotateLeft64(t, 25)
		t = a[14] ^ d4
		bc3 = bits.RotateLeft64(t, 8)
		a[10] = bc0 ^ (bc2 &^ bc1)
		a[11] = bc1 ^ (bc3 &^ bc2)
		a[12] = bc2 ^ (bc4 &^ bc3)
		a[13] = bc3 ^ (bc0 &^ bc4)
		a[14] = bc4 ^ (bc1 &^ bc0)

		t = a[15] ^ d0
		bc1 = bits.RotateLeft64(t, 36)
		t = a[16] ^ d1
		bc2 = bits.RotateLeft64(t, 10)
		t = a[17] ^ d2
		bc3 = bits.RotateLeft64(t, 15)
		t = a[18] ^ d3
		bc4 = bits.RotateLeft64(t, 56)
		t = a[19] ^ d4
		bc0 = bits.RotateLeft64(t, 27)
		a[15] = bc0 ^ (bc2 &^ bc1)
		a[16] = bc1 ^ (bc3 &^ bc2)
		a[17] = bc2 ^ (bc4 &^ bc3)
		a[18] = bc3 ^ (bc0 &^ bc4)
		a[19] = bc4 ^ (bc1 &^ bc0)

		t = a[20] ^ d0
		bc3 = bits.RotateLeft64(t, 41)
		t = a[21] ^ d1
		bc4 = bits.RotateLeft64(t, 2)
		t = a[22] ^ d2
		bc0 = bits.RotateLeft64(t, 62)
		t = a[23] ^ d3
		bc1 = bits.RotateLeft64(t, 55)
		t = a[24] ^ d4
		bc2 = bits.RotateLeft64(t, 39)
		a[20] = bc0 ^ (bc2 &^ bc1)
		a[21] = bc1 ^ (bc3 &^ bc2)
		a[22] = bc2 ^ (bc4 &^ bc3)
		a[23] = bc3 ^ (bc0 &^ bc4)
		a[24] = bc4 ^ (bc1 &^ bc0)
	}
}

func (k *KeccakBuiltinRunner) Include(include bool) {
	k.included = include
}

func (k *KeccakBuiltinRunner) Ratio() uint {
	return k.ratio
}

func (k *KeccakBuiltinRunner) CellsPerInstance() uint {
	return KECCAK_CELLS_PER_INSTANCE
}

func (b *KeccakBuiltinRunner) InputCellsPerInstance() uint {
	return KECCAK_INPUT_CELLS_PER_INSTANCE
}

func (k *KeccakBuiltinRunner) GetAllocatedMemoryUnits(segments *memory.MemorySegmentManager, currentStep uint) (uint, error) {
	// This condition corresponds to an uninitialized ratio for the builtin, which should only
	// happen wh


f+0x4280>  // b.none
  44ccdc:	7100027f 	cmp	w19, #0x0
  44cce0:	5400006d 	b.le	44ccec <_IO_vfscanf+0x1c3c>
  44cce4:	71000673 	subs	w19, w19, #0x1
  44cce8:	540203c0 	b.eq	450d60 <_IO_vfscanf+0x5cb0>  // b.none
  44ccec:	a9408740 	ldp	x0, x1, [x26, #8]
  44ccf0:	eb01001f 	cmp	x0, x1
  44ccf4:	5400ff22 	b.cs	44ecd8 <_IO_vfscanf+0x3c28>  // b.hs, b.nlast
  44ccf8:	91000401 	add	x1, x0, #0x1
  44ccfc:	f9000741 	str	x1, [x26, #8]
  44cd00:	39400015 	ldrb	w21, [x0]
  44cd04:	f9408fa0 	ldr	x0, [x29, #280]
  44cd08:	91000718 	add	x24, x24, #0x1
  44cd0c:	f9403400 	ldr	x0, [x0, #104]
  44cd10:	7875d800 	ldrh	w0, [x0, w21, sxtw #1]
  44cd14:	366fe520 	tbz	w0, #13, 44c9b8 <_IO_vfscanf+0x1908>
  44cd18:	f90067b7 	str	x23, [x29, #200]
  44cd1c:	d1000718 	sub	x24, x24, #0x1
  44cd20:	12001ea1 	and	w1, w21, #0xff
  44cd24:	aa1a03e0 	mov	x0, x26
  44cd28:	97ff0066 	bl	40cec0 <_IO_sputbackc>
  44cd2c:	35ff2974 	cbnz	w20, 44b258 <_IO_vfscanf+0x1a8>
  44cd30:	f94067a0 	ldr	x0, [x29, #200]
  44cd34:	b94113a1 	ldr	w1, [x29, #272]
  44cd38:	91001013 	add	x19, x0, #0x4
  44cd3c:	b900001f 	str	wzr, [x0]
  44cd40:	52842000 	mov	w0, #0x2100                	// #8448
  44cd44:	6a00003f 	tst	w1, w0
  44cd48:	54000140 	b.eq	44cd70 <_IO_vfscanf+0x1cc0>  // b.none
  44cd4c:	f94083b4 	ldr	x20, [x29, #256]
  44cd50:	f9406ba2 	ldr	x2, [x29, #208]
  44cd54:	f9400280 	ldr	x0, [x20]
  44cd58:	cb000261 	sub	x1, x19, x0
  44cd5c:	eb81085f 	cmp	x2, x1, asr #2
  44cd60:	54000080 	b.eq	44cd70 <_IO_vfscanf+0x1cc0>  // b.none
  44cd64:	97ff1c11 	bl	413da8 <__libc_realloc>
  44cd


an 插件：TimeDiff plugin

> [!Note] 插件名片
> - 插件名称：TimeDiff plugin
> - 插件作者：Grzegorz Dominiczak
> - 插件说明：在“timediff” markdown 块中计算并显示两个日期之间的小时和分钟差异
> - 插件分类：[' 数据处理 ', ' 时间 ', 'obsidian 插件 ']
> - 项目地址：[点我访问](https://github.com/dominiczaq/obsidian-plugin-time-diff)
> - 国内下载地址：[下载安装](https://pkmer.cn/products/plugin/pluginMarket/?obsidian-plugin-time-diff)
> - 自述文件：[Readme](https://ghproxy.net/https://raw.githubusercontent.com/dominiczaq/obsidian-plugin-time-diff/master/README.md)

## 概述

Obsidian TimeDiff 插件可以在 `timediff` Markdown 块中计算并显示两个日期之间的小时和分钟差异。在阅读模式下，日期之间的差异将被解析并以可读格式呈现，同时在块的底部显示所有差异的总和。此外，该插件还提供了一些命令，包括计算当前文件中所有 `timediff` 块的总时间差异、在当前光标位置插入 `timediff` 块以及插入当前时间的功能。这个插件适用于需要在 Obsidian 中进行时间差异计算和记录的用户，能够有效解决时间计算和记录的问题。

> [!help]
> 这篇插件文章还没有人贡献，欢迎占坑！
> 如果您有好的想法欢迎提交 PR 或者文末留言。

---

---
uid: 20230703140246
title: Obsidian 插件:Contextual Typography 增强阅读模式样式
tags: [样式, 工具]
description:
author: cuman
type: basic
draft: false
editable: false
modified: 20230703144259
---

# Obsidian 插件:Contextual Typography 增强阅读模式样式

> [!Note] 插件名片
> - 插件名称：Contextual Typography
> - 插件作者：mgmeyers
> - 插件说明：在阅读模式中，该插件为所有顶级 div 添加了一个 data-tag-name 属性，其中包含子标签的名称，为自定义 css 实现更精准的选择控制。
> - 插件分类：样式工具
> - 插件项目地址：[点我访问](https://github.com/mgmeyers/obsidian-contextual-typography)
> - 国内下载地址：[下载安装](https://pkmer.cn/products/plugin/pluginMarket/?obsidian-contextual-typography)

## 概述

这个插件属于高级辅助插件，但使用起来非常简单。因为没有任何设置项，开启后对 Obsidian 本身也没有


 = triggering_plan_id.unwrap_or("intent-lifecycle-manager");
│----
│            chain.log_intent_status_change(
│                &plan_id.to_string(),
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│            storage,
│----
│            None, // causal_chain - will be added when IntentGraph has access
│            &mut intent,
│----
<environment_details>
# VSCode Visible Files
../../../../../response_c431a1b9-dc41-4b91-923c-8aa0bd2fc2a6/tools-7
../../../../../response_c431a1b9-dc41-4b91-923c-8aa0bd2fc2a6/tools-6
../../../../../response_c431a1b9-dc41-4b91-923c-8aa0bd2fc2a6/tools-4
../../../../../response_c431a1b9-dc41-4b91-923c-8aa0bd2fc2a6/tools-2
../../../../../response_c431a1b9-dc41-4b91-923c-8aa0bd2fc2a6/tools-1
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-0
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-1
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-2
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-3
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-4
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-5
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-5
../../../../../response_60246226-a1d4-4c2f-a2cf-15a2bfaedef9/tools-2
../../../../../response_60246226-a1d4-4c2f-a2cf-15a2bfaedef9/tools-1
../../../../../response_60246226-a1d4-4c2f-a2cf-15a2bfaedef9/tools-0
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/6
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tools-4
../../../../../response_ce5d55c9-5b06-4e90-bddb-8d74f079dc3f/tool


0330621,76.2128728 L69.0330562,76.212888 Z" id="Shadow" fill-opacity="0.16" fill="#000000" fill-rule="evenodd"></path>
								<g id="Hair" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(40.000000, 19.000000)">
									<mask id="react-mask-84832" fill="white">
										<use xlink:href="#react-path-84834"></use>
									</mask>
									<use id="Combined-Shape" fill="#E6E6E6" xlink:href="#react-path-84834"></use>
									<g id="Hairs/Colors" mask="url(#react-mask-84832)" fill="$colorHex">
										<g transform="translate(0.000000, 0.000000) " id="Color">
											<rect x="0" y="0" width="264" height="280"></rect>
										</g>
									</g>
								</g>
							</g>
						</g>
					</g>
''',
      "Its not short": '''
<g id="Top" stroke-width="1" fill-rule="evenodd">
						<defs>
							<rect id="react-path-85463" x="0" y="0" width="264" height="280"></rect>
							<path d="M59,102.340285 C59,118.921045 59,145.474283 59,182 C59,186.418278 62.581722,190 67,190 L109,190 L109,180.610951 C91.4692178,172.282984 78.9518066,155.114792 77.2085808,134.867187 C71.4308707,134.002364 67,129.018625 67,123 L67,110 C67,106.509412 68.4903619,103.366917 70.8694649,101.174135 C82.4088376,98.5552525 94.9706808,93.6376395 107.341516,86.4953343 C119.473269,79.4910638 129.843979,71.2579416 137.820938,62.752196 C134.394107,70.6604321 130.244513,77.5880409 125.372156,83.5350224 C138.047336,78.0120855 146.677812,69.1324394 151.263585,56.8960843 C151.64142,57.8180234 152.034942,58.738913 152.444252,59.6582378 C162.699828,82.6926393 180.317578,99.018563 198.205873,104.403108 C198.718861,106.513486 199,108.48395 199,110 L199,123 C199,129.018625 194.569129,134.002364 188.791419,134.867187 C187.048193,155.114792 174.530782,172.282984 157,180.610951 L157,190 L175,190 C192.673112,190 207,175.673112 207,158 C207,133.944314 207,115.902549 207,103.874706 C207,103.807916 206.990567,103.721208 206.971823,103.615272 C206.82774,91.3536714 206.623862,84.2237818 206.360189,82.2256031 C201.576875,45.9764505 170.555563,18 133,18 C96.9151011,18 66.8627142,43.8282542 60,78 C54.4771525,78 50,83.5964406 50,90.5 C50,95.0507583 51.6949619,99.1431718 54.8534901,101.273154 C55.7582038,101.883256 57.323834,102.197638 58.9999994,102.340287 Z" id="react-path-85464"></path>
						</defs>


on} for details

     *
Range of valid values:

     * >= 0

     *
Optional - The value for this key may be {@code null} on some devices.

     *
Full capability -
     * Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key

     *
     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
     * @see CaptureRequest#LENS_FOCAL_LENGTH
     * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
     * @see CaptureResult#LENS_STATE
     */
    @PublicKey
    @NonNull
    public static final Key<Float> LENS_FOCUS_DISTANCE =
            new Key<Float>("android.lens.focusDistance", float.class);

    /**
     *
Sets whether the camera device uses optical image stabilization (OIS)
     * when capturing images.

     *
OIS is used to compensate for motion blur due to small
     * movements of the camera during capture. Unlike digital image
     * stabilization ({@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE android.control.videoStabilizationMode}), OIS
     * makes use of mechanical elements to stabilize the camera
     * sensor, and thus allows for longer exposure times before
     * camera shake becomes apparent.

     *
Switching between different optical stabilization modes may take several
     * frames to initialize, the camera device will report the current mode in
     * capture result metadata. For example, When "ON" mode is requested, the
     * optical stabilization modes in the first several capture results may still
     * be "OFF", and it will become "ON" when the initialization is done.

     *
If a camera device supports both OIS and digital image stabilization
     * ({@link CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE android.control.videoStabilizationMode}), turning both modes on may produce undesirable
     * interaction, so it is recommended not to enable both at the same time.

     *
Not all devices will support OIS; see
     * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization} for
     * available controls.

     *
Possible values:
     *

     *
{@link #LENS_OPTICAL_STABILIZATION_MODE_OFF OFF}

     *
{@link #LENS_OPTICAL_STABILIZATION_MODE_ON ON}

     *

     *
Available values for this device:

     * {@link CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION android.lens.info.availableOpticalStabilization}

     *
Optional - The value for this key may be {@code null} on some devices.

     *
Limited capability -
     * Present on all camera devices that report being at least {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED HARDWARE_LEVEL_LIMITED} devices in the
     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key

     *
     * @see CaptureRequest#CONTROL_VIDEO_STABILIZATION_MODE
     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_OPTICAL_


temp = uicFindTabstop(reg);
    }

    if (temp != NULL)
    {
        atom = (featom *)temp->userID;
        switch (atom->type)
        {
            case FA_Button:
            case FA_CheckBox:
            case FA_ToggleButton:
                if (((buttonhandle)temp)->processFunction(temp, temp->userID, CM_ButtonClick, 0)==RPR_Redraw)
                {
#ifdef DEBUG_STOMP
                    regVerify(temp);
#endif
//                    temp->status |= RSF_DrawThisFrame;
                    regRecursiveSetDirty(temp);
                }
                break;
            case FA_TextEntry:
                ((textentryhandle)((featom *)temp->userID)->pData)->message = CM_GainFocus;
                bitSet(temp->status, RSF_KeyCapture);
                keyBufferClear();
                regKeysFocussed = TRUE;
                feFunctionExecute(((featom *)temp->userID)->name, (featom *)temp->userID, FALSE);
                break;
            default:
                dbgMessagef("\nuicReturnProcess: don't know how to handle return for atom of type 0x%x", atom->type);
        }
    }

    return 0;
}

/*-----------------------------------------------------------------------------
    Name        : uicEscProcess
    Description : Activates the default back button
    Inputs      : reg - callback region   (other variables are placeholders)
    Outputs     : "back" button callback
    Return      : 0 (placeholder)
----------------------------------------------------------------------------*/
udword uicEscProcess(struct tagRegion *reg, sdword num_buttons, udword event, udword data)
{
    struct tagRegion *temp;

    uicFocusToKeyboard();

    temp = uicFindFlag(reg, FAF_DefaultBack, ATOM_FLAG);

    if (temp != NULL)
    {
        ((buttonhandle)temp)->processFunction(temp, temp->userID, CM_ButtonClick, 0);
        soundEvent(NULL, UI_Click);
    }

    return 0;
}

/*-----------------------------------------------------------------------------
    Name        : uicHomeProcess
    Description : Changes the glabal tabstop variable when the Home key
                  is pressed
    Inputs      : num_buttons   (other variables are placeholders)
    Outputs     : tabstop = 1
    Return      : 0 (placeholer)
----------------------------------------------------------------------------*/
udword uicHomeProcess(struct tagRegion *reg, sdword num_buttons, udword event, udword data)
{
    struct tagRegion *temp;

    uicFocusToKeyboard();

    uicClearCurrent(reg);
    feTabStop = 1;
    temp = uicFindTabstop(reg);
    uicSetCurrent(temp, TRUE);
    return 0;
}

/*-----------------------------------------------------------------------------
    Name        : uicEndProcess
    Description : Changes the glabal tabstop variable when the End key
                  is pressed
    Inputs      : num_buttons   (other variables are placeholders)
    Outputs     : tabstop = num_buttons
    Return      : 0 (placeholer)
----------------------------------------------------------------------------*/
udword uicEndProcess(struct tagRegion *reg, sdword num_buttons, udword event, udword data)
{
    struct tagRegion *temp;

    uicFocusToKeyboard();

    uicClearCurrent(reg);
    feTabStop = num_buttons;
    temp = uicFindTabstop(reg);
    uicSetCurrent(temp, TRUE);
    return 0;
}


Y_3_0_0_BETA1))) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_5_7 + "/" + GROOVY_3_0_0_BETA1 + " or newer. No 2.6 version is supported.");
            }
        } else if ("12".equals(targetBytecode) || "11".equals(targetBytecode) || "10".equals(targetBytecode)) {
            if (groovyOlderThan(GROOVY_2_5_3) || (groovyAtLeast(GROOVY_2_6_0_ALPHA1) && groovyOlderThan(GROOVY_3_0_0_ALPHA4))) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_5_3 + "/" + GROOVY_3_0_0_ALPHA4 + " or newer. No 2.6 version is supported.");
            }
        } else if ("9".equals(targetBytecode) || "1.9".equals(targetBytecode)) {
            if (!isGroovyIndy() && (groovyOlderThan(GROOVY_2_5_3)
                    || (groovyAtLeast(GROOVY_2_6_0_ALPHA1) && groovyOlderThan(GROOVY_2_6_0_ALPHA4))
                    || (groovyAtLeast(GROOVY_3_0_0_ALPHA1) && groovyOlderThan(GROOVY_3_0_0_ALPHA2)))) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_5_3 + "/" + GROOVY_2_6_0_ALPHA4 + "/" + GROOVY_3_0_0_ALPHA2 + " or newer.");
            } else if (isGroovyIndy() && (groovyOlderThan(GROOVY_2_5_3) || (groovyAtLeast(GROOVY_2_6_0_ALPHA1) && groovyOlderThan(GROOVY_3_0_0_ALPHA4)))) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_5_3 + "/" + GROOVY_3_0_0_ALPHA4 + " or newer. No 2.6 version is supported.");
            }
        } else if ("8".equals(targetBytecode) || "1.8".equals(targetBytecode)) {
            if (groovyOlderThan(GROOVY_2_3_3)) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_3_3 + " or newer.");
            }
        } else if ("7".equals(targetBytecode) || "1.7".equals(targetBytecode) || "6".equals(targetBytecode) || "1.6".equals(targetBytecode)) {
            if (groovyOlderThan(GROOVY_2_1_3)) {
                throw new IllegalArgumentException("Target bytecode " + targetBytecode + " requires Groovy " + GROOVY_2_1_3 + " or newer.");
            }
        } else if (!"5".equals(targetBytecode) && !"1.5".equals(targetBytecode) && !"4".equals(targetBytecode) && !"1.4".equals(targetBytecode)) {
            throw new IllegalArgumentException("Unrecognized target bytecode: '" + targetBytecode + "'. This check can be skipped with 'skipBytecodeCheck', but this may result in a different target bytecode being used.");
        }
    }

    protected static String translateJavacTargetToTargetBytecode(String targetBytecode) {
        Map<String, String> javacTargetToTargetBytecode = new HashMap<>();
        javacTargetToTargetBytecode.put("5", "1.5");
        javacTargetToTargetBytecode.put("6", "1.6");
        javacTargetToTargetBytecode.put("7", "1.7");
        javacTargetToTargetBytecode.put("8", "1.8");
        javacTargetToTargetBytecode.put("1.9", "9");
        return javacTargetToTargetBytecode.getOrDefault(targetBytecode, targetBytecode);
    }

}
////////////////////////////////////////////////////////////////////////////////
// Copyright 2022 Prominic.NET, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the Licens


b.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180702_《网络安全思维导图》1.6拒绝服务供给与防御技术.png)

#### 20180701_《网络安全思维导图》1.5欺骗攻击及防御技术.png
![20180701_《网络安全思维导图》1.5欺骗攻击及防御技术.png](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180701_《网络安全思维导图》1.5欺骗攻击及防御技术.png)

#### 20180630_《网络安全思维导图》1.4口令破解及防御技术.png
![20180630_《网络安全思维导图》1.4口令破解及防御技术.png](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180630_《网络安全思维导图》1.4口令破解及防御技术.png)

#### 20180629_《网络安全思维导图》1.3网络监听及防御技术.png
![20180629_《网络安全思维导图》1.3网络监听及防御技术.png](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180629_《网络安全思维导图》1.3网络监听及防御技术.png)

#### 20180628_《网络安全思维导图》1.2扫描与防御技术.png
![20180628_《网络安全思维导图》1.2扫描与防御技术.png](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180628_《网络安全思维导图》1.2扫描与防御技术.png)

#### 20180627_《网络安全思维导图》1.1网络安全绪论.png
![20180627_《网络安全思维导图》1.1网络安全绪论.png](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180627_《网络安全思维导图》1.1网络安全绪论.png)

#### 20180613_如何建立一个完整的企业财务模型_贝乐斯.JPG
![20180613_如何建立一个完整的企业财务模型_贝乐斯.JPG](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180613_如何建立一个完整的企业财务模型_贝乐斯.JPG)

#### 20180608_things工作流.jpg
![20180608_things工作流.jpg](https://github.com/iHTCboy/OneMindMap/raw/master/MindMapImages/20180608_things工作流.jpg)


O, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

// This benchmark is based on a JavaScript log processing module used
// by the V8 profiler to generate execution time profiles for runs of
// JavaScript applications, and it effectively measures how fast the
// JavaScript engine is at allocating nodes and reclaiming the memory
// used for old nodes. Because of the way splay trees work, the engine
// also has to deal with a lot of changes to the large tree object
// graph.

module SplayVERSION {

    // Configuration.
    var kSplayTreeSize = 8000;
    var kSplayTreeModifications = 80;
    var kSplayTreePayloadDepth = 5;

    var splayTree:SplayTree = null;

    function GeneratePayloadTree(depth, tag) {
        if (depth == 0) {
            return <any>{
                array: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
                string: 'String for key ' + tag + ' in leaf node'
            };
        } else {
            return <any> {
                left: GeneratePayloadTree(depth - 1, tag),
                right: GeneratePayloadTree(depth - 1, tag)
            };
        }
    }

    function GenerateKey() {
        // The benchmark framework guarantees that Math.random is
        // deterministic; see base.js.
        return Math.random();
    }

    function InsertNewNode() {
        // Insert new node with a unique key.
        var key:number = -1;
        do {
            key = GenerateKey();
        } while (splayTree.find(key) != null);
        var payload = GeneratePayloadTree(kSplayTreePayloadDepth, String(key));
        splayTree.insert(key, payload);
        return key;
    }

    export function SplaySetup() {
        splayTree = new SplayTree();
        for (var i = 0; i < kSplayTreeSize; i++) InsertNewNode();
    }

    export function SplayTearDown() {
        // Allow the garbage collector to reclaim the memory
        // used by the splay tree no matter how we exit the
        // tear down function.
        var keys = splayTree.exportKeys();
        splayTree = null;

        // Verify that the splay tree has the right size.
        var length = keys.length;
        if (length != kSplayTreeSize) {
            throw new Error("Splay tree has wrong size");
        }

        // Verify that the splay tree has sorted, unique keys.
        for (var i = 0; i < length - 1; i++) {
            if (keys[i] >= keys[i + 1]) {
                throw new Error("Splay tree not sorted");
            }
        }
    }

    export function SplayRun() {
        // Replace a few nodes in the splay tree.
        for (var i = 0; i < kSplayTreeModifications; i++) {
            var key = InsertNewNode();
            var greatest = splayTree.findGreatestLessThan(key);
            if (greatest == null) splayTree.remove(key);
            else splayTree.remove(greatest.key);
        }
    }

    /**
     * Constructs a Splay tree.  A splay tree is a self-balancing binary
     * search tree with the additional property that recently accessed
     * elements are quick to access again. It performs basic operations
     * such as insertion, look-up and removal in O(log(n)) amortized time.
     *
     * @constructor
     */
    class SplayTree {
        constructor() {}

        /**
         * Pointer to the root node of the tree.
         *
         * @type {SplayTree.Node}
         * @private
         */
        private root_ : SplayTreeNode = null;

        /**
         * @return {boolean} Whether the tree is empty.
         */
        public isEmpty() {


                        Container(
                            padding: EdgeInsets.only(right: 6),
                            child: Text(
                              widget.title,
                              style: BrnFormUtil.getHeadTitleTextStyle(
                                  widget.themeData!,
                                  isBold: true),
                            )),
                        RotationTransition(
                          turns: _iconTurns,
                          child: arrowIcon,
                        ),
                      ],
                    ),
                  ),
                ),
                Offstage(
                  offstage: widget.deleteText == null,
                  child: GestureDetector(
                    onTap: () {
                      if (widget.callback != null) {
                        widget.callback!();
                      }
                    },
                    child: Container(
                      padding: EdgeInsets.only(top: 14, right: 20),
                      child: Text(
                        widget.deleteText ?? "",
                        style: TextStyle(
                          color: Color(0xFFFA3F3F),
                          fontSize: BrnFonts.f16,
                        ),
                      ),
                    ),
                  ),
                ),
              ],
            ),
          ),

          // 副标题
          Container(
            alignment: Alignment.centerLeft,
            padding: EdgeInsets.only(left: 20, top: 4, bottom: 14),
            child: Offstage(
              offstage: (widget.subtitle == null || widget.subtitle!.isEmpty),
              child: Text(
                widget.subtitle ?? "",
                style: BrnFormUtil.getSubTitleTextStyle(widget.themeData!),
              ),
            ),
          ),

          /// 可展开收起项
          Container(
            child: ClipRect(
              child: Align(
                heightFactor: _heightFactor.value,
                child: child,
              ),
            ),
          ),
        ],
      ),
    );
  }

  @override
  void didChangeDependencies() {
    final ThemeData theme = Theme.of(context);

    _borderColorTween..end = theme.dividerColor;

    /// title 文字颜色
    _headerColorTween
      ..begin = theme.textTheme.titleMedium!.color
      ..end = theme.textTheme.titleMedium!.color;

    /// 展开收起图标颜色
    _iconColorTween
      ..begin = theme.unselectedWidgetColor
      ..end = theme.unselectedWidgetColor;

    _backgroundColorTween..end = widget.backgroundColor;
    super.didChangeDependencies();
  }

  @override
  Widget build(BuildContext context) {
    final bool closed = !_isExpanded && _controller.isDismissed;
    return AnimatedBuilder(
      animation: _controller.view,
      builder: _buildHeader,
      child: closed ? null : Column(children: widget.children),
    );
  }
}
import 'package:bruno/src/components/selection/bean/brn_selection_common_entity.dart';
import 'package:bruno/src/components/selection/brn_selection_util.dart';
import 'package:bruno/src/constants/brn_asset_constants.dart';
import 'package:bruno/src/theme/configs/brn_selection_config.dart';
import 'package:bruno/src/utils/brn_tools.dart';
import 'package:bruno/src/utils/css/brn_css_2_text.dart';
import 'package:flutter/material.dart';

/// [BrnSelectionSingleListWidget] 子组件中的单项
class BrnSelectionCommonItemWidget extends StatelessWidget {

  /// 单项数据
  final BrnSelectionEntity item;

  /// 背景色
  final Color? backgroundColor;

  /// 选中项背景色
  final Color? selectedBackgroundColor;

  /// 是否当前焦点
  final bool isCurrentFocused;

  /// 是否是第一级
  final bool isFirstLevel;

  /// 是否是多选列表类型


f\u6cbb\u90e8\u526f\u4e3b\u4efb\u8c22\u80dc\u5764\u51fa\u5e2d\u4e86\u4f1a\u8bae\u3002\u8be5\u7ec4\u7ec7\u5934\u5934\u4e3a\u5eb7\u70b3\u6210\u3001\u674e\u6548\u87fe\u3001\u5468\u6587\u660c\u7b49\u4eba\u3002", "type": "paragraph"}, {"text": "\u5168\u5e02\u793e\u6559\u5de5\u4f5c\u56e2\u5168\u4f53\u4eba\u5458\u96c6\u4e2d\uff0c\u63ed\u6279\u201c\u7701\u3001\u5e02\u59d4\u5728\u793e\u6559\u8fd0\u52a8\u4e2d\u6267\u884c\u7684\u8d44\u4ea7\u9636\u7ea7\u53cd\u52a8\u8def\u7ebf\u201d\u3002", "type": "paragraph"}, {"text": "\u201c\u5e02\u7ea7\u673a\u5173\u9769\u547d\u9020\u53cd\u603b\u90e8\u201d\u5728\u4e2d\u5c71\u4e1c\u8def\u4f53\u80b2\u9986\u53ec\u5f00\u201c\u5f7b\u5e95\u6279\u5224\u65e7\u5e02\u59d4\u63a8\u884c\u7684\u8d44\u4ea7\u9636\u7ea7\u53cd\u52a8\u8def\u7ebf\u8a93\u5e08\u5927\u4f1a\u201d\u3002", "type": "paragraph"}, {"text": "\u5357\u5927\u201c\u516b\u4e8c\u4e03\u201d\u51fa\u52a8\u6570\u767e\u4eba\u6363\u6bc1\u201c\u5357\u4eac\u5e02\u7ea2\u536b\u5175\u8b66\u5907\u7ea0\u5bdf\u961f\u201d\u961f\u90e8\u3002", "type": "paragraph"}, {"text": "\u4e8c\u5341\u4e09\u65e5\uff1a", "type": "appellation"}, {"text": "\u5357\u5de5\u201c\u4e1c\u65b9\u7ea2\u201d\u7b49\u9020\u53cd\u7ec4\u7ec7\u51b2\u7838\u5357\u5de5\u201c\u4e03\u4e00\u6218\u6597\u56e2\u201d\u548c\u201c\u638c\u63e1\u6597\u4e89\u5927\u65b9\u5411\u603b\u90e8\u201d\u3002", "type": "paragraph"}, {"text": "\u4e8c\u5341\u56db\u65e5\uff1a", "type": "appellation"}, {"text": "\u5357\u4e


#{{{ csv
@bottle.route('/csv')
def get_csv():
    config = get_config()
    query = get_query(config)
    query['page'] = 0
    query['snippets'] = 0
    qs = query_to_recoll_string(query)
    bottle.response.headers['Content-Type'] = 'text/csv'
    bottle.response.headers['Content-Disposition'] = \
      'attachment; filename=recoll-%s.csv' % normalise_filename(qs)
    res, nres, timer = recoll_search(query)
    si = io.StringIO()
    cw = csv.writer(si)
    fields = config['csvfields'].split()
    cw.writerow(fields)
    for doc in res:
        row = []
        for f in fields:
            if f in doc:
                row.append(doc[f])
            else:
                row.append('')
        cw.writerow(row)
    return si.getvalue().strip("\r\n")
#}}}
#{{{ settings/set
@bottle.route('/settings')
@bottle.view('settings')
def settings():
    return get_config()

@bottle.route('/set')
def set():
    config = get_config()
    for k, v in DEFAULTS.items():
        bottle.response.set_cookie(k, str(bottle.request.query.get(k)),
                                   max_age=3153600000, expires=315360000)
    for d in config['dirs']:
        # We should not set the cookie if the value is the default (identical path). This would
        # allow the server configuration setting to be used if set. This would also show a wrong
        # value in the settings screen (default instead of server config value), so not too sure
        # what the right thing would be here.
        cookie_name = 'mount_%s' % urlquote(d, '')
        bottle.response.set_cookie(cookie_name, str(bottle.request.query.get('mount_%s' % d)),
                                   max_age=3153600000, expires=315360000)
    bottle.redirect('./')
#}}}
#{{{ osd
@bottle.route('/osd.xml')
@bottle.view('osd')
def main():
    #config = get_config()
    url = bottle.request.urlparts
    url = '%s://%s' % (url.scheme, url.netloc)
    return {'url': url}
#}}}
# vim: fdm=marker:tw=80:ts=4:sw=4:sts=4:et


// RUN: llvm-mc -triple amdgcn-amd-amdhsa < %s | FileCheck --check-prefix=ASM %s

// ASM: .set occupancy_init_one, 1
// ASM: .set occupancy_init_seven, 7
// ASM: .set occupancy_init_eight, 8

.set occupancy_init_one, occupancy(0, 0, 0, 0, 1, 0, 0)
.set occupancy_init_seven, occupancy(0, 0, 0, 0, 7, 0, 0)
.set occupancy_init_eight, occupancy(0, 0, 0, 0, 8, 0, 0)

// ASM: .set occupancy_numsgpr_seaisle_ten, 10
// ASM: .set occupancy_numsgpr_seaisle_nine, 9
// ASM: .set occupancy_numsgpr_seaisle_eight, 8
// ASM: .set occupancy_numsgpr_seaisle_seven, 7
// ASM: .set occupancy_numsgpr_seaisle_six, 6
// ASM: .set occupancy_numsgpr_seaisle_five, 5

.set occupancy_numsgpr_seaisle_ten, occupancy(0, 0, 0, 6, 11, 1, 0)
.set occupancy_numsgpr_seaisle_nine, occupancy(0, 0, 0, 6, 11, 49, 0)
.set occupancy_numsgpr_seaisle_eight, occupancy(0, 0, 0, 6, 11, 57, 0)
.set occupancy_numsgpr_seaisle_seven, occupancy(0, 0, 0, 6, 11, 65, 0)
.set occupancy_numsgpr_seaisle_six, occupancy(0, 0, 0, 6, 11, 73, 0)
.set occupancy_numsgpr_seaisle_five, occupancy(0, 0, 0, 6, 11, 81, 0)

// ASM: .set occupancy_numsgpr_gfx9_ten, 10
// ASM: .set occupancy_numsgpr_gfx9_nine, 9
// ASM: .set occupancy_numsgpr_gfx9_eight, 8
// ASM: .set occupancy_numsgpr_gfx9_seven, 7

.set occupancy_numsgpr_gfx9_ten, occupancy(0, 0, 0, 8, 11, 1, 0)
.set occupancy_numsgpr_gfx9_nine, occupancy(0, 0, 0, 8, 11, 81, 0)
.se


府编制移民安置规划大纲，按照审批权限报省、自治区、直辖市人民政府或者国务院移民管理机构审批。

第七条 移民安置规划大纲应当根据工程占地和淹没区实物调查结果以及移民区、移民安置区经济社会情况和资源环境承载能力编制。

工程占地和淹没区实物调查，由项目主管部门或者项目法人会同工程占地和淹没区所在地的地方人民政府实施；实物调查应当全面准确，调查结果经调查者和被调查者签字认可并公示后，由有关地方人民政府签署意见。实物调查工作开始前，工程占地和淹没区所在地的省级人民政府应当发布通告，禁止在工程占地和淹没区新增建设项目和迁入人口，并对实物调查工作作出安排。

第八条 移民安置规划大纲应当主要包括移民安置的任务、去向、标准和农村移民生产安置方式以及移民生活水平评价和搬迁后生活水平预测、水库移民后期扶持政策、淹没线以上受影响范围的划定原则、移民安置规划编制原则等内容。

第九条 编制移民安置规划大纲应当广泛听取移民和移民安置区居民的意见；必要时，应当采取听证的方式。

经批准的移民安置规划大纲是编制移民安置规划的基本依据，应当严格执行，不得随意调整或者修改；确需调整或者修改的，应当报原批准机关批准。

第十条 已经成立项目法人的，由项目法人根据经批准的移民安置规划大纲编制移民安置规划；没有成立项目法人的，项目主管部门应当会同移民区和移民安置区县级以上地方人民政府，根据经批准的移民安置规划大纲编制移民安置规划。

大中型水利水电工程的移民安置规划，按照审批权限经省、自治区、直辖市人民政府移民管理机构或者国务院移民管理机构审核后，由项目法人或者项目主管部门报项目审批或者核准部门，与可行性研究报告或者项目申请报告一并审批或者核准。

省、自治区、直辖市人民政府移民管理


close"   >

<svg version="1.1" xmlns="//www.w3.org/2000/svg" width="30" height="30" viewBox="0 0 30 30" xml:space="preserve" preserveAspectRatio="none" fill="#878787" class="cp-target">
<path d="M24.375 0c3.105 0 5.625 2.52 5.625 5.625v18.75c0 3.105-2.52 5.625-5.625 5.625h-3.672v-11.621h3.887l0.586-4.531h-4.473v-2.891c0-1.309 0.352-2.188 2.246-2.188l2.383-0.020v-4.043c-0.41-0.059-1.836-0.176-3.477-0.176-3.457 0-5.84 2.109-5.84 5.977v3.34h-3.906v4.531h3.906v11.621h-10.391c-3.105 0-5.625-2.52-5.625-5.625v-18.75c0-3.105 2.52-5.625 5.625-5.625h18.75z"></path>
</svg>

Follow us on Facebook

		<input type="hidden" name="param[date]" value="December 13, 2024" />
		<input type='text' class='cpro-hp-field' name='cpro_hp_feedback_field_23516' value=''>
		<input type="hidden" name="action" value="cp_v2_add_subscriber" />
		<input type="hidden" name="style_id" value="23516" />
						</form>


vrcp14ps	xmm6{k7}, [edx-516]{1to4}	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, ymm5	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}{z}, ymm5	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, YMMWORD PTR [ecx]	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, YMMWORD PTR [esp+esi*8-123456]	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, [eax]{1to8}	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, YMMWORD PTR [edx+4064]	 # AVX512{F,VL} Disp8
	vrcp14ps	ymm6{k7}, YMMWORD PTR [edx+4096]	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, YMMWORD PTR [edx-4096]	 # AVX512{F,VL} Disp8
	vrcp14ps	ymm6{k7}, YMMWORD PTR [edx-4128]	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, [edx+508]{1to8}	 # AVX512{F,VL} Disp8
	vrcp14ps	ymm6{k7}, [edx+512]{1to8}	 # AVX512{F,VL}
	vrcp14ps	ymm6{k7}, [edx-512]{1to8}	 # AVX512{F,VL} Disp8
	vrcp14ps	ymm6{k7}, [edx-516]{1to8}	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, xmm5	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}{z}, xmm5	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [ecx]	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [esp+esi*8-123456]	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, [eax]{1to2}	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [edx+2032]	 # AVX512{F,VL} Disp8
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [edx+2048]	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [edx-2048]	 # AVX512{F,VL} Disp8
	vrsqrt14pd	xmm6{k7}, XMMWORD PTR [edx-2064]	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, [edx+1016]{1to2}	 # AVX512{F,VL} Disp8
	vrsqrt14pd	xmm6{k7}, [edx+1024]{1to2}	 # AVX512{F,VL}
	vrsqrt14pd	xmm6{k7}, [edx-1024]{1to2}	 # AVX512{F,VL} Disp8
	vrsqrt14pd	xmm6{k7}, [edx-1032]{1to2}	 # AVX512{F,VL}
	vrsqrt14pd	ymm6{k7}, ymm5	 # AVX512{F,VL}
	vrsqrt14pd	ymm6{k7}{z}, ymm5	 # AVX512{F,VL}
	vrsqrt14pd	ymm6{k7}, YMMWORD PTR [ecx]


       + "Remove possible extra code from main()", rivi.toLowerCase().contains("pek") || rivi.toLowerCase().contains("bri"));
            assertFalse("Print only one card info per line. Now you print line " + rivi, rivi.toLowerCase().contains("pek") && rivi.toLowerCase().contains("bri"));
        }
        ArrayList<String> pekka = new ArrayList<String>();
        ArrayList<String> matti = new ArrayList<String>();
        for (String rivi : rivit) {
            if (rivi.toLowerCase().contains("bri")) {
                matti.add(rivi);
            } else if (rivi.toLowerCase().contains("pek")) {
                pekka.add(rivi);
            }
        }

        tarkastaMatinRivit(matti);
        tarkastaPekanRivit(pekka);
    }

    private void tarkastaMatinRivit(ArrayList<String> rivi) {
        String virhe = "Check that your programs output is simillar to the example. Noy you print ";

        assertEquals("Brian's card info should be printed 3 times ", 3, rivi.size());

        assertTrue(virhe + rivi.get(0), rivi.get(0).contains("27.5"));
        assertTrue(virhe + rivi.get(1), rivi.get(1).contains("23.5"));
        assertTrue(virhe + rivi.get(2), rivi.get(2).contains("73.5"));
    }

    private void tarkastaPekanRivit(ArrayList<String> rivi) {
        assertEquals("Pekka's card info should be printed 3 times", 3, rivi.size());

        String virhe = "Check that your programs output is simillar to the example. Noy you print ";
        assertTrue(virhe + rivi.get(0), rivi.get(0).contains("16.0"));
        assertTrue(virhe + rivi.get(1), rivi.get(1).contains("36.0"));
        assertTrue(virhe + rivi.get(2), rivi.get(2).contains("31.0"));
    }

    @Points("77.6")
    @Test
    public void noExtraVariables6() {
        saniteettitarkastus();
    }

    private void saniteettitarkastus() throws SecurityException {
        int n = 0+1;
        saniteettitarkastus(n, klassName);

    }

    private void saniteettitarkastus(int n, String m) throws SecurityException {
        Field[] kentat = ReflectionUtils.findClass(luokanNimi).getDeclaredFields();
        for (Field field : kentat) {
            assertFalse("does not need \"static variables\", remove " + kentta(field.toString()), field.toString().contains("static") && !field.toString().contains("final"));
            assertTrue("all the object variables should be private, please change " + kentta(field.toString()), field.toString().contains("private"));
        }
        if (kentat.length > 1) {
            int var = 0;
            for (Field field : kentat) {
                if (!field.toString().contains("final")) {
                    var++;
                    System.err.println("JAMO:fields");
                }
            }
            String s = n > 1 ? "s" : "";

            assertTrue("The class " + klassName + " needs instance variable" + s + " only for " + m + ", remove the rest", var <= n);

        }
    }

    /*
     * helpers
     */
    private void syo(String miten, Object card) throws Throwable {
        String method = "pay" + miten;

        String v = "\nFailure was caused by code lc = new LyyraCard(4); lc." + method + "()";

        klass.method(card, method)
                .returningVoid().takingNoParams().withNiceError(v).invoke();
    }


Proxy(Proxy.Type.HTTP, InetSocketAddress(address, port)))
            .connectTimeout(2, TimeUnit.SECONDS)
            .readTimeout(2, TimeUnit.SECONDS)
            .followRedirects(false)
            .build()

        Log.i(TAG, "Testing proxy $address:$port")

        try {
            val config = try {
                val configString = request(httpClient, "http://android.httptoolkit.tech/config")
                Klaxon().parse<ReceivedProxyConfig>(configString)!!
            } catch (e: ResponseException) {
                // If we connected but the response was bad, maybe we're reconnecting to an app
                // that isn't explicitly expecting an Android client. Retry requesting just the cert.
                val certString = request(httpClient, "http://amiusing.httptoolkit.tech/certificate")
                ReceivedProxyConfig(certString)
            }

            val foundCert = certFactory.generateCertificate(
                ByteArrayInputStream(config.certificate.toByteArray(Charsets.UTF_8))
            ) as X509Certificate
            val foundCertFingerprint = getCertificateFingerprint(foundCert)

            if (foundCertFingerprint == expectedFingerprint) {
                ProxyConfig(
                    address,
                    port,
                    foundCert
                )
            } else {
                throw CertificateException(
                    "Proxy returned mismatched certificate: '${
                    expectedFingerprint
                    }' != '$foundCertFingerprint' ($address)"
                )
            }
        } catch (e: Exception) {
            Log.i(TAG, "Error testing proxy address $address: $e")
            throw e
        }
    }
}

suspend fun request(httpClient: OkHttpClient, url: String): String {
    return withContext(Dispatchers.IO) {
        httpClient.newCall(Request.Builder().url(url).build()).execute().use { response ->
            if (response.code != 200) {
                throw ResponseException("Proxy responded with non-200: ${response.code}")
            }
            response.body!!.string()
        }
    }
}

fun getCertificateFingerprint(cert: X509Certificate): String {
    val md = MessageDigest.getInstance("SHA-256")
    md.update(cert.publicKey.encoded)
    val fingerprint = md.digest()
    return Base64.encodeToString(fingerprint, Base64.NO_WRAP)
}

/**
 * Does the device have a PIN/pattern/password set? Relevant because if not, the cert
 * setup will require the user to add one. This is best guess - not 100% accurate.
 */
fun isDeviceSecured(context: Context): Boolean {
    val keyguardManager = getSystemService(context, KeyguardManager::class.java)

    return when {
        // If we can't get a keyguard manager for some reason, assume there's no pin set
        keyguardManager == null -> false
        // If possible, accurately report device status
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> keyguardManager.isDeviceSecure
        // Imperfect but close though: also returns true if the device has a locked SIM card.
        else -> keyguardManager.isKeyguardSecure
    }
}

/**
 * Returns the name of the cert store (if the cert is trusted) or null (if not)
 */
fun whereIsCertTrusted(proxyConfig: ProxyConfig): String? {
    val keyStore = KeyStore.getInstance("AndroidCAStore")
    keyStore.load(null, null)

    val proxyCertData = proxyConfig.certificate.encoded

    val aliases = keyStore.aliases()

    val proxyCertAliases = aliases.toList().filter { alias ->
        val storedCert = keyStore.getCertificate(alias)
        val certData = storedCert?.encoded
        return@filter certData != null && certData.contentEquals(proxyCertData)
    }

    Log.i(TAG, "Proxy cert aliases: $proxyCertAliases")

    return when {
        proxyCertAliases.isEmpty() -> null
        proxyCertAliases.any { alias


wrong value can produce unexpected
 * malfunctions.
 */
export class BackgroundAction {

  /** <string> Unique id representing the action. */
  readonly id: string;

  /** <BackgroundAction.TYPE> Defines the kind of background action. */
  readonly type: BackgroundAction.TYPE;

  /**
   * <BackgroundAction.State> Marks if the action is waiting, on process or has
   * finished. Can't be null
   */
  state: BackgroundAction.STATE = BackgroundAction.STATE.ON_PROCESS;

  /**
   * <string> Detailed information of the BackgroundAction.
   */
  details: string = null;

  /**
   * Action executed in the background and enventually solved. The default state
   * is waiting, and should be changed when processing the action, and again
   * when the action is finished.
   * @param name <string> Readable action name. Cant be undefined or null and
   * length must be higher than 0.
   */
  constructor(type: BackgroundAction.TYPE, details?: string) {

    // Assign the background type
    if (!type) {
      throw new Error('A type is required to create a BackgroundAction');
    }
    this.type = type;

    // Assign the id
    this.id = getBrackgroundActionId();

    if (details) this.details = details;

  }
}
export module BackgroundAction {

  /** Marks if the action is on process or has finished. */
  export enum STATE { ON_PROCESS, FAIL, SUCCESS };

  /** Marks the background action type. */
  export enum TYPE {
    SIGNIN = 'signIn',
    DEPLOY_SERVICE = 'deploy service',
    UNDEPLOY_SERVICE = 'undeploy service',
    SCALE_SERVICE = 'scale service',
    REGISTER_BUNDLE = 'register bundle',
    REGISTER_DOMAIN = 'register domain',
    REGISTER_VOLUME = 'register volume',
    UNREGISTER_DOMAIN = 'unregister domain',
    UNREGISTER_RUNTIME = 'unregister runtime',
    UNREGISTER_COMPONENT = 'unregister component',
    UNREGISTER_SERVICE = 'unregister service',
    LINK_SERVICES = 'link services',
    UNLINK_SERVICES = 'unlink services',
    LOADING_DATA = 'loading data'
  }

}import * as R from 'ramda'

console.log(
    R.max(1, 2), // 2
    R.max(2, 1), // 2
    R.max(2, 2), // 2
    R.max('a', 'b'), // 'b'
)
/**
 *
 * @author
 *
 */
class Connection{
    /**网络套接字对象*/
    private webSocket:egret.WebSocket;
    /**是否已连接了服务器*/
    private isConnection: boolean = false;

    private _handler:IReceiveHandler;
	public constructor() {

	}

    public setHandler(handler:IReceiveHandler):void{
        this._handler = handler;
    }

	/**
	 * 连接至服务器
	 * sc:地址
	 * d:端口
	 * */
    public Connection(): void {

    }

    public connect(host:string,port:number):void{
         if(this.webSocket){
            if(this.webSocket.connected) {
                //console.log("已有连接，勿重复");

                return;
            }
        }
        this.webSocket = new egret.WebSocket();
        this.webSocket.addEventListener(egret.Event.CONNECT, this.onSocketOpen, this);
        // this.webSocket.addEventListener(egret.IOErrorEvent.IO_ERROR, this.onSocketError, this);
        this.webSocket.addEventListener(egret.ProgressEvent.SOCKET_DATA, this.onReceiveMessage, this);
        this.webSocket.connect(host, port);
    }


(conversation, any()) }
        coVerify(exactly = 1) { fallbackAgent.execute(conversation, any()) }
    }

    @Test
    fun `test AgentChain agentOnFailure functionality`() {
        // Given
        val agentChain = AgentChain(agents = listOf("agent1", "agent2"), agentOnFailure = "fallbackAgent")

        // When & Then
        // Should have the correct agentOnFailure
        assertThat(agentChain.agentOnFailure).isEqualTo("fallbackAgent")

        // Test with null agentOnFailure
        val agentChainWithoutFallback = AgentChain(agents = listOf("agent1", "agent2"))
        assertThat(agentChainWithoutFallback.agentOnFailure).isNull()
    }

    @Test
    fun `test executeWithHandover with agent chain where current agent is last in chain`() = runBlocking {
        // Given
        val agent1 = mockk<ChatAgent>()
        val agent2 = mockk<ChatAgent>()
        val agentProvider = mockk<AgentProvider>()
        val conversation = "test".toConversation(User("user"))

        // Create an agent chain where agent2 is the last agent
        val agentChain = AgentChain(agents = listOf("agent1", "agent2"))
        val context = setOf<Any>(agentChain)

        // Setup agent responses
        val result2 = Success(conversation)

        coEvery { agent1.name } returns "agent1"
        coEvery { agent2.name } returns "agent2"

        // Mock with specific parameters to avoid ambiguity
        coEvery { agent2.execute(conversation, match { it.contains(agentChain) }) } returns result2

        // Make sure getAgents returns all the agents we need
        coEvery { agentProvider.getAgents() } returns listOf(agent1, agent2)

        // When
        val handoverResult = agent2.executeWithHandover(conversation, context, agentProvider)

        // Then
        // Should execute only agent2 and return its result (no next agent in chain)
        assertThat(handoverResult).isEqualTo(result2)
        coVerify(exactly = 1) { agent2.execute(conversation, match { it.contains(agentChain) }) }
        coVerify(exactly = 0) { agent1.execute(any(), any()) }
    }
}
// SPDX-FileCopyrightText: 2025 Deutsche Telekom AG and others
//
// SPDX-License-Identifier: Apache-2.0

package org.eclipse.lmos.arc.agents.functions

import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.booleanOrNull
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.doubleOrNull
import kotlinx.serialization.json.floatOrNull
import kotlinx.serialization.json.intOrNull
import kotlinx.serialization.json.jsonArray
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.longOrNull
import org.eclipse.lmos.arc.core.failWith
import org.eclipse.lmos.arc.core.result

/**
 * Converts json strings to a map of any types.
 */
fun String.convertToJsonMap() = result<Map<String, Any?>, InvalidJsonException> {
    try {
        if (isEmpty()) return@result emptyMap()
        val jsonMap = Json.decodeFromString<Map<String, JsonElement>>(this@convertToJsonMap)
        jsonMap.mapValues { it.value.extractedContent }
    } catch (ex: SerializationExce


25A190.738137 190.738137 0 0 1 320.001875 128.00875a31.999688 31.999688 0 0 1 31.999687-31.999688 31.669691 31.669691 0 0 1 19.159813 6.369938 63.999375 63.999375 0 0 0 89.609125-12.729875 63.999375 63.999375 0 0 1 102.459 0 63.999375 63.999375 0 0 0 89.609125 12.729875A31.659691 31.659691 0 0 1 671.998438 96.009062a31.999688 31.999688 0 0 1 31.999687 31.999688 191.998125 191.998125 0 0 1-175.458287 191.288132Q520.299919 319.006885 512 319.006885q-8.299919 0-16.529839 0.289997a190.548139 190.548139 0 0 1-119.228835-55.529458z m504.605072 649.063662A159.998438 159.998438 0 0 1 766.99751 960.000625H257.00249A160.998428 160.998428 0 0 1 96.004062 799.002197a415.555942 415.555942 0 0 1 398.226112-415.615941c5.869943 0.399996 11.789885 0.619994 17.769826 0.619994s11.889884-0.219998 17.769826-0.619994A415.575942 415.575942 0 0 1 927.995938 799.002197a159.998438 159.998438 0 0 1-47.15954 113.838889z"  ></path><path d="M630.628842 521.374908a31.999688 31.999688 0 0 0-45.259558 0L512 594.754192l-73.369284-73.369284a31.999688 31.999688 0 0 0-45.249558 45.259558L466.740442 640.00375H416.000937a31.999688 31.999688 0 0 0 0 63.999375h63.999375v63.999375h-63.999375a31.999688 31.999688 0 0 0 0 63.999375h63.999375v31.999687a31.999688 31.999688 0 0 0 63.999376 0v-31.999687h63.999375a31.999688 31.999688 0 0 0 0-63.999375h-63.999375v-63.999375h63.999375a31.999688 31.999688 0 0 0 0-63.999375h-50.739505l73.369284-73.369284a31.999688 31.999688 0 0 0 0-45.259558z"  ></path></symbol><symbol id="icon-liaotian" viewBox="0 0 1113 1024"><path d="M639.918 471.178c-24.795 0.045-44.88 20.144-44.903 44.939 0 24.85 20.143 45.061 44.903 45.061 24.759 0 44.902-20.211 44.902-45.059-0.022-24.798-20.107-44.897-44.898-44.941zM1039.791 125.039c0-34.621-28.116-62.775-62.668-62.775h-674.413c-34.552 0-62.657 28.154-62.657 62.766v62.775h54.322v-71.12h691.082v443.348h-70.993v54.421h62.657c34.553 0 62.668-28.164 62.668-62.766v-426.659zM462.441 471.178c-24.8 0.038-44.89 20.14-


method="post">
        タスク内容:
        <input type="text" id="task_content" name="content" required>

        期限 (例: 2025/06/20):
        <input type="text" id="task_deadline" name="deadline">

        関連企業 (任意): {# ★企業選択追加★ #}
        <select id="task_company_id" name="company_id">
            <option value="">選択しない</option>
            {% for company in companies %}
            <option value="{{ company.id }}">{{ company.name }}</option>
            {% endfor %}
        </select>

        <input type="submit" value="タスクを追加">
    </form>

登録済みタスク一覧

    {% if tasks %}

                    タスク内容
                    期限
                    状態
                    関連企業	 {# ★関連企業列追加★ #}
                    操作

                {% for task, company_name in tasks %} {# ★変数名を変更：タプルで受け取る ★ #}

                    {{ task.content }}
                    {{ task.deadline }}
                    {{ task.status }}
                    {{ company_name if company_name else 'なし' }}	 {# ★関連企業表示★ #}

                        {% if task.status == '未完了' %}
                            <form action="{{ url_for('complete_task') }}" method="post" style="display:inline;">
                                <input type="hidden" name="task_id" value="{{ task.id }}"> {# ★task.id を渡す★ #}
                                <input type="submit" value="完了" style="padding: 5px 10px; background-color: #28a745; color: white; border: none; border-radius: 4px; cursor: pointer;">
                            </form>
                        {% else %}
                            完了済み {# 完了済みと表示 #}
                        {% endif %}

                {% endfor %}

    {% else %}

まだタスクが登録されていません。

    {% endif %}

ダッシュボードに戻る

{% endblock %}<!doctype html>

  <meta charset="UTF-8" />
  <link rel="icon" type="


 ":D/FullMoonMiningCo/logos/main/xcpt-logo.png"},
	"5oCf3mGGykAoMKf9CK7NvD1St2obf5Cnr5CLEpT33JxG": {"Yes", "Y", 9, ":D/FullMoonMiningCo/logos/main/y-logo.png"},
	"7yQ3eujpoHEZEcLE4YRHA3En4nMK3k2bPUWiXXxRdh9e": {"No", "N", 9, ":D/FullMoonMiningCo/logos/main/n-logo.png"},
	"QN2HkkBaWHfYSU5bybyups9z1UHu8Eu7QeeyMbjD2JA":  {"Port Finance BTC", "pBTC", 6, ":B/BTC.svg"},
	"6UgGnLA3Lfe8NBLAESctsUXWdP3zjMFzSLEZxS3tiaKh": {"Port Finance Mercurial", "pMER", 6, ":B/MER.svg"},
	"FhraFicS7fGxHn8jfzuZ6TeTpCu8PAnQNZiT2tqM5xvv": {"Port Finance Saber", "pSBR", 6, ":B/SBR.svg"},
	"77TBgKmTNtMdGrt1ewNRb56F2Xw6fNLZZj33JZ3oGwXh": {"Port Finance Serum", "pSRM", 6, ":B/SRM.svg"},
	"GLLZY8xRU1dvV117DwEki2hVdfzQwB1D3xeBcQ7JEvCf": {"Twinkycoin", "DOO", 0, ":D/Deliriant3/token/main/logo.png"},
	"75tQsrumoU3xb98J1wZgPJXK3ZsrDxomaK4WEzrR5kEr": {"CodeSydney", "CSYD", 9, ":D/codesydney/assets/main/logo/csyd/hexagon.png"},
	"EzpSBrAdTU1AYdY6UWghFJRiq2WF39CUy3Tncrh82XiB": {"Fake Crypto Coin", "FAKE", 0, ":D/faketrillionaire/fakecryptocoin/main/fake_crypto_coin.png"},
	"85dqKwPUVgEgH1LRTCDYc4Pym2hiQFHU7vfQRJQx6pAg": {"Highland Cow Herd Coin", "HCHC", 0, ":F/Frew250/Crypto/blob/main/HCH.png"},
	"AoTKABCgrfjMXDo7Rtbcgcphi3XCJRjJ74Vpyc3ENMor": {"TOP USD", "TUSD", 0, "**"},
	"BCMqKuey7zLuxfErEo1at1ui4BjC69752MCy2WU1mhmo": {"SheepCoin", "SHEEP", 0, ":D/Andreas711/crypto/main/sheeptoken.png"},
	"6BnVgighj8VKqCS2ymUmcvLUguHrPHjZfDZ9oZqqFp7j": {"Momobear Taro Pot", "Momobear", 0, ":D/wei1769/nft_storage/main/art/momoyaTaroPot.png"},
	"G49gd8dLmqedK3DNdgUkd2chVMZieRgqZVMnnrsnsF5V": {"Pre-Sale Mercanti NFT 1", "P-MERC", 0, "**"},
	"JBveYSPQ5sGSPBMi8UdSYcFH25pCEQiU6PymVFqkzm3b": {"Pre-Sale Mercanti NFT 2", "P-MERC", 0, "**"},
	"CdQseFmnPh2JBiz5747dJ6oYXK9NKnbdF


e(1, 4):
          self.assertAllCloseAccordingToType(0.9**t, beta1_power.eval())
          self.assertAllCloseAccordingToType(0.999**t, beta2_power.eval())
          if t % 2 == 0:
            update1.run()
          else:
            update2.run()

          var0_np, m0, v0 = adam_update_numpy(var0_np, grads0_np, t, m0, v0)
          var1_np, m1, v1 = adam_update_numpy(var1_np, grads1_np, t, m1, v1)

          # Validate updated params
          self.assertAllCloseAccordingToType(var0_np, var0.eval())
          self.assertAllCloseAccordingToType(var1_np, var1.eval())

  def testTwoSessions(self):
    optimizer = lazy_adam_optimizer.LazyAdamOptimizer()

    with context.eager_mode():
      var0 = variables.Variable(np.array([1.0, 2.0]), name="v0")
      grads0 = constant_op.constant(np.array([0.1, 0.1]))
      optimizer.apply_gradients([(grads0, var0)])

    g = ops.Graph()
    with g.as_default():
      with self.session(graph=g):
        var0 = variables.Variable(np.array([1.0, 2.0]), name="v0")
        grads0 = constant_op.constant(np.array([0.1, 0.1]))
        optimizer.apply_gradients([(grads0, var0)])

    gg = ops.Graph()
    with gg.as_default():
      with self.session(graph=gg):
        var0 = variables.Variable(np.array([1.0, 2.0]), name="v0")
        grads0 = constant_op.constant(np.array([0.1, 0.1]))

        # If the optimizer saves any state not keyed by graph the following line
        # fails.
        optimizer.apply_gradients([(grads0, var0)])

  def testSlotsUniqueEager(self):
    with context.eager_mode():
      v1 = resource_variable_ops.ResourceVariable(1.)
      v2 = resource_variable_ops.ResourceVariable(1.)
      opt = lazy_adam_optimizer.LazyAdamOptimizer(1.)
      opt.minimize(lambda: v1 + v2)
      # There should be two non-slot variables, and two unique slot variables
      # for v1 and v2 respectively.
      self.assertEqual(6, len(set(opt.variables())))

if __name__ == "__main__":
  test.main()


D036;110F 1171 11A9; # (퀶; 퀶; 퀶; 퀶; 퀶; ) HANGUL SYLLABLE KWIGG
D037;D037;110F 1171 11AA;D037;110F 1171 11AA; # (퀷; 퀷; 퀷; 퀷; 퀷; ) HANGUL SYLLABLE KWIGS
D038;D038;110F 1171 11AB;D038;110F 1171 11AB; # (퀸; 퀸; 퀸; 퀸; 퀸; ) HANGUL SYLLABLE KWIN
D039;D039;110F 1171 11AC;D039;110F 1171 11AC; # (퀹; 퀹; 퀹; 퀹; 퀹; ) HANGUL SYLLABLE KWINJ
D03A;D03A;110F 1171 11AD;D03A;110F 1171 11AD; # (퀺; 퀺; 퀺; 퀺; 퀺; ) HANGUL SYLLABLE KWINH
D03B;D03B;110F 1171 11AE;D03B;110F 1171 11AE; # (퀻; 퀻; 퀻; 퀻; 퀻; ) HANGUL SYLLABLE KWID
D03C;D03C;110F 1171 11AF;D03C;110F 1171 11AF; # (퀼; 퀼; 퀼; 퀼; 퀼; ) HANGUL SYLLABLE KWIL
D03D;D03D;110F 1171 11B0;D03D;110F 1171 11B0; # (퀽; 퀽; 퀽; 퀽; 퀽; ) HANGUL SYLLABLE KWILG
D03E;D03E;110F 1171 11B1;D03E;110F 1171 11B1; # (퀾; 퀾; 퀾; 퀾; 퀾; ) HANGUL SYLLABLE KWILM
D03F;D03F;110F 1171 11B2;D03F;110F 1171 11B2; # (퀿; 퀿; 퀿; 퀿; 퀿; ) HANGUL SYLLABLE KWILB
D040;D040;110F 1171 11B3;D040;110F 1171 11B3; # (큀; 큀; 큀; 큀; 큀; ) HANGUL SYLLABLE KWILS
D041;D041;110F 1171 11B4;D041;110F 1171 11B4; # (큁; 큁; 큁; 큁; 큁; ) HANGUL SYLLABLE KWILT
D042;D042;110F 1171 11B5;D042;110F 1171 11B5; # (큂; 큂; 큂; 큂; 큂; ) HANGUL SYLLABLE KWILP
D043;D043;110F 1171 11B6;D043;110F 1171 11B6; # (큃; 큃; 큃; 큃; 큃; ) HANGUL SYLLABLE KWILH
D044;D044;110F 1171 11B7;D044;110F 1171 11B7; # (큄; 큄; 큄; 큄; 큄; ) HANGUL SYLLABLE KWIM
D045;D045;110F 1171 11B8;D045;110F 1171 11B8; # (큅; 큅; 큅; 큅; 큅; ) HANGUL SYLLABLE KWIB
D046;D046;110F 1171 11B9;D046;110F 1171 11B9; # (큆; 큆; 큆; 큆; 큆; ) HANGUL SYLLABLE KWIBS
D047;D047;110F 1171 11BA;D047;110F


";
import { Stripe } from "stripe";
import { Resolver, Mutation, Arg, Int, Query } from "type-graphql";
import { stripe } from "../constants/stripe";

@Resolver()
export class StripeResolver {
  @Query(() => String)
  async createCheckoutSession(
    @Arg("amount", () => Int) amount: number,
    @Arg("id", () => Int) id: number
  ): Promise<null | string> {
    const project = await Project.findOne(id);
    const params: Stripe.Checkout.SessionCreateParams = {
      submit_type: "donate",
      payment_method_types: ["card"],
      billing_address_collection: "auto",
      shipping_address_collection: {
        allowed_countries: ["US", "CA"],
      },
      line_items: [
        {
          name: `Thanks for supporting ${project?.title}`,
          amount: amount * 100,
          currency: "usd",
          quantity: 1,
        },
      ],
      success_url: `http://localhost:3000/projects/${id}`,
      cancel_url: `http://localhost:3000/`,
    };
    const checkoutSession: Stripe.Checkout.Session =
      await stripe.checkout.sessions.create(params);
    return checkoutSession.url;
  }

  @Mutation(() => String)
  async createPaymentIntent(
    @Arg("stripeId", () => String) stripeId: string
  ): Promise<Stripe.Response<Stripe.PaymentIntent> | string> {
    const intentParams: Stripe.PaymentIntentCreateParams = {
      payment_method_types: ["card"],
      amount: 1000,
      currency: "usd",
      application_fee_amount: 123,
    };
    const paymentIntent = await stripe.paymentIntents.create(intentParams, {
      stripeAccount: stripeId,
    });
    return paymentIntent.id;
  }

  @Mutation(() => String)
  async createStripeLink(
    @Arg("stripeId", () => String) stripeId: string
  ): Promise<Stripe.Response<Stripe.AccountLink> | string> {
    const params: Stripe.AccountLinkCreateParams = {
      account: stripeId,
      refresh_url: "http://localhost:3000/api/auth/signin", // this has to point to page that calls this function
      return_url: "http://localhost:3000/projects",
      type: "account_onboarding",
    };
    const link = await stripe.accountLinks.create(params);
    return link.url;
  }

  @Mutation(() => String)
  async createStripeAccount(): // @Arg('profileid', () => Int) id: number,
  Promise<Stripe.Response<Stripe.Account> | string> {
    const params: Stripe.AccountCreateParams = {
      type: "standard",
    };
    const account = await stripe.accounts.create(params);

    return account.id;
  }
}
import { ActionType } from './../../../types/redux'
import { requestingAuthentication, failedAuthentication, receivedAuthentication } from '../constants/login'

export type LoginState = {
  isLogin: boolean,
  isError: boolean,
  isRequesting: boolean,
  error: string
}

export const initialLoginState = {
  isLogin: false,
  isError: false,
  isRequesting: false,
  error: ''
}

export const loginReducers = (state = initialLoginState, {type, payload}: ActionType): LoginState => {
  switch (type) {
    case requestingAuthentication:
      return {
        ...state,
        isRequesting: true,
        isLogin: false,
        isError: false
      }
    case receivedAuthentication:
      return {
        ...state,
        isRequesting: false,
        isLogin: (payload as {isLogin: bo


using System;

namespace TankLib.STU {
    [AttributeUsage(AttributeTargets.Class, Inherited = false)]
    public class STUAttribute : Attribute {
        /// Instance name CRC32 (mangled in 1.14+)
        public uint Hash;

        public uint m_size;

        public STUAttribute(uint hash, uint size) {
            Hash = hash;
            m_size = size;
        }
    }

    [AttributeUsage(AttributeTargets.Field)]
    public class STUFieldAttribute : Attribute {
        /// Field name CRC32 (mangled in 1.14+)
        public uint Hash;

        /// Real value of name hash
        public string Name;

        /// IStructuredDataFieldReader to use</summa


< lightMap.get(this.name).length; i++) {
                let l: LightInfo = new LightInfo(lightMap.get(this.name)[i].light.clone(), lightMap.get(this.name)[i].coordinateSystem);
                //console.log("l_before"+ i + ": " + l.light.getPosition());
                let pos: vec4 = vec4.create();
                let dir: vec4 = vec4.create();
                vec4.transformMat4(pos, l.light.getPosition(), modelView.peek());
                //console.log("result: " + pos);
                l.light.setPosition([pos[0], pos[1], pos[2]]);

                //multiply the lights' direction with modelView
                vec4.transformMat4(dir, l.light.getSpotDirection(), modelView.peek());
                l.light.setSpotDirection([dir[0], dir[1], dir[2]]);
                //l.light.setSpotDirection(result);

                // Add those lights in view coordinates to the lights array
                lights.push(l);
            }
        }

        if (this.child != null)
            this.child.lightPass(context, modelView, lights, lightMap);
        modelView.pop();
    }

    private setLight(ambient: vec3, diffuse: vec3, specular: vec3, position: vec3): void{
        let l: Light = new Light();
        l.setAmbient(ambient);
        l.setDiffuse(diffuse);
        l.setSpecular(specular);
        l.setPosition(position);
        this.lights.push(new LightInfo(l, LightCoordinateSystem.Object));
    }

    public addLight(l: Light)
    {
        this.lights.push(new LightInfo(l, LightCoordinateSystem.Object));
    }

    /**
     * Sets the animation transform of this node
     * @param mat the animation transform of this node
     */
    public setAnimationTransform(mat: mat4): void {
        this.animationTransform = mat;
    }

    /**
     * Gets the transform at this node (not the animation transform)
     * @return
     */
    public getTransform(): mat4 {
        return this.transform;
    }

    /**
     * Sets the transformation of this node
     * @param t
     * @throws IllegalArgumentException
     */
    public setTransform(t: mat4): void {
        this.transform = mat4.clone(t);
    }

    /**
     * Gets the animation transform of this node
     * @return
     */
    public getAnimationTransform(): mat4 {
        return this.animationTransform;
    }

    /**
     * Sets the scene graph object of which this node is a part, and then recurses to its child
     * @param graph a reference to the scenegraph object of which this tree is a part
     */
    public setScenegraph(graph: Scenegraph<IVertexData>): void {
        super.setScenegraph(graph);
        if (this.child != null) {
            this.child.setScenegraph(graph);
        }
    }
}import { Component, OnInit } from '@angular/core';
import { Hero } from './hero-detail/hero';
import { HeroserviceService } from './services/heroservice.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [HeroserviceService],        // Providers is needed
  template: `

{{title}}

Overview of heroes

          {{hero.id}} {{hero.name}}


VA(.MAIN.T2_irf_ce_543), 16, 16),1,IRF,ce,0,55, x,x,x, x,x,x)
	.word 0xbc258000  ! 6736: SUB_R	sub 	%r22, %r0, %r30
	.word 0xbfa58940  ! 6736: FMULd	fmuld	%f22, %f0, %f62
	.word 0xb225a0c3  ! 6738: SUB_I	sub 	%r22, 0x00c3, %r25
	.word 0xbf3d4000  ! 6740: SRA_R	sra 	%r21, %r0, %r31
	.word 0xb1a549a0  ! 6741: FDIVs	fdivs	%f21, %f0, %f24
	.word 0xb1aa8820  ! 6743: FMOVG	fmovs	%fcc1, %f0, %f24
T2_hwint_891:
!$EV trig_pc_d(2,expr(@VA(.MAIN.T2_hwint_891), 16, 16)) -> intp(2, 0, 1c)
T2_irf_ce_544:
!$EV error(2,expr(@VA(.MAIN.T2_irf_ce_544), 16, 16),1,IRF,ce,14,51, x,x,x, x,x,x)
	.word 0xb5347001  ! 6746: SRLX_I	srlx	%r17, 0x0001, %r26
	.word 0xb1a80820  ! 6747: FMOVN	fmovs	%fcc1, %f0, %f24
	.word 0xbba50820  ! 6748: FADDs	fadds	%f20, %f0, %f29
T2_hwint_892:
!$EV trig_pc_d(2,expr(@VA(.MAIN.T2_hwint_892), 16, 16)) -> intp(2, 0, 0)
	.word 0xbda88820  ! 6750: FMOVLE	fmovs	%fcc1, %f0, %f30
	.word 0xbda00520  ! 6753: FSQRTs	fsqrt
	.word 0xb2a4a019  ! 6755: SUBcc_I	subcc 	%r18, 0x0019, %r25
T2_hwint_893:
!$EV trig_pc_d(2,expr(@VA(.MAIN.T2_hwint_893), 16, 16)) -> intp(2, 0, 36)
	.word 0xbfa508e0  ! 6762: FSUBq	dis not found

	.word 0xbd641800  ! 6764: MOVcc_R	<illegal instruction>
T2_hwint_894:
!$EV trig_pc_d(2,expr(@VA(.MAIN.T2_hwint_894), 16, 16)) -> intp(2, 0, 1b)
T2_hwint_895:
!$EV trig_pc_d(2,expr(@VA(.MAIN.T2_hwint_895), 16, 16)) -> intp(2, 0, 1c)
T2_irf_ce_545:
!$EV error(2,expr(@VA(.MAIN.T2_irf_ce_545), 16, 16),1,IRF,ce,58,19, x,x,x, x,x,x)
	.word 0xb2452098  ! 6771: ADDC_I	addc 	%r20, 0x0098, %r25
	.word 0xb1edc000  ! 6771: RESTORE_R	restore	%r23, %r0, %r24
T2_irf_ce_546:
!$EV error(2,expr(@VA(.MAIN.T2_irf_ce_546), 16, 16),1,IRF,ce,42,66, x,x,x, x,x,x)
	.word 0xbf641800  ! 6773: MOVcc_R	<illegal instruction>


 *        The handle to stringify.
 * @return String
 *         The stringification of the object.
 */
function* errorStringify(handle, rpc) {
  const preview = require("./preview");

  let {result} = yield rpc.request("Runtime.getProperties", {
    objectId: handle.objectId
  });
  let name = preview.getProperty(result, "name").value;

  if (name === "" || name === undefined) {
    name = handle.className;
  } else if (isObject(name)) {
    name = yield stringify(name, rpc);
  }

  let message = preview.getProperty(result, "message").value;
  if (isObject(message)) {
    message = yield stringify(message, rpc);
  }

  if (message === "" || message === undefined) {
    return name;
  }
  return name + ": " + message;
}

// Used to prevent infinite recursion when an array is found inside itself.
let seen = null;

let stringifiers = {
  Error: errorStringify,
  EvalError: errorStringify,
  RangeError: errorStringify,
  ReferenceError: errorStringify,
  SyntaxError: errorStringify,
  TypeError: errorStringify,
  URIError: errorStringify,
  Boolean: createBuiltinStringifier(Boolean),
  Function: createBuiltinStringifier(Function),
  Number: createBuiltinStringifier(Number),
  RegExp: createBuiltinStringifier(RegExp),
  String: createBuiltinStringifier(String),
  Object: handle => "[object " + handle.className + "]",
  Array: function* (handle, rpc) {
    // If we're at the top level then we need to create the Set for tracking
    // previously stringified arrays.
    const topLevel = !seen;
    if (topLevel) {
      seen = new Set();
    } else if (seen.has(handle)) {
      return "";
    }

    seen.add(handle);

    const preview = require("./preview");

    let {result} = yield rpc.request("Runtime.getProperties", {
      objectId: handle.objectId
    });
    const len = preview.getProperty(result, "length").value;

    let string = "";

    // The following check is only required because the debuggee could possibly
    // be a Proxy and return any value. For normal objects, array.length is
    // always a non-negative integer.
    if (typeof len == "number" && len > 0) {
      for (let i = 0; i < len; i++) {
        let itemHandle = preview.getProperty(result, i + "");
        if ("value" in itemHandle) {
          string += itemHandle.value;
        } else {
          string += yield stringify(itemHandle, rpc);
        }

        if (i < len - 1) {
          string += ",";
        }
      }
    }

    if (topLevel) {
      seen = null;
    }

    return string;
  },
  DOMException: function* (handle, rpc) {
    const preview = require("./preview");

    let {result} = yield rpc.request("Runtime.getProperties", {
      objectId: handle.objectId
    });

    const message = preview.getProperty(result, "message").value || "<no message>";
    const resultProp = (+preview.getProperty(result, "result").value).toString(16);
    const code = preview.getProperty(result, "code").value;
    const name = preview.getProperty(result, "name").value || "<unknown>";

    return '[Exception... "' + message + '" ' +
           'code: "' + code +'" ' +
           'nsresult: "0x' + resultProp + ' (' + name + ')"]';
  },
  Promise: function* (handle, rpc) {
    const preview = require("./preview");

    let {internalProperties} = yield rpc.reque


| WebAssembly | 0.70 | 0.75 | 0.80 | 0.80 | 0.70 | 0.70 | 0.85 |
| 物联网 | 0.65 | 0.85 | 0.90 | 0.75 | 0.55 | 0.80 | 0.85 |
| 机器学习 | 0.80 | 0.75 | 0.85 | 0.70 | 0.60 | 0.75 | 0.90 |

### 2.2 概念关系矩阵

#### 矩阵 2.2.1 (核心概念关系矩阵)

定义关系强度矩阵 $R_{ij}$：

| 概念 | 所有权 | 类型系统 | 并发 | 异步 | 设计模式 | 微服务 | 区块链 | WASM | IoT | ML |
|------|--------|----------|------|------|----------|--------|--------|------|-----|----|
| 所有权 | 1.00 | 0.85 | 0.70 | 0.60 | 0.75 | 0.65 | 0.70 | 0.60 | 0.65 | 0.60 |
| 类型系统 | 0.85 | 1.00 | 0.75 | 0.65 | 0.80 | 0.70 | 0.75 | 0.70 | 0.70 | 0.75 |
| 并发 | 0.70 | 0.75 | 1.00 | 0.90 | 0.85 | 0.80 | 0.75 | 0.70 | 0.75 | 0.70 |
| 异步 | 0.60 | 0.65 | 0.90 | 1.00 | 0.70 | 0.85 | 0.70 | 0.75 | 0.80 | 0.75 |
| 设计模式 | 0.75 | 0.80 | 0.85 | 0.70 | 1.00 | 0.90 | 0.80 | 0.75 | 0.80 | 0.75 |
| 微服务 | 0.65 | 0.70 | 0.80 | 0.85 | 0.90 | 1.00 | 0.75 | 0.70 | 0.75 | 0.80 |
| 区块链 | 0.70 | 0.75 | 0.75 | 0.70 | 0.80 | 0.75 | 1.00 | 0.65 | 0.70 | 0.75 |
| WASM | 0.60 | 0.70 | 0.70 | 0.75 | 0.75 | 0.70 | 0.65 | 1.00 | 0.65 | 0.70 |
| IoT | 0.65 | 0.70 | 0.75 | 0.80 | 0.80 | 0.75 | 0.70 | 0.65 | 1.00 | 0.75 |
| ML | 0.60 | 0.75 | 0.70 | 0.75 | 0.75 | 0.80 | 0.75 | 0.70 | 0.75 | 1.00 |

### 2.3 层次-主题矩阵

#### 矩阵 2.3.1 (层次主题详细矩阵)

定义层次-主题矩阵 $H_{ij}$：

| 层次 | 所有权 | 类型系统 | 并发 | 异步 | 设计模式 | 微服务 | 区块链 | WASM | IoT | ML |
|------|--------|----------|------|------|----------|--------|--------|------|-----|----|
| 基础理论层 | 0.95 | 0.90 | 0.85 | 0.80 | 0.70 | 0.30 | 0.40 | 0.35 | 0.25 | 0.45 |
| 工程实现层 | 0.90 | 0.85 | 0.90 | 0.85 | 0.95 | 0.95 |


;
        var b = shape.ry;
        var ox = a * k; // 水平控制点偏移量
        var oy = b * k; // 垂直控制点偏移量
        // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线
        ctx.moveTo(x - a, y);
        ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
        ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
        ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
        ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
        ctx.closePath();
    }
});

// import RadialGradient from '../graphic/RadialGradient';
// import Pattern from '../graphic/Pattern';
// import * as vector from '../core/vector';
// Most of the values can be separated by comma and/or white space.
var DILIMITER_REG = /[\s,]+/;

/**
 * For big svg string, this method might be time consuming.
 *
 * @param {string} svg xml string
 * @return {Object} xml root.
 */
function parseXML(svg) {
    if (isString(svg)) {
        var parser = new DOMParser();
        svg = parser.parseFromString(svg, 'text/xml');
    }

    // Document node. If using $.get, doc node may be input.
    if (svg.nodeType === 9) {
        svg = svg.firstChild;
    }
    // nodeName of <!DOCTYPE svg> is also 'svg'.
    while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) {
        svg = svg.nextSibling;
    }

    return svg;
}

function SVGParser() {
    this._defs = {};
    this._root = null;

    this._isDefine = false;
    this._isText = false;
}

SVGParser.prototype.parse = function (xml, opt) {
    opt = opt || {};

    var svg = parseXML(xml);

    if (!svg) {
        throw new Error('Illegal svg');
    }

    var root = new Group();
    this._root = root;
    // parse view port
    var viewBox = svg.getAttribute('viewBox') || '';

    // If width/height not specified, means "100%" of `opt.width/height`.
    // TODO: Other percent value not supported yet.
    var width = parseFloat(svg.getAttribute('width') || opt.width);
    var height = parseFloat(svg.getAttribute('height') || opt.height);
    // If width/height not specified, set as null for output.
    isNaN(width) && (width = null);
    isNaN(height) && (height = null);

    // Apply inline style on svg element.
    parseAttributes(svg, root, null, true);

    var child = svg.firstChild;
    while (child) {
        this._parseNode(child, root);
        child = child.nextSibling;
    }

    var viewBoxRect;
    var viewBoxTransform;

    if (viewBox) {
        var viewBoxArr = trim(viewBox).split(DILIMITER_REG);
        // Some invalid case like viewBox: 'none'.
        if (viewBoxArr.length >= 4) {
            viewBoxRect = {
                x: parseFloat(viewBoxArr[0] || 0),
                y: parseFloat(viewBoxArr[1] || 0),
                width: parseFloat(viewBoxArr[2]),
                height: parseFloat(viewBoxArr[3])
            };
        }
    }

    if (viewBoxRect && width != null && height != null) {
        viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height);

        if (!opt.ignoreViewBox) {
            // If set transform on the output group, it probably bring trouble when
            // some users only intend to show the clipped content inside the viewBox,
            // but


cookies.forEach(c => {
      if (d >= c.expires) {
        c.value = "";
      }
      a.push(`${c.name}=${c.value}`);
    });

    this.cookies = this.cookies.filter(c => c.value !== "");

    return a.join("; ");
  };

  /**
   * Update the current cookies based on the 'set-cookie' header in a fetch Response.
   *
   * @param response The Response to parse.
   */
  private updateCookies = (response: Response): void => {
    // Get the cookies to set from the header
    const cookies = response.headers.raw()["set-cookie"];

    if (!cookies) {
      return;
    }

    // Go through all new cookies
    cookies.forEach(cookie => {
      const name = cookie.split("=")[0].trim();
      const value = cookie
        .split("=")[1]
        .split(";")[0]
        .trim();
      const expires = new Date(
        cookie
          .split("expires=")[1]
          .split(";")[0]
          .trim()
      ).valueOf();
      const oldCookie = this.cookies.find(c => c.name === name);

      if (oldCookie) {
        oldCookie.value = value;
        oldCookie.expires = expires;
      } else {
        this.cookies.push({
          name,
          value,
          expires,
        });
      }
    });
  };
}

export default WebLoginManager;
var canvas = <HTMLCanvasElement> document.getElementById('canvas')
var ctxt = canvas.getContext('2d')
var lastUpdate = Date.now();
var dt:number;
var pi = Math.PI

import Polygon = require('./polygon')
import Vector = require('./Vector')
import Bone = require('./bone')
import Utils = require('./utils')
import Bezier = require('./bezier')
import EventHandler = require('./eventHandler')
import Rig = require('./rig')
import Animation = require('./animation')

var canvasContainer:any = document.querySelector('#canvas-container')
canvas.width = canvasContainer.offsetWidth - 3
canvas.height = canvasContainer.offsetHeight - 3

var rig = new Rig()

//maybe keep default and use copy for posing and animating

var headMesh = new Polygon([
    new Vector(-50, 250),
    new Vector(0, 200),
    new Vector(50, 250)
])
rig.polygons.push(headMesh)

var spineMesh = new Polygon([
    new Vector(),
    new Vector(0, 100),
    new Vector(0, 200)
]);
rig.polygons.push(spineMesh)

var feetMesh = new Polygon([
    new Vector(-50, 0),
    new Vector(50, 0)
])
rig.polygons.push(feetMesh)

var feet = new Bone(new Vector());
var lowerArm = new Bone(new Vector());
feet.addChild(lowerArm)
var upperArm = new Bone(spineMesh.vertices[1].copy());
lowerArm.addChild(upperArm)
var head = new Bone(spineMesh.vertices[2].copy());
upperArm.addChild(head)
rig.bone = feet;

feet.vertices = feetMesh.vertices
lowerArm.vertices.push(spineMesh.vertices[0])
upperArm.vertices.push(spineMesh.vertices[1])
head.vertices.push(spineMesh.vertices[2])
head.vertices = head.vertices.concat(headMesh.vertices)