Use golang.org/x/crypto in runner.
The CI should be set up to retain the Go module and build caches, so
we'll avoid downloading it multiple times. This avoids having to
replicate some code.
Update-Note: The tests now have a golang.org/x/crypto dependency. This
should be fetched transparently with Go modules. Monorepos with
different import path conventions may need to rewrite these imports.
Change-Id: If5ba52e051f180536d72109c2e690bbd13d58e7c
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/42044
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/go.mod b/go.mod
index 20f42f8..17f9468 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,5 @@
module boringssl.googlesource.com/boringssl
go 1.13
+
+require golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..8b7d318
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,8 @@
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/ssl/test/runner/chacha20_poly1305.go b/ssl/test/runner/chacha20_poly1305.go
deleted file mode 100644
index 446fb55..0000000
--- a/ssl/test/runner/chacha20_poly1305.go
+++ /dev/null
@@ -1,194 +0,0 @@
-// Copyright (c) 2016, Google Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package runner
-
-import (
- "crypto/cipher"
- "crypto/subtle"
- "encoding/binary"
- "errors"
-
- "boringssl.googlesource.com/boringssl/ssl/test/runner/poly1305"
-)
-
-// See RFC 7539.
-
-func leftRotate(a uint32, n uint) uint32 {
- return (a << n) | (a >> (32 - n))
-}
-
-func chaChaQuarterRound(state *[16]uint32, a, b, c, d int) {
- state[a] += state[b]
- state[d] = leftRotate(state[d]^state[a], 16)
-
- state[c] += state[d]
- state[b] = leftRotate(state[b]^state[c], 12)
-
- state[a] += state[b]
- state[d] = leftRotate(state[d]^state[a], 8)
-
- state[c] += state[d]
- state[b] = leftRotate(state[b]^state[c], 7)
-}
-
-func chaCha20Block(state *[16]uint32, out []byte) {
- var workingState [16]uint32
- copy(workingState[:], state[:])
- for i := 0; i < 10; i++ {
- chaChaQuarterRound(&workingState, 0, 4, 8, 12)
- chaChaQuarterRound(&workingState, 1, 5, 9, 13)
- chaChaQuarterRound(&workingState, 2, 6, 10, 14)
- chaChaQuarterRound(&workingState, 3, 7, 11, 15)
- chaChaQuarterRound(&workingState, 0, 5, 10, 15)
- chaChaQuarterRound(&workingState, 1, 6, 11, 12)
- chaChaQuarterRound(&workingState, 2, 7, 8, 13)
- chaChaQuarterRound(&workingState, 3, 4, 9, 14)
- }
- for i := 0; i < 16; i++ {
- binary.LittleEndian.PutUint32(out[i*4:i*4+4], workingState[i]+state[i])
- }
-}
-
-// sliceForAppend takes a slice and a requested number of bytes. It returns a
-// slice with the contents of the given slice followed by that many bytes and a
-// second slice that aliases into it and contains only the extra bytes. If the
-// original slice has sufficient capacity then no allocation is performed.
-func sliceForAppend(in []byte, n int) (head, tail []byte) {
- if total := len(in) + n; cap(in) >= total {
- head = in[:total]
- } else {
- head = make([]byte, total)
- copy(head, in)
- }
- tail = head[len(in):]
- return
-}
-
-func chaCha20(out, in, key, nonce []byte, counter uint64) {
- var state [16]uint32
- state[0] = 0x61707865
- state[1] = 0x3320646e
- state[2] = 0x79622d32
- state[3] = 0x6b206574
- for i := 0; i < 8; i++ {
- state[4+i] = binary.LittleEndian.Uint32(key[i*4 : i*4+4])
- }
-
- switch len(nonce) {
- case 8:
- state[14] = binary.LittleEndian.Uint32(nonce[0:4])
- state[15] = binary.LittleEndian.Uint32(nonce[4:8])
- case 12:
- state[13] = binary.LittleEndian.Uint32(nonce[0:4])
- state[14] = binary.LittleEndian.Uint32(nonce[4:8])
- state[15] = binary.LittleEndian.Uint32(nonce[8:12])
- default:
- panic("bad nonce length")
- }
-
- for i := 0; i < len(in); i += 64 {
- state[12] = uint32(counter)
-
- var tmp [64]byte
- chaCha20Block(&state, tmp[:])
- count := 64
- if len(in)-i < count {
- count = len(in) - i
- }
- for j := 0; j < count; j++ {
- out[i+j] = in[i+j] ^ tmp[j]
- }
-
- counter++
- }
-}
-
-// chaCha20Poly1305 implements the AEAD from
-// RFC 7539 and draft-agl-tls-chacha20poly1305-04.
-type chaCha20Poly1305 struct {
- key [32]byte
-}
-
-func newChaCha20Poly1305(key []byte) (cipher.AEAD, error) {
- if len(key) != 32 {
- return nil, errors.New("bad key length")
- }
- aead := new(chaCha20Poly1305)
- copy(aead.key[:], key)
- return aead, nil
-}
-
-func (c *chaCha20Poly1305) NonceSize() int {
- return 12
-}
-
-func (c *chaCha20Poly1305) Overhead() int { return 16 }
-
-func (c *chaCha20Poly1305) poly1305(tag *[16]byte, nonce, ciphertext, additionalData []byte) {
- input := make([]byte, 0, len(additionalData)+15+len(ciphertext)+15+8+8)
- input = append(input, additionalData...)
- var zeros [15]byte
- if pad := len(input) % 16; pad != 0 {
- input = append(input, zeros[:16-pad]...)
- }
- input = append(input, ciphertext...)
- if pad := len(input) % 16; pad != 0 {
- input = append(input, zeros[:16-pad]...)
- }
- input, out := sliceForAppend(input, 8)
- binary.LittleEndian.PutUint64(out, uint64(len(additionalData)))
- input, out = sliceForAppend(input, 8)
- binary.LittleEndian.PutUint64(out, uint64(len(ciphertext)))
-
- var poly1305Key [32]byte
- chaCha20(poly1305Key[:], poly1305Key[:], c.key[:], nonce, 0)
-
- poly1305.Sum(tag, input, &poly1305Key)
-}
-
-func (c *chaCha20Poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte {
- if len(nonce) != c.NonceSize() {
- panic("Bad nonce length")
- }
-
- ret, out := sliceForAppend(dst, len(plaintext)+16)
- chaCha20(out[:len(plaintext)], plaintext, c.key[:], nonce, 1)
-
- var tag [16]byte
- c.poly1305(&tag, nonce, out[:len(plaintext)], additionalData)
- copy(out[len(plaintext):], tag[:])
-
- return ret
-}
-
-func (c *chaCha20Poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) {
- if len(nonce) != c.NonceSize() {
- panic("Bad nonce length")
- }
- if len(ciphertext) < 16 {
- return nil, errors.New("chacha20: message authentication failed")
- }
- plaintextLen := len(ciphertext) - 16
-
- var tag [16]byte
- c.poly1305(&tag, nonce, ciphertext[:plaintextLen], additionalData)
- if subtle.ConstantTimeCompare(tag[:], ciphertext[plaintextLen:]) != 1 {
- return nil, errors.New("chacha20: message authentication failed")
- }
-
- ret, out := sliceForAppend(dst, plaintextLen)
- chaCha20(out, ciphertext[:plaintextLen], c.key[:], nonce, 1)
- return ret, nil
-}
diff --git a/ssl/test/runner/chacha20_poly1305_test.go b/ssl/test/runner/chacha20_poly1305_test.go
deleted file mode 100644
index b59bb02..0000000
--- a/ssl/test/runner/chacha20_poly1305_test.go
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright (c) 2016, Google Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package runner
-
-import (
- "bytes"
- "testing"
-)
-
-// See RFC 7539, section 2.1.1.
-func TestChaChaQuarterRound(t *testing.T) {
- state := [16]uint32{0x11111111, 0x01020304, 0x9b8d6f43, 0x01234567}
- chaChaQuarterRound(&state, 0, 1, 2, 3)
-
- a, b, c, d := state[0], state[1], state[2], state[3]
- if a != 0xea2a92f4 || b != 0xcb1cf8ce || c != 0x4581472e || d != 0x5881c4bb {
- t.Errorf("Incorrect results: %x", state)
- }
-}
-
-// See RFC 7539, section 2.2.1.
-func TestChaChaQuarterRoundState(t *testing.T) {
- state := [16]uint32{
- 0x879531e0, 0xc5ecf37d, 0x516461b1, 0xc9a62f8a,
- 0x44c20ef3, 0x3390af7f, 0xd9fc690b, 0x2a5f714c,
- 0x53372767, 0xb00a5631, 0x974c541a, 0x359e9963,
- 0x5c971061, 0x3d631689, 0x2098d9d6, 0x91dbd320,
- }
- chaChaQuarterRound(&state, 2, 7, 8, 13)
-
- expected := [16]uint32{
- 0x879531e0, 0xc5ecf37d, 0xbdb886dc, 0xc9a62f8a,
- 0x44c20ef3, 0x3390af7f, 0xd9fc690b, 0xcfacafd2,
- 0xe46bea80, 0xb00a5631, 0x974c541a, 0x359e9963,
- 0x5c971061, 0xccc07c79, 0x2098d9d6, 0x91dbd320,
- }
- for i := range state {
- if state[i] != expected[i] {
- t.Errorf("Mismatch at %d: %x vs %x", i, state, expected)
- }
- }
-}
-
-// See RFC 7539, section 2.3.2.
-func TestChaCha20Block(t *testing.T) {
- state := [16]uint32{
- 0x61707865, 0x3320646e, 0x79622d32, 0x6b206574,
- 0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
- 0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c,
- 0x00000001, 0x09000000, 0x4a000000, 0x00000000,
- }
- out := make([]byte, 64)
- chaCha20Block(&state, out)
-
- expected := []byte{
- 0x10, 0xf1, 0xe7, 0xe4, 0xd1, 0x3b, 0x59, 0x15,
- 0x50, 0x0f, 0xdd, 0x1f, 0xa3, 0x20, 0x71, 0xc4,
- 0xc7, 0xd1, 0xf4, 0xc7, 0x33, 0xc0, 0x68, 0x03,
- 0x04, 0x22, 0xaa, 0x9a, 0xc3, 0xd4, 0x6c, 0x4e,
- 0xd2, 0x82, 0x64, 0x46, 0x07, 0x9f, 0xaa, 0x09,
- 0x14, 0xc2, 0xd7, 0x05, 0xd9, 0x8b, 0x02, 0xa2,
- 0xb5, 0x12, 0x9c, 0xd1, 0xde, 0x16, 0x4e, 0xb9,
- 0xcb, 0xd0, 0x83, 0xe8, 0xa2, 0x50, 0x3c, 0x4e,
- }
- if !bytes.Equal(out, expected) {
- t.Errorf("Got %x, wanted %x", out, expected)
- }
-}
-
-var chaCha20Poly1305TestVectors = []struct {
- key, input, nonce, ad, output string
-}{
- {
- // See RFC 7539, section 2.8.2.
- key: "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
- input: "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e",
- nonce: "070000004041424344454647",
- ad: "50515253c0c1c2c3c4c5c6c7",
- output: "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b61161ae10b594f09e26a7e902ecbd0600691",
- },
- {
- // See RFC 7539, section A.5.
- key: "1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0",
- input: "496e7465726e65742d4472616674732061726520647261667420646f63756d656e74732076616c696420666f722061206d6178696d756d206f6620736978206d6f6e74687320616e64206d617920626520757064617465642c207265706c616365642c206f72206f62736f6c65746564206279206f7468657220646f63756d656e747320617420616e792074696d652e20497420697320696e617070726f70726961746520746f2075736520496e7465726e65742d447261667473206173207265666572656e6365206d6174657269616c206f7220746f2063697465207468656d206f74686572207468616e206173202fe2809c776f726b20696e2070726f67726573732e2fe2809d",
- nonce: "000000000102030405060708",
- ad: "f33388860000000000004e91",
- output: "64a0861575861af460f062c79be643bd5e805cfd345cf389f108670ac76c8cb24c6cfc18755d43eea09ee94e382d26b0bdb7b73c321b0100d4f03b7f355894cf332f830e710b97ce98c8a84abd0b948114ad176e008d33bd60f982b1ff37c8559797a06ef4f0ef61c186324e2b3506383606907b6a7c02b0f9f6157b53c867e4b9166c767b804d46a59b5216cde7a4e99040c5a40433225ee282a1b0a06c523eaf4534d7f83fa1155b0047718cbc546a0d072b04b3564eea1b422273f548271a0bb2316053fa76991955ebd63159434ecebb4e466dae5a1073a6727627097a1049e617d91d361094fa68f0ff77987130305beaba2eda04df997b714d6c6f2c29a6ad5cb4022b02709beead9d67890cbb22392336fea1851f38",
- },
-}
-
-// See draft-agl-tls-chacha20poly1305-04, section 7.
-func TestChaCha20Poly1305(t *testing.T) {
- for i, tt := range chaCha20Poly1305TestVectors {
- key := decodeHexOrPanic(tt.key)
- input := decodeHexOrPanic(tt.input)
- nonce := decodeHexOrPanic(tt.nonce)
- ad := decodeHexOrPanic(tt.ad)
- output := decodeHexOrPanic(tt.output)
-
- aead, err := newChaCha20Poly1305(key)
- if err != nil {
- t.Fatal(err)
- }
-
- out, err := aead.Open(nil, nonce, output, ad)
- if err != nil {
- t.Errorf("%d. Open failed: %s", i, err)
- } else if !bytes.Equal(out, input) {
- t.Errorf("%d. Open gave %x, wanted %x", i, out, input)
- }
-
- out = aead.Seal(nil, nonce, input, ad)
- if !bytes.Equal(out, output) {
- t.Errorf("%d. Open gave %x, wanted %x", i, out, output)
- }
-
- out[0]++
- _, err = aead.Open(nil, nonce, out, ad)
- if err == nil {
- t.Errorf("%d. Open on malformed data unexpectedly succeeded", i)
- }
- }
-}
diff --git a/ssl/test/runner/cipher_suites.go b/ssl/test/runner/cipher_suites.go
index e827c52..48dfa57 100644
--- a/ssl/test/runner/cipher_suites.go
+++ b/ssl/test/runner/cipher_suites.go
@@ -16,6 +16,8 @@
"crypto/sha512"
"crypto/x509"
"hash"
+
+ "golang.org/x/crypto/chacha20poly1305"
)
// a keyAgreement implements the client and server side of a TLS key agreement
@@ -305,7 +307,7 @@
}
func aeadCHACHA20POLY1305(version uint16, key, fixedNonce []byte) *tlsAead {
- aead, err := newChaCha20Poly1305(key)
+ aead, err := chacha20poly1305.New(key)
if err != nil {
panic(err)
}
diff --git a/ssl/test/runner/curve25519/const_amd64.h b/ssl/test/runner/curve25519/const_amd64.h
deleted file mode 100644
index 80ad222..0000000
--- a/ssl/test/runner/curve25519/const_amd64.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-#define REDMASK51 0x0007FFFFFFFFFFFF
diff --git a/ssl/test/runner/curve25519/const_amd64.s b/ssl/test/runner/curve25519/const_amd64.s
deleted file mode 100644
index 0ad5398..0000000
--- a/ssl/test/runner/curve25519/const_amd64.s
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-// These constants cannot be encoded in non-MOVQ immediates.
-// We access them directly from memory instead.
-
-DATA ·_121666_213(SB)/8, $996687872
-GLOBL ·_121666_213(SB), 8, $8
-
-DATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA
-GLOBL ·_2P0(SB), 8, $8
-
-DATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE
-GLOBL ·_2P1234(SB), 8, $8
diff --git a/ssl/test/runner/curve25519/cswap_amd64.s b/ssl/test/runner/curve25519/cswap_amd64.s
deleted file mode 100644
index 45484d1..0000000
--- a/ssl/test/runner/curve25519/cswap_amd64.s
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-// func cswap(inout *[5]uint64, v uint64)
-TEXT ·cswap(SB),7,$0
- MOVQ inout+0(FP),DI
- MOVQ v+8(FP),SI
-
- CMPQ SI,$1
- MOVQ 0(DI),SI
- MOVQ 80(DI),DX
- MOVQ 8(DI),CX
- MOVQ 88(DI),R8
- MOVQ SI,R9
- CMOVQEQ DX,SI
- CMOVQEQ R9,DX
- MOVQ CX,R9
- CMOVQEQ R8,CX
- CMOVQEQ R9,R8
- MOVQ SI,0(DI)
- MOVQ DX,80(DI)
- MOVQ CX,8(DI)
- MOVQ R8,88(DI)
- MOVQ 16(DI),SI
- MOVQ 96(DI),DX
- MOVQ 24(DI),CX
- MOVQ 104(DI),R8
- MOVQ SI,R9
- CMOVQEQ DX,SI
- CMOVQEQ R9,DX
- MOVQ CX,R9
- CMOVQEQ R8,CX
- CMOVQEQ R9,R8
- MOVQ SI,16(DI)
- MOVQ DX,96(DI)
- MOVQ CX,24(DI)
- MOVQ R8,104(DI)
- MOVQ 32(DI),SI
- MOVQ 112(DI),DX
- MOVQ 40(DI),CX
- MOVQ 120(DI),R8
- MOVQ SI,R9
- CMOVQEQ DX,SI
- CMOVQEQ R9,DX
- MOVQ CX,R9
- CMOVQEQ R8,CX
- CMOVQEQ R9,R8
- MOVQ SI,32(DI)
- MOVQ DX,112(DI)
- MOVQ CX,40(DI)
- MOVQ R8,120(DI)
- MOVQ 48(DI),SI
- MOVQ 128(DI),DX
- MOVQ 56(DI),CX
- MOVQ 136(DI),R8
- MOVQ SI,R9
- CMOVQEQ DX,SI
- CMOVQEQ R9,DX
- MOVQ CX,R9
- CMOVQEQ R8,CX
- CMOVQEQ R9,R8
- MOVQ SI,48(DI)
- MOVQ DX,128(DI)
- MOVQ CX,56(DI)
- MOVQ R8,136(DI)
- MOVQ 64(DI),SI
- MOVQ 144(DI),DX
- MOVQ 72(DI),CX
- MOVQ 152(DI),R8
- MOVQ SI,R9
- CMOVQEQ DX,SI
- CMOVQEQ R9,DX
- MOVQ CX,R9
- CMOVQEQ R8,CX
- CMOVQEQ R9,R8
- MOVQ SI,64(DI)
- MOVQ DX,144(DI)
- MOVQ CX,72(DI)
- MOVQ R8,152(DI)
- MOVQ DI,AX
- MOVQ SI,DX
- RET
diff --git a/ssl/test/runner/curve25519/curve25519.go b/ssl/test/runner/curve25519/curve25519.go
deleted file mode 100644
index 6918c47..0000000
--- a/ssl/test/runner/curve25519/curve25519.go
+++ /dev/null
@@ -1,841 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// We have a implementation in amd64 assembly so this code is only run on
-// non-amd64 platforms. The amd64 assembly does not support gccgo.
-// +build !amd64 gccgo appengine
-
-package curve25519
-
-// This code is a port of the public domain, "ref10" implementation of
-// curve25519 from SUPERCOP 20130419 by D. J. Bernstein.
-
-// fieldElement represents an element of the field GF(2^255 - 19). An element
-// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77
-// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on
-// context.
-type fieldElement [10]int32
-
-func feZero(fe *fieldElement) {
- for i := range fe {
- fe[i] = 0
- }
-}
-
-func feOne(fe *fieldElement) {
- feZero(fe)
- fe[0] = 1
-}
-
-func feAdd(dst, a, b *fieldElement) {
- for i := range dst {
- dst[i] = a[i] + b[i]
- }
-}
-
-func feSub(dst, a, b *fieldElement) {
- for i := range dst {
- dst[i] = a[i] - b[i]
- }
-}
-
-func feCopy(dst, src *fieldElement) {
- for i := range dst {
- dst[i] = src[i]
- }
-}
-
-// feCSwap replaces (f,g) with (g,f) if b == 1; replaces (f,g) with (f,g) if b == 0.
-//
-// Preconditions: b in {0,1}.
-func feCSwap(f, g *fieldElement, b int32) {
- var x fieldElement
- b = -b
- for i := range x {
- x[i] = b & (f[i] ^ g[i])
- }
-
- for i := range f {
- f[i] ^= x[i]
- }
- for i := range g {
- g[i] ^= x[i]
- }
-}
-
-// load3 reads a 24-bit, little-endian value from in.
-func load3(in []byte) int64 {
- var r int64
- r = int64(in[0])
- r |= int64(in[1]) << 8
- r |= int64(in[2]) << 16
- return r
-}
-
-// load4 reads a 32-bit, little-endian value from in.
-func load4(in []byte) int64 {
- var r int64
- r = int64(in[0])
- r |= int64(in[1]) << 8
- r |= int64(in[2]) << 16
- r |= int64(in[3]) << 24
- return r
-}
-
-func feFromBytes(dst *fieldElement, src *[32]byte) {
- h0 := load4(src[:])
- h1 := load3(src[4:]) << 6
- h2 := load3(src[7:]) << 5
- h3 := load3(src[10:]) << 3
- h4 := load3(src[13:]) << 2
- h5 := load4(src[16:])
- h6 := load3(src[20:]) << 7
- h7 := load3(src[23:]) << 5
- h8 := load3(src[26:]) << 4
- h9 := load3(src[29:]) << 2
-
- var carry [10]int64
- carry[9] = (h9 + 1<<24) >> 25
- h0 += carry[9] * 19
- h9 -= carry[9] << 25
- carry[1] = (h1 + 1<<24) >> 25
- h2 += carry[1]
- h1 -= carry[1] << 25
- carry[3] = (h3 + 1<<24) >> 25
- h4 += carry[3]
- h3 -= carry[3] << 25
- carry[5] = (h5 + 1<<24) >> 25
- h6 += carry[5]
- h5 -= carry[5] << 25
- carry[7] = (h7 + 1<<24) >> 25
- h8 += carry[7]
- h7 -= carry[7] << 25
-
- carry[0] = (h0 + 1<<25) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
- carry[2] = (h2 + 1<<25) >> 26
- h3 += carry[2]
- h2 -= carry[2] << 26
- carry[4] = (h4 + 1<<25) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
- carry[6] = (h6 + 1<<25) >> 26
- h7 += carry[6]
- h6 -= carry[6] << 26
- carry[8] = (h8 + 1<<25) >> 26
- h9 += carry[8]
- h8 -= carry[8] << 26
-
- dst[0] = int32(h0)
- dst[1] = int32(h1)
- dst[2] = int32(h2)
- dst[3] = int32(h3)
- dst[4] = int32(h4)
- dst[5] = int32(h5)
- dst[6] = int32(h6)
- dst[7] = int32(h7)
- dst[8] = int32(h8)
- dst[9] = int32(h9)
-}
-
-// feToBytes marshals h to s.
-// Preconditions:
-// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
-//
-// Write p=2^255-19; q=floor(h/p).
-// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).
-//
-// Proof:
-// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.
-// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4.
-//
-// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).
-// Then 0<y<1.
-//
-// Write r=h-pq.
-// Have 0<=r<=p-1=2^255-20.
-// Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.
-//
-// Write x=r+19(2^-255)r+y.
-// Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.
-//
-// Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))
-// so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.
-func feToBytes(s *[32]byte, h *fieldElement) {
- var carry [10]int32
-
- q := (19*h[9] + (1 << 24)) >> 25
- q = (h[0] + q) >> 26
- q = (h[1] + q) >> 25
- q = (h[2] + q) >> 26
- q = (h[3] + q) >> 25
- q = (h[4] + q) >> 26
- q = (h[5] + q) >> 25
- q = (h[6] + q) >> 26
- q = (h[7] + q) >> 25
- q = (h[8] + q) >> 26
- q = (h[9] + q) >> 25
-
- // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20.
- h[0] += 19 * q
- // Goal: Output h-2^255 q, which is between 0 and 2^255-20.
-
- carry[0] = h[0] >> 26
- h[1] += carry[0]
- h[0] -= carry[0] << 26
- carry[1] = h[1] >> 25
- h[2] += carry[1]
- h[1] -= carry[1] << 25
- carry[2] = h[2] >> 26
- h[3] += carry[2]
- h[2] -= carry[2] << 26
- carry[3] = h[3] >> 25
- h[4] += carry[3]
- h[3] -= carry[3] << 25
- carry[4] = h[4] >> 26
- h[5] += carry[4]
- h[4] -= carry[4] << 26
- carry[5] = h[5] >> 25
- h[6] += carry[5]
- h[5] -= carry[5] << 25
- carry[6] = h[6] >> 26
- h[7] += carry[6]
- h[6] -= carry[6] << 26
- carry[7] = h[7] >> 25
- h[8] += carry[7]
- h[7] -= carry[7] << 25
- carry[8] = h[8] >> 26
- h[9] += carry[8]
- h[8] -= carry[8] << 26
- carry[9] = h[9] >> 25
- h[9] -= carry[9] << 25
- // h10 = carry9
-
- // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
- // Have h[0]+...+2^230 h[9] between 0 and 2^255-1;
- // evidently 2^255 h10-2^255 q = 0.
- // Goal: Output h[0]+...+2^230 h[9].
-
- s[0] = byte(h[0] >> 0)
- s[1] = byte(h[0] >> 8)
- s[2] = byte(h[0] >> 16)
- s[3] = byte((h[0] >> 24) | (h[1] << 2))
- s[4] = byte(h[1] >> 6)
- s[5] = byte(h[1] >> 14)
- s[6] = byte((h[1] >> 22) | (h[2] << 3))
- s[7] = byte(h[2] >> 5)
- s[8] = byte(h[2] >> 13)
- s[9] = byte((h[2] >> 21) | (h[3] << 5))
- s[10] = byte(h[3] >> 3)
- s[11] = byte(h[3] >> 11)
- s[12] = byte((h[3] >> 19) | (h[4] << 6))
- s[13] = byte(h[4] >> 2)
- s[14] = byte(h[4] >> 10)
- s[15] = byte(h[4] >> 18)
- s[16] = byte(h[5] >> 0)
- s[17] = byte(h[5] >> 8)
- s[18] = byte(h[5] >> 16)
- s[19] = byte((h[5] >> 24) | (h[6] << 1))
- s[20] = byte(h[6] >> 7)
- s[21] = byte(h[6] >> 15)
- s[22] = byte((h[6] >> 23) | (h[7] << 3))
- s[23] = byte(h[7] >> 5)
- s[24] = byte(h[7] >> 13)
- s[25] = byte((h[7] >> 21) | (h[8] << 4))
- s[26] = byte(h[8] >> 4)
- s[27] = byte(h[8] >> 12)
- s[28] = byte((h[8] >> 20) | (h[9] << 6))
- s[29] = byte(h[9] >> 2)
- s[30] = byte(h[9] >> 10)
- s[31] = byte(h[9] >> 18)
-}
-
-// feMul calculates h = f * g
-// Can overlap h with f or g.
-//
-// Preconditions:
-// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
-// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
-//
-// Postconditions:
-// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
-//
-// Notes on implementation strategy:
-//
-// Using schoolbook multiplication.
-// Karatsuba would save a little in some cost models.
-//
-// Most multiplications by 2 and 19 are 32-bit precomputations;
-// cheaper than 64-bit postcomputations.
-//
-// There is one remaining multiplication by 19 in the carry chain;
-// one *19 precomputation can be merged into this,
-// but the resulting data flow is considerably less clean.
-//
-// There are 12 carries below.
-// 10 of them are 2-way parallelizable and vectorizable.
-// Can get away with 11 carries, but then data flow is much deeper.
-//
-// With tighter constraints on inputs can squeeze carries into int32.
-func feMul(h, f, g *fieldElement) {
- f0 := f[0]
- f1 := f[1]
- f2 := f[2]
- f3 := f[3]
- f4 := f[4]
- f5 := f[5]
- f6 := f[6]
- f7 := f[7]
- f8 := f[8]
- f9 := f[9]
- g0 := g[0]
- g1 := g[1]
- g2 := g[2]
- g3 := g[3]
- g4 := g[4]
- g5 := g[5]
- g6 := g[6]
- g7 := g[7]
- g8 := g[8]
- g9 := g[9]
- g1_19 := 19 * g1 // 1.4*2^29
- g2_19 := 19 * g2 // 1.4*2^30; still ok
- g3_19 := 19 * g3
- g4_19 := 19 * g4
- g5_19 := 19 * g5
- g6_19 := 19 * g6
- g7_19 := 19 * g7
- g8_19 := 19 * g8
- g9_19 := 19 * g9
- f1_2 := 2 * f1
- f3_2 := 2 * f3
- f5_2 := 2 * f5
- f7_2 := 2 * f7
- f9_2 := 2 * f9
- f0g0 := int64(f0) * int64(g0)
- f0g1 := int64(f0) * int64(g1)
- f0g2 := int64(f0) * int64(g2)
- f0g3 := int64(f0) * int64(g3)
- f0g4 := int64(f0) * int64(g4)
- f0g5 := int64(f0) * int64(g5)
- f0g6 := int64(f0) * int64(g6)
- f0g7 := int64(f0) * int64(g7)
- f0g8 := int64(f0) * int64(g8)
- f0g9 := int64(f0) * int64(g9)
- f1g0 := int64(f1) * int64(g0)
- f1g1_2 := int64(f1_2) * int64(g1)
- f1g2 := int64(f1) * int64(g2)
- f1g3_2 := int64(f1_2) * int64(g3)
- f1g4 := int64(f1) * int64(g4)
- f1g5_2 := int64(f1_2) * int64(g5)
- f1g6 := int64(f1) * int64(g6)
- f1g7_2 := int64(f1_2) * int64(g7)
- f1g8 := int64(f1) * int64(g8)
- f1g9_38 := int64(f1_2) * int64(g9_19)
- f2g0 := int64(f2) * int64(g0)
- f2g1 := int64(f2) * int64(g1)
- f2g2 := int64(f2) * int64(g2)
- f2g3 := int64(f2) * int64(g3)
- f2g4 := int64(f2) * int64(g4)
- f2g5 := int64(f2) * int64(g5)
- f2g6 := int64(f2) * int64(g6)
- f2g7 := int64(f2) * int64(g7)
- f2g8_19 := int64(f2) * int64(g8_19)
- f2g9_19 := int64(f2) * int64(g9_19)
- f3g0 := int64(f3) * int64(g0)
- f3g1_2 := int64(f3_2) * int64(g1)
- f3g2 := int64(f3) * int64(g2)
- f3g3_2 := int64(f3_2) * int64(g3)
- f3g4 := int64(f3) * int64(g4)
- f3g5_2 := int64(f3_2) * int64(g5)
- f3g6 := int64(f3) * int64(g6)
- f3g7_38 := int64(f3_2) * int64(g7_19)
- f3g8_19 := int64(f3) * int64(g8_19)
- f3g9_38 := int64(f3_2) * int64(g9_19)
- f4g0 := int64(f4) * int64(g0)
- f4g1 := int64(f4) * int64(g1)
- f4g2 := int64(f4) * int64(g2)
- f4g3 := int64(f4) * int64(g3)
- f4g4 := int64(f4) * int64(g4)
- f4g5 := int64(f4) * int64(g5)
- f4g6_19 := int64(f4) * int64(g6_19)
- f4g7_19 := int64(f4) * int64(g7_19)
- f4g8_19 := int64(f4) * int64(g8_19)
- f4g9_19 := int64(f4) * int64(g9_19)
- f5g0 := int64(f5) * int64(g0)
- f5g1_2 := int64(f5_2) * int64(g1)
- f5g2 := int64(f5) * int64(g2)
- f5g3_2 := int64(f5_2) * int64(g3)
- f5g4 := int64(f5) * int64(g4)
- f5g5_38 := int64(f5_2) * int64(g5_19)
- f5g6_19 := int64(f5) * int64(g6_19)
- f5g7_38 := int64(f5_2) * int64(g7_19)
- f5g8_19 := int64(f5) * int64(g8_19)
- f5g9_38 := int64(f5_2) * int64(g9_19)
- f6g0 := int64(f6) * int64(g0)
- f6g1 := int64(f6) * int64(g1)
- f6g2 := int64(f6) * int64(g2)
- f6g3 := int64(f6) * int64(g3)
- f6g4_19 := int64(f6) * int64(g4_19)
- f6g5_19 := int64(f6) * int64(g5_19)
- f6g6_19 := int64(f6) * int64(g6_19)
- f6g7_19 := int64(f6) * int64(g7_19)
- f6g8_19 := int64(f6) * int64(g8_19)
- f6g9_19 := int64(f6) * int64(g9_19)
- f7g0 := int64(f7) * int64(g0)
- f7g1_2 := int64(f7_2) * int64(g1)
- f7g2 := int64(f7) * int64(g2)
- f7g3_38 := int64(f7_2) * int64(g3_19)
- f7g4_19 := int64(f7) * int64(g4_19)
- f7g5_38 := int64(f7_2) * int64(g5_19)
- f7g6_19 := int64(f7) * int64(g6_19)
- f7g7_38 := int64(f7_2) * int64(g7_19)
- f7g8_19 := int64(f7) * int64(g8_19)
- f7g9_38 := int64(f7_2) * int64(g9_19)
- f8g0 := int64(f8) * int64(g0)
- f8g1 := int64(f8) * int64(g1)
- f8g2_19 := int64(f8) * int64(g2_19)
- f8g3_19 := int64(f8) * int64(g3_19)
- f8g4_19 := int64(f8) * int64(g4_19)
- f8g5_19 := int64(f8) * int64(g5_19)
- f8g6_19 := int64(f8) * int64(g6_19)
- f8g7_19 := int64(f8) * int64(g7_19)
- f8g8_19 := int64(f8) * int64(g8_19)
- f8g9_19 := int64(f8) * int64(g9_19)
- f9g0 := int64(f9) * int64(g0)
- f9g1_38 := int64(f9_2) * int64(g1_19)
- f9g2_19 := int64(f9) * int64(g2_19)
- f9g3_38 := int64(f9_2) * int64(g3_19)
- f9g4_19 := int64(f9) * int64(g4_19)
- f9g5_38 := int64(f9_2) * int64(g5_19)
- f9g6_19 := int64(f9) * int64(g6_19)
- f9g7_38 := int64(f9_2) * int64(g7_19)
- f9g8_19 := int64(f9) * int64(g8_19)
- f9g9_38 := int64(f9_2) * int64(g9_19)
- h0 := f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38
- h1 := f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19
- h2 := f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38
- h3 := f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19
- h4 := f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38
- h5 := f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19
- h6 := f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38
- h7 := f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19
- h8 := f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38
- h9 := f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0
- var carry [10]int64
-
- // |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38))
- // i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8
- // |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19))
- // i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9
-
- carry[0] = (h0 + (1 << 25)) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
- carry[4] = (h4 + (1 << 25)) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
- // |h0| <= 2^25
- // |h4| <= 2^25
- // |h1| <= 1.51*2^58
- // |h5| <= 1.51*2^58
-
- carry[1] = (h1 + (1 << 24)) >> 25
- h2 += carry[1]
- h1 -= carry[1] << 25
- carry[5] = (h5 + (1 << 24)) >> 25
- h6 += carry[5]
- h5 -= carry[5] << 25
- // |h1| <= 2^24; from now on fits into int32
- // |h5| <= 2^24; from now on fits into int32
- // |h2| <= 1.21*2^59
- // |h6| <= 1.21*2^59
-
- carry[2] = (h2 + (1 << 25)) >> 26
- h3 += carry[2]
- h2 -= carry[2] << 26
- carry[6] = (h6 + (1 << 25)) >> 26
- h7 += carry[6]
- h6 -= carry[6] << 26
- // |h2| <= 2^25; from now on fits into int32 unchanged
- // |h6| <= 2^25; from now on fits into int32 unchanged
- // |h3| <= 1.51*2^58
- // |h7| <= 1.51*2^58
-
- carry[3] = (h3 + (1 << 24)) >> 25
- h4 += carry[3]
- h3 -= carry[3] << 25
- carry[7] = (h7 + (1 << 24)) >> 25
- h8 += carry[7]
- h7 -= carry[7] << 25
- // |h3| <= 2^24; from now on fits into int32 unchanged
- // |h7| <= 2^24; from now on fits into int32 unchanged
- // |h4| <= 1.52*2^33
- // |h8| <= 1.52*2^33
-
- carry[4] = (h4 + (1 << 25)) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
- carry[8] = (h8 + (1 << 25)) >> 26
- h9 += carry[8]
- h8 -= carry[8] << 26
- // |h4| <= 2^25; from now on fits into int32 unchanged
- // |h8| <= 2^25; from now on fits into int32 unchanged
- // |h5| <= 1.01*2^24
- // |h9| <= 1.51*2^58
-
- carry[9] = (h9 + (1 << 24)) >> 25
- h0 += carry[9] * 19
- h9 -= carry[9] << 25
- // |h9| <= 2^24; from now on fits into int32 unchanged
- // |h0| <= 1.8*2^37
-
- carry[0] = (h0 + (1 << 25)) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
- // |h0| <= 2^25; from now on fits into int32 unchanged
- // |h1| <= 1.01*2^24
-
- h[0] = int32(h0)
- h[1] = int32(h1)
- h[2] = int32(h2)
- h[3] = int32(h3)
- h[4] = int32(h4)
- h[5] = int32(h5)
- h[6] = int32(h6)
- h[7] = int32(h7)
- h[8] = int32(h8)
- h[9] = int32(h9)
-}
-
-// feSquare calculates h = f*f. Can overlap h with f.
-//
-// Preconditions:
-// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
-//
-// Postconditions:
-// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
-func feSquare(h, f *fieldElement) {
- f0 := f[0]
- f1 := f[1]
- f2 := f[2]
- f3 := f[3]
- f4 := f[4]
- f5 := f[5]
- f6 := f[6]
- f7 := f[7]
- f8 := f[8]
- f9 := f[9]
- f0_2 := 2 * f0
- f1_2 := 2 * f1
- f2_2 := 2 * f2
- f3_2 := 2 * f3
- f4_2 := 2 * f4
- f5_2 := 2 * f5
- f6_2 := 2 * f6
- f7_2 := 2 * f7
- f5_38 := 38 * f5 // 1.31*2^30
- f6_19 := 19 * f6 // 1.31*2^30
- f7_38 := 38 * f7 // 1.31*2^30
- f8_19 := 19 * f8 // 1.31*2^30
- f9_38 := 38 * f9 // 1.31*2^30
- f0f0 := int64(f0) * int64(f0)
- f0f1_2 := int64(f0_2) * int64(f1)
- f0f2_2 := int64(f0_2) * int64(f2)
- f0f3_2 := int64(f0_2) * int64(f3)
- f0f4_2 := int64(f0_2) * int64(f4)
- f0f5_2 := int64(f0_2) * int64(f5)
- f0f6_2 := int64(f0_2) * int64(f6)
- f0f7_2 := int64(f0_2) * int64(f7)
- f0f8_2 := int64(f0_2) * int64(f8)
- f0f9_2 := int64(f0_2) * int64(f9)
- f1f1_2 := int64(f1_2) * int64(f1)
- f1f2_2 := int64(f1_2) * int64(f2)
- f1f3_4 := int64(f1_2) * int64(f3_2)
- f1f4_2 := int64(f1_2) * int64(f4)
- f1f5_4 := int64(f1_2) * int64(f5_2)
- f1f6_2 := int64(f1_2) * int64(f6)
- f1f7_4 := int64(f1_2) * int64(f7_2)
- f1f8_2 := int64(f1_2) * int64(f8)
- f1f9_76 := int64(f1_2) * int64(f9_38)
- f2f2 := int64(f2) * int64(f2)
- f2f3_2 := int64(f2_2) * int64(f3)
- f2f4_2 := int64(f2_2) * int64(f4)
- f2f5_2 := int64(f2_2) * int64(f5)
- f2f6_2 := int64(f2_2) * int64(f6)
- f2f7_2 := int64(f2_2) * int64(f7)
- f2f8_38 := int64(f2_2) * int64(f8_19)
- f2f9_38 := int64(f2) * int64(f9_38)
- f3f3_2 := int64(f3_2) * int64(f3)
- f3f4_2 := int64(f3_2) * int64(f4)
- f3f5_4 := int64(f3_2) * int64(f5_2)
- f3f6_2 := int64(f3_2) * int64(f6)
- f3f7_76 := int64(f3_2) * int64(f7_38)
- f3f8_38 := int64(f3_2) * int64(f8_19)
- f3f9_76 := int64(f3_2) * int64(f9_38)
- f4f4 := int64(f4) * int64(f4)
- f4f5_2 := int64(f4_2) * int64(f5)
- f4f6_38 := int64(f4_2) * int64(f6_19)
- f4f7_38 := int64(f4) * int64(f7_38)
- f4f8_38 := int64(f4_2) * int64(f8_19)
- f4f9_38 := int64(f4) * int64(f9_38)
- f5f5_38 := int64(f5) * int64(f5_38)
- f5f6_38 := int64(f5_2) * int64(f6_19)
- f5f7_76 := int64(f5_2) * int64(f7_38)
- f5f8_38 := int64(f5_2) * int64(f8_19)
- f5f9_76 := int64(f5_2) * int64(f9_38)
- f6f6_19 := int64(f6) * int64(f6_19)
- f6f7_38 := int64(f6) * int64(f7_38)
- f6f8_38 := int64(f6_2) * int64(f8_19)
- f6f9_38 := int64(f6) * int64(f9_38)
- f7f7_38 := int64(f7) * int64(f7_38)
- f7f8_38 := int64(f7_2) * int64(f8_19)
- f7f9_76 := int64(f7_2) * int64(f9_38)
- f8f8_19 := int64(f8) * int64(f8_19)
- f8f9_38 := int64(f8) * int64(f9_38)
- f9f9_38 := int64(f9) * int64(f9_38)
- h0 := f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38
- h1 := f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38
- h2 := f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19
- h3 := f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38
- h4 := f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38
- h5 := f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38
- h6 := f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19
- h7 := f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38
- h8 := f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38
- h9 := f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2
- var carry [10]int64
-
- carry[0] = (h0 + (1 << 25)) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
- carry[4] = (h4 + (1 << 25)) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
-
- carry[1] = (h1 + (1 << 24)) >> 25
- h2 += carry[1]
- h1 -= carry[1] << 25
- carry[5] = (h5 + (1 << 24)) >> 25
- h6 += carry[5]
- h5 -= carry[5] << 25
-
- carry[2] = (h2 + (1 << 25)) >> 26
- h3 += carry[2]
- h2 -= carry[2] << 26
- carry[6] = (h6 + (1 << 25)) >> 26
- h7 += carry[6]
- h6 -= carry[6] << 26
-
- carry[3] = (h3 + (1 << 24)) >> 25
- h4 += carry[3]
- h3 -= carry[3] << 25
- carry[7] = (h7 + (1 << 24)) >> 25
- h8 += carry[7]
- h7 -= carry[7] << 25
-
- carry[4] = (h4 + (1 << 25)) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
- carry[8] = (h8 + (1 << 25)) >> 26
- h9 += carry[8]
- h8 -= carry[8] << 26
-
- carry[9] = (h9 + (1 << 24)) >> 25
- h0 += carry[9] * 19
- h9 -= carry[9] << 25
-
- carry[0] = (h0 + (1 << 25)) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
-
- h[0] = int32(h0)
- h[1] = int32(h1)
- h[2] = int32(h2)
- h[3] = int32(h3)
- h[4] = int32(h4)
- h[5] = int32(h5)
- h[6] = int32(h6)
- h[7] = int32(h7)
- h[8] = int32(h8)
- h[9] = int32(h9)
-}
-
-// feMul121666 calculates h = f * 121666. Can overlap h with f.
-//
-// Preconditions:
-// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
-//
-// Postconditions:
-// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
-func feMul121666(h, f *fieldElement) {
- h0 := int64(f[0]) * 121666
- h1 := int64(f[1]) * 121666
- h2 := int64(f[2]) * 121666
- h3 := int64(f[3]) * 121666
- h4 := int64(f[4]) * 121666
- h5 := int64(f[5]) * 121666
- h6 := int64(f[6]) * 121666
- h7 := int64(f[7]) * 121666
- h8 := int64(f[8]) * 121666
- h9 := int64(f[9]) * 121666
- var carry [10]int64
-
- carry[9] = (h9 + (1 << 24)) >> 25
- h0 += carry[9] * 19
- h9 -= carry[9] << 25
- carry[1] = (h1 + (1 << 24)) >> 25
- h2 += carry[1]
- h1 -= carry[1] << 25
- carry[3] = (h3 + (1 << 24)) >> 25
- h4 += carry[3]
- h3 -= carry[3] << 25
- carry[5] = (h5 + (1 << 24)) >> 25
- h6 += carry[5]
- h5 -= carry[5] << 25
- carry[7] = (h7 + (1 << 24)) >> 25
- h8 += carry[7]
- h7 -= carry[7] << 25
-
- carry[0] = (h0 + (1 << 25)) >> 26
- h1 += carry[0]
- h0 -= carry[0] << 26
- carry[2] = (h2 + (1 << 25)) >> 26
- h3 += carry[2]
- h2 -= carry[2] << 26
- carry[4] = (h4 + (1 << 25)) >> 26
- h5 += carry[4]
- h4 -= carry[4] << 26
- carry[6] = (h6 + (1 << 25)) >> 26
- h7 += carry[6]
- h6 -= carry[6] << 26
- carry[8] = (h8 + (1 << 25)) >> 26
- h9 += carry[8]
- h8 -= carry[8] << 26
-
- h[0] = int32(h0)
- h[1] = int32(h1)
- h[2] = int32(h2)
- h[3] = int32(h3)
- h[4] = int32(h4)
- h[5] = int32(h5)
- h[6] = int32(h6)
- h[7] = int32(h7)
- h[8] = int32(h8)
- h[9] = int32(h9)
-}
-
-// feInvert sets out = z^-1.
-func feInvert(out, z *fieldElement) {
- var t0, t1, t2, t3 fieldElement
- var i int
-
- feSquare(&t0, z)
- for i = 1; i < 1; i++ {
- feSquare(&t0, &t0)
- }
- feSquare(&t1, &t0)
- for i = 1; i < 2; i++ {
- feSquare(&t1, &t1)
- }
- feMul(&t1, z, &t1)
- feMul(&t0, &t0, &t1)
- feSquare(&t2, &t0)
- for i = 1; i < 1; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t1, &t1, &t2)
- feSquare(&t2, &t1)
- for i = 1; i < 5; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t1, &t2, &t1)
- feSquare(&t2, &t1)
- for i = 1; i < 10; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t2, &t2, &t1)
- feSquare(&t3, &t2)
- for i = 1; i < 20; i++ {
- feSquare(&t3, &t3)
- }
- feMul(&t2, &t3, &t2)
- feSquare(&t2, &t2)
- for i = 1; i < 10; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t1, &t2, &t1)
- feSquare(&t2, &t1)
- for i = 1; i < 50; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t2, &t2, &t1)
- feSquare(&t3, &t2)
- for i = 1; i < 100; i++ {
- feSquare(&t3, &t3)
- }
- feMul(&t2, &t3, &t2)
- feSquare(&t2, &t2)
- for i = 1; i < 50; i++ {
- feSquare(&t2, &t2)
- }
- feMul(&t1, &t2, &t1)
- feSquare(&t1, &t1)
- for i = 1; i < 5; i++ {
- feSquare(&t1, &t1)
- }
- feMul(out, &t1, &t0)
-}
-
-func scalarMult(out, in, base *[32]byte) {
- var e [32]byte
-
- copy(e[:], in[:])
- e[0] &= 248
- e[31] &= 127
- e[31] |= 64
-
- var x1, x2, z2, x3, z3, tmp0, tmp1 fieldElement
- feFromBytes(&x1, base)
- feOne(&x2)
- feCopy(&x3, &x1)
- feOne(&z3)
-
- swap := int32(0)
- for pos := 254; pos >= 0; pos-- {
- b := e[pos/8] >> uint(pos&7)
- b &= 1
- swap ^= int32(b)
- feCSwap(&x2, &x3, swap)
- feCSwap(&z2, &z3, swap)
- swap = int32(b)
-
- feSub(&tmp0, &x3, &z3)
- feSub(&tmp1, &x2, &z2)
- feAdd(&x2, &x2, &z2)
- feAdd(&z2, &x3, &z3)
- feMul(&z3, &tmp0, &x2)
- feMul(&z2, &z2, &tmp1)
- feSquare(&tmp0, &tmp1)
- feSquare(&tmp1, &x2)
- feAdd(&x3, &z3, &z2)
- feSub(&z2, &z3, &z2)
- feMul(&x2, &tmp1, &tmp0)
- feSub(&tmp1, &tmp1, &tmp0)
- feSquare(&z2, &z2)
- feMul121666(&z3, &tmp1)
- feSquare(&x3, &x3)
- feAdd(&tmp0, &tmp0, &z3)
- feMul(&z3, &x1, &z2)
- feMul(&z2, &tmp1, &tmp0)
- }
-
- feCSwap(&x2, &x3, swap)
- feCSwap(&z2, &z3, swap)
-
- feInvert(&z2, &z2)
- feMul(&x2, &x2, &z2)
- feToBytes(out, &x2)
-}
diff --git a/ssl/test/runner/curve25519/curve25519_test.go b/ssl/test/runner/curve25519/curve25519_test.go
deleted file mode 100644
index 14b0ee8..0000000
--- a/ssl/test/runner/curve25519/curve25519_test.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package curve25519
-
-import (
- "fmt"
- "testing"
-)
-
-const expectedHex = "89161fde887b2b53de549af483940106ecc114d6982daa98256de23bdf77661a"
-
-func TestBaseScalarMult(t *testing.T) {
- var a, b [32]byte
- in := &a
- out := &b
- a[0] = 1
-
- for i := 0; i < 200; i++ {
- ScalarBaseMult(out, in)
- in, out = out, in
- }
-
- result := fmt.Sprintf("%x", in[:])
- if result != expectedHex {
- t.Errorf("incorrect result: got %s, want %s", result, expectedHex)
- }
-}
diff --git a/ssl/test/runner/curve25519/doc.go b/ssl/test/runner/curve25519/doc.go
deleted file mode 100644
index ebeea3c..0000000
--- a/ssl/test/runner/curve25519/doc.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Package curve25519 provides an implementation of scalar multiplication on
-// the elliptic curve known as curve25519. See http://cr.yp.to/ecdh.html
-package curve25519 // import "golang.org/x/crypto/curve25519"
-
-// basePoint is the x coordinate of the generator of the curve.
-var basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
-
-// ScalarMult sets dst to the product in*base where dst and base are the x
-// coordinates of group points and all values are in little-endian form.
-func ScalarMult(dst, in, base *[32]byte) {
- scalarMult(dst, in, base)
-}
-
-// ScalarBaseMult sets dst to the product in*base where dst and base are the x
-// coordinates of group points, base is the standard generator and all values
-// are in little-endian form.
-func ScalarBaseMult(dst, in *[32]byte) {
- ScalarMult(dst, in, &basePoint)
-}
diff --git a/ssl/test/runner/curve25519/freeze_amd64.s b/ssl/test/runner/curve25519/freeze_amd64.s
deleted file mode 100644
index 536479b..0000000
--- a/ssl/test/runner/curve25519/freeze_amd64.s
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-#include "const_amd64.h"
-
-// func freeze(inout *[5]uint64)
-TEXT ·freeze(SB),7,$0-8
- MOVQ inout+0(FP), DI
-
- MOVQ 0(DI),SI
- MOVQ 8(DI),DX
- MOVQ 16(DI),CX
- MOVQ 24(DI),R8
- MOVQ 32(DI),R9
- MOVQ $REDMASK51,AX
- MOVQ AX,R10
- SUBQ $18,R10
- MOVQ $3,R11
-REDUCELOOP:
- MOVQ SI,R12
- SHRQ $51,R12
- ANDQ AX,SI
- ADDQ R12,DX
- MOVQ DX,R12
- SHRQ $51,R12
- ANDQ AX,DX
- ADDQ R12,CX
- MOVQ CX,R12
- SHRQ $51,R12
- ANDQ AX,CX
- ADDQ R12,R8
- MOVQ R8,R12
- SHRQ $51,R12
- ANDQ AX,R8
- ADDQ R12,R9
- MOVQ R9,R12
- SHRQ $51,R12
- ANDQ AX,R9
- IMUL3Q $19,R12,R12
- ADDQ R12,SI
- SUBQ $1,R11
- JA REDUCELOOP
- MOVQ $1,R12
- CMPQ R10,SI
- CMOVQLT R11,R12
- CMPQ AX,DX
- CMOVQNE R11,R12
- CMPQ AX,CX
- CMOVQNE R11,R12
- CMPQ AX,R8
- CMOVQNE R11,R12
- CMPQ AX,R9
- CMOVQNE R11,R12
- NEGQ R12
- ANDQ R12,AX
- ANDQ R12,R10
- SUBQ R10,SI
- SUBQ AX,DX
- SUBQ AX,CX
- SUBQ AX,R8
- SUBQ AX,R9
- MOVQ SI,0(DI)
- MOVQ DX,8(DI)
- MOVQ CX,16(DI)
- MOVQ R8,24(DI)
- MOVQ R9,32(DI)
- RET
diff --git a/ssl/test/runner/curve25519/ladderstep_amd64.s b/ssl/test/runner/curve25519/ladderstep_amd64.s
deleted file mode 100644
index 7074e5c..0000000
--- a/ssl/test/runner/curve25519/ladderstep_amd64.s
+++ /dev/null
@@ -1,1377 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-#include "const_amd64.h"
-
-// func ladderstep(inout *[5][5]uint64)
-TEXT ·ladderstep(SB),0,$296-8
- MOVQ inout+0(FP),DI
-
- MOVQ 40(DI),SI
- MOVQ 48(DI),DX
- MOVQ 56(DI),CX
- MOVQ 64(DI),R8
- MOVQ 72(DI),R9
- MOVQ SI,AX
- MOVQ DX,R10
- MOVQ CX,R11
- MOVQ R8,R12
- MOVQ R9,R13
- ADDQ ·_2P0(SB),AX
- ADDQ ·_2P1234(SB),R10
- ADDQ ·_2P1234(SB),R11
- ADDQ ·_2P1234(SB),R12
- ADDQ ·_2P1234(SB),R13
- ADDQ 80(DI),SI
- ADDQ 88(DI),DX
- ADDQ 96(DI),CX
- ADDQ 104(DI),R8
- ADDQ 112(DI),R9
- SUBQ 80(DI),AX
- SUBQ 88(DI),R10
- SUBQ 96(DI),R11
- SUBQ 104(DI),R12
- SUBQ 112(DI),R13
- MOVQ SI,0(SP)
- MOVQ DX,8(SP)
- MOVQ CX,16(SP)
- MOVQ R8,24(SP)
- MOVQ R9,32(SP)
- MOVQ AX,40(SP)
- MOVQ R10,48(SP)
- MOVQ R11,56(SP)
- MOVQ R12,64(SP)
- MOVQ R13,72(SP)
- MOVQ 40(SP),AX
- MULQ 40(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 40(SP),AX
- SHLQ $1,AX
- MULQ 48(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 40(SP),AX
- SHLQ $1,AX
- MULQ 56(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 40(SP),AX
- SHLQ $1,AX
- MULQ 64(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 40(SP),AX
- SHLQ $1,AX
- MULQ 72(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 48(SP),AX
- MULQ 48(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 48(SP),AX
- SHLQ $1,AX
- MULQ 56(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 48(SP),AX
- SHLQ $1,AX
- MULQ 64(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 48(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 72(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 56(SP),AX
- MULQ 56(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 56(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 64(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 56(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 72(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 64(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 64(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 64(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 72(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 72(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 72(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- ANDQ DX,SI
- MOVQ CX,R8
- SHRQ $51,CX
- ADDQ R10,CX
- ANDQ DX,R8
- MOVQ CX,R9
- SHRQ $51,CX
- ADDQ R12,CX
- ANDQ DX,R9
- MOVQ CX,AX
- SHRQ $51,CX
- ADDQ R14,CX
- ANDQ DX,AX
- MOVQ CX,R10
- SHRQ $51,CX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,80(SP)
- MOVQ R8,88(SP)
- MOVQ R9,96(SP)
- MOVQ AX,104(SP)
- MOVQ R10,112(SP)
- MOVQ 0(SP),AX
- MULQ 0(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 0(SP),AX
- SHLQ $1,AX
- MULQ 8(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 0(SP),AX
- SHLQ $1,AX
- MULQ 16(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 0(SP),AX
- SHLQ $1,AX
- MULQ 24(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 0(SP),AX
- SHLQ $1,AX
- MULQ 32(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 8(SP),AX
- MULQ 8(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SP),AX
- SHLQ $1,AX
- MULQ 16(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 8(SP),AX
- SHLQ $1,AX
- MULQ 24(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 8(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 16(SP),AX
- MULQ 16(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 16(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 24(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 16(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 24(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 24(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 24(SP),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 32(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 32(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- ANDQ DX,SI
- MOVQ CX,R8
- SHRQ $51,CX
- ADDQ R10,CX
- ANDQ DX,R8
- MOVQ CX,R9
- SHRQ $51,CX
- ADDQ R12,CX
- ANDQ DX,R9
- MOVQ CX,AX
- SHRQ $51,CX
- ADDQ R14,CX
- ANDQ DX,AX
- MOVQ CX,R10
- SHRQ $51,CX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,120(SP)
- MOVQ R8,128(SP)
- MOVQ R9,136(SP)
- MOVQ AX,144(SP)
- MOVQ R10,152(SP)
- MOVQ SI,SI
- MOVQ R8,DX
- MOVQ R9,CX
- MOVQ AX,R8
- MOVQ R10,R9
- ADDQ ·_2P0(SB),SI
- ADDQ ·_2P1234(SB),DX
- ADDQ ·_2P1234(SB),CX
- ADDQ ·_2P1234(SB),R8
- ADDQ ·_2P1234(SB),R9
- SUBQ 80(SP),SI
- SUBQ 88(SP),DX
- SUBQ 96(SP),CX
- SUBQ 104(SP),R8
- SUBQ 112(SP),R9
- MOVQ SI,160(SP)
- MOVQ DX,168(SP)
- MOVQ CX,176(SP)
- MOVQ R8,184(SP)
- MOVQ R9,192(SP)
- MOVQ 120(DI),SI
- MOVQ 128(DI),DX
- MOVQ 136(DI),CX
- MOVQ 144(DI),R8
- MOVQ 152(DI),R9
- MOVQ SI,AX
- MOVQ DX,R10
- MOVQ CX,R11
- MOVQ R8,R12
- MOVQ R9,R13
- ADDQ ·_2P0(SB),AX
- ADDQ ·_2P1234(SB),R10
- ADDQ ·_2P1234(SB),R11
- ADDQ ·_2P1234(SB),R12
- ADDQ ·_2P1234(SB),R13
- ADDQ 160(DI),SI
- ADDQ 168(DI),DX
- ADDQ 176(DI),CX
- ADDQ 184(DI),R8
- ADDQ 192(DI),R9
- SUBQ 160(DI),AX
- SUBQ 168(DI),R10
- SUBQ 176(DI),R11
- SUBQ 184(DI),R12
- SUBQ 192(DI),R13
- MOVQ SI,200(SP)
- MOVQ DX,208(SP)
- MOVQ CX,216(SP)
- MOVQ R8,224(SP)
- MOVQ R9,232(SP)
- MOVQ AX,240(SP)
- MOVQ R10,248(SP)
- MOVQ R11,256(SP)
- MOVQ R12,264(SP)
- MOVQ R13,272(SP)
- MOVQ 224(SP),SI
- IMUL3Q $19,SI,AX
- MOVQ AX,280(SP)
- MULQ 56(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 232(SP),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,288(SP)
- MULQ 48(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 200(SP),AX
- MULQ 40(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 200(SP),AX
- MULQ 48(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 200(SP),AX
- MULQ 56(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 200(SP),AX
- MULQ 64(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 200(SP),AX
- MULQ 72(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 208(SP),AX
- MULQ 40(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 208(SP),AX
- MULQ 48(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 208(SP),AX
- MULQ 56(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 208(SP),AX
- MULQ 64(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 208(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 72(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 216(SP),AX
- MULQ 40(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 216(SP),AX
- MULQ 48(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 216(SP),AX
- MULQ 56(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 216(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 64(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 216(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 72(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 224(SP),AX
- MULQ 40(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 224(SP),AX
- MULQ 48(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 280(SP),AX
- MULQ 64(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 280(SP),AX
- MULQ 72(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 232(SP),AX
- MULQ 40(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 288(SP),AX
- MULQ 56(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 288(SP),AX
- MULQ 64(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 288(SP),AX
- MULQ 72(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- MOVQ CX,R8
- SHRQ $51,CX
- ANDQ DX,SI
- ADDQ R10,CX
- MOVQ CX,R9
- SHRQ $51,CX
- ANDQ DX,R8
- ADDQ R12,CX
- MOVQ CX,AX
- SHRQ $51,CX
- ANDQ DX,R9
- ADDQ R14,CX
- MOVQ CX,R10
- SHRQ $51,CX
- ANDQ DX,AX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,40(SP)
- MOVQ R8,48(SP)
- MOVQ R9,56(SP)
- MOVQ AX,64(SP)
- MOVQ R10,72(SP)
- MOVQ 264(SP),SI
- IMUL3Q $19,SI,AX
- MOVQ AX,200(SP)
- MULQ 16(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 272(SP),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,208(SP)
- MULQ 8(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 240(SP),AX
- MULQ 0(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 240(SP),AX
- MULQ 8(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 240(SP),AX
- MULQ 16(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 240(SP),AX
- MULQ 24(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 240(SP),AX
- MULQ 32(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 248(SP),AX
- MULQ 0(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 248(SP),AX
- MULQ 8(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 248(SP),AX
- MULQ 16(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 248(SP),AX
- MULQ 24(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 248(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 32(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 256(SP),AX
- MULQ 0(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 256(SP),AX
- MULQ 8(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 256(SP),AX
- MULQ 16(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 256(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 24(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 256(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 32(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 264(SP),AX
- MULQ 0(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 264(SP),AX
- MULQ 8(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 200(SP),AX
- MULQ 24(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 200(SP),AX
- MULQ 32(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 272(SP),AX
- MULQ 0(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 208(SP),AX
- MULQ 16(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 208(SP),AX
- MULQ 24(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 208(SP),AX
- MULQ 32(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- MOVQ CX,R8
- SHRQ $51,CX
- ANDQ DX,SI
- ADDQ R10,CX
- MOVQ CX,R9
- SHRQ $51,CX
- ANDQ DX,R8
- ADDQ R12,CX
- MOVQ CX,AX
- SHRQ $51,CX
- ANDQ DX,R9
- ADDQ R14,CX
- MOVQ CX,R10
- SHRQ $51,CX
- ANDQ DX,AX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,DX
- MOVQ R8,CX
- MOVQ R9,R11
- MOVQ AX,R12
- MOVQ R10,R13
- ADDQ ·_2P0(SB),DX
- ADDQ ·_2P1234(SB),CX
- ADDQ ·_2P1234(SB),R11
- ADDQ ·_2P1234(SB),R12
- ADDQ ·_2P1234(SB),R13
- ADDQ 40(SP),SI
- ADDQ 48(SP),R8
- ADDQ 56(SP),R9
- ADDQ 64(SP),AX
- ADDQ 72(SP),R10
- SUBQ 40(SP),DX
- SUBQ 48(SP),CX
- SUBQ 56(SP),R11
- SUBQ 64(SP),R12
- SUBQ 72(SP),R13
- MOVQ SI,120(DI)
- MOVQ R8,128(DI)
- MOVQ R9,136(DI)
- MOVQ AX,144(DI)
- MOVQ R10,152(DI)
- MOVQ DX,160(DI)
- MOVQ CX,168(DI)
- MOVQ R11,176(DI)
- MOVQ R12,184(DI)
- MOVQ R13,192(DI)
- MOVQ 120(DI),AX
- MULQ 120(DI)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 120(DI),AX
- SHLQ $1,AX
- MULQ 128(DI)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 120(DI),AX
- SHLQ $1,AX
- MULQ 136(DI)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 120(DI),AX
- SHLQ $1,AX
- MULQ 144(DI)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 120(DI),AX
- SHLQ $1,AX
- MULQ 152(DI)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 128(DI),AX
- MULQ 128(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 128(DI),AX
- SHLQ $1,AX
- MULQ 136(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 128(DI),AX
- SHLQ $1,AX
- MULQ 144(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 128(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 152(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 136(DI),AX
- MULQ 136(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 136(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 144(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 136(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 152(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 144(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 144(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 144(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 152(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 152(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 152(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- ANDQ DX,SI
- MOVQ CX,R8
- SHRQ $51,CX
- ADDQ R10,CX
- ANDQ DX,R8
- MOVQ CX,R9
- SHRQ $51,CX
- ADDQ R12,CX
- ANDQ DX,R9
- MOVQ CX,AX
- SHRQ $51,CX
- ADDQ R14,CX
- ANDQ DX,AX
- MOVQ CX,R10
- SHRQ $51,CX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,120(DI)
- MOVQ R8,128(DI)
- MOVQ R9,136(DI)
- MOVQ AX,144(DI)
- MOVQ R10,152(DI)
- MOVQ 160(DI),AX
- MULQ 160(DI)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 160(DI),AX
- SHLQ $1,AX
- MULQ 168(DI)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 160(DI),AX
- SHLQ $1,AX
- MULQ 176(DI)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 160(DI),AX
- SHLQ $1,AX
- MULQ 184(DI)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 160(DI),AX
- SHLQ $1,AX
- MULQ 192(DI)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 168(DI),AX
- MULQ 168(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 168(DI),AX
- SHLQ $1,AX
- MULQ 176(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 168(DI),AX
- SHLQ $1,AX
- MULQ 184(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 168(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 192(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 176(DI),AX
- MULQ 176(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 176(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 184(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 176(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 192(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 184(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 184(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 184(DI),DX
- IMUL3Q $38,DX,AX
- MULQ 192(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 192(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 192(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- ANDQ DX,SI
- MOVQ CX,R8
- SHRQ $51,CX
- ADDQ R10,CX
- ANDQ DX,R8
- MOVQ CX,R9
- SHRQ $51,CX
- ADDQ R12,CX
- ANDQ DX,R9
- MOVQ CX,AX
- SHRQ $51,CX
- ADDQ R14,CX
- ANDQ DX,AX
- MOVQ CX,R10
- SHRQ $51,CX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,160(DI)
- MOVQ R8,168(DI)
- MOVQ R9,176(DI)
- MOVQ AX,184(DI)
- MOVQ R10,192(DI)
- MOVQ 184(DI),SI
- IMUL3Q $19,SI,AX
- MOVQ AX,0(SP)
- MULQ 16(DI)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 192(DI),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,8(SP)
- MULQ 8(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 160(DI),AX
- MULQ 0(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 160(DI),AX
- MULQ 8(DI)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 160(DI),AX
- MULQ 16(DI)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 160(DI),AX
- MULQ 24(DI)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 160(DI),AX
- MULQ 32(DI)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 168(DI),AX
- MULQ 0(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 168(DI),AX
- MULQ 8(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 168(DI),AX
- MULQ 16(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 168(DI),AX
- MULQ 24(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 168(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 32(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 176(DI),AX
- MULQ 0(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 176(DI),AX
- MULQ 8(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 176(DI),AX
- MULQ 16(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 176(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 24(DI)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 176(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 32(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 184(DI),AX
- MULQ 0(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 184(DI),AX
- MULQ 8(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 0(SP),AX
- MULQ 24(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 0(SP),AX
- MULQ 32(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 192(DI),AX
- MULQ 0(DI)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 8(SP),AX
- MULQ 16(DI)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 8(SP),AX
- MULQ 24(DI)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SP),AX
- MULQ 32(DI)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- MOVQ CX,R8
- SHRQ $51,CX
- ANDQ DX,SI
- ADDQ R10,CX
- MOVQ CX,R9
- SHRQ $51,CX
- ANDQ DX,R8
- ADDQ R12,CX
- MOVQ CX,AX
- SHRQ $51,CX
- ANDQ DX,R9
- ADDQ R14,CX
- MOVQ CX,R10
- SHRQ $51,CX
- ANDQ DX,AX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,160(DI)
- MOVQ R8,168(DI)
- MOVQ R9,176(DI)
- MOVQ AX,184(DI)
- MOVQ R10,192(DI)
- MOVQ 144(SP),SI
- IMUL3Q $19,SI,AX
- MOVQ AX,0(SP)
- MULQ 96(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 152(SP),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,8(SP)
- MULQ 88(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 120(SP),AX
- MULQ 80(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 120(SP),AX
- MULQ 88(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 120(SP),AX
- MULQ 96(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 120(SP),AX
- MULQ 104(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 120(SP),AX
- MULQ 112(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 128(SP),AX
- MULQ 80(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 128(SP),AX
- MULQ 88(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 128(SP),AX
- MULQ 96(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 128(SP),AX
- MULQ 104(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 128(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 112(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 136(SP),AX
- MULQ 80(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 136(SP),AX
- MULQ 88(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 136(SP),AX
- MULQ 96(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 136(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 104(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 136(SP),DX
- IMUL3Q $19,DX,AX
- MULQ 112(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 144(SP),AX
- MULQ 80(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 144(SP),AX
- MULQ 88(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 0(SP),AX
- MULQ 104(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 0(SP),AX
- MULQ 112(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 152(SP),AX
- MULQ 80(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 8(SP),AX
- MULQ 96(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 8(SP),AX
- MULQ 104(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SP),AX
- MULQ 112(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- MOVQ CX,R8
- SHRQ $51,CX
- ANDQ DX,SI
- ADDQ R10,CX
- MOVQ CX,R9
- SHRQ $51,CX
- ANDQ DX,R8
- ADDQ R12,CX
- MOVQ CX,AX
- SHRQ $51,CX
- ANDQ DX,R9
- ADDQ R14,CX
- MOVQ CX,R10
- SHRQ $51,CX
- ANDQ DX,AX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,40(DI)
- MOVQ R8,48(DI)
- MOVQ R9,56(DI)
- MOVQ AX,64(DI)
- MOVQ R10,72(DI)
- MOVQ 160(SP),AX
- MULQ ·_121666_213(SB)
- SHRQ $13,AX
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 168(SP),AX
- MULQ ·_121666_213(SB)
- SHRQ $13,AX
- ADDQ AX,CX
- MOVQ DX,R8
- MOVQ 176(SP),AX
- MULQ ·_121666_213(SB)
- SHRQ $13,AX
- ADDQ AX,R8
- MOVQ DX,R9
- MOVQ 184(SP),AX
- MULQ ·_121666_213(SB)
- SHRQ $13,AX
- ADDQ AX,R9
- MOVQ DX,R10
- MOVQ 192(SP),AX
- MULQ ·_121666_213(SB)
- SHRQ $13,AX
- ADDQ AX,R10
- IMUL3Q $19,DX,DX
- ADDQ DX,SI
- ADDQ 80(SP),SI
- ADDQ 88(SP),CX
- ADDQ 96(SP),R8
- ADDQ 104(SP),R9
- ADDQ 112(SP),R10
- MOVQ SI,80(DI)
- MOVQ CX,88(DI)
- MOVQ R8,96(DI)
- MOVQ R9,104(DI)
- MOVQ R10,112(DI)
- MOVQ 104(DI),SI
- IMUL3Q $19,SI,AX
- MOVQ AX,0(SP)
- MULQ 176(SP)
- MOVQ AX,SI
- MOVQ DX,CX
- MOVQ 112(DI),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,8(SP)
- MULQ 168(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 80(DI),AX
- MULQ 160(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 80(DI),AX
- MULQ 168(SP)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 80(DI),AX
- MULQ 176(SP)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 80(DI),AX
- MULQ 184(SP)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 80(DI),AX
- MULQ 192(SP)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 88(DI),AX
- MULQ 160(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 88(DI),AX
- MULQ 168(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 88(DI),AX
- MULQ 176(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 88(DI),AX
- MULQ 184(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 88(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 192(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 96(DI),AX
- MULQ 160(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 96(DI),AX
- MULQ 168(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 96(DI),AX
- MULQ 176(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 96(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 184(SP)
- ADDQ AX,SI
- ADCQ DX,CX
- MOVQ 96(DI),DX
- IMUL3Q $19,DX,AX
- MULQ 192(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 104(DI),AX
- MULQ 160(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 104(DI),AX
- MULQ 168(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 0(SP),AX
- MULQ 184(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 0(SP),AX
- MULQ 192(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 112(DI),AX
- MULQ 160(SP)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 8(SP),AX
- MULQ 176(SP)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 8(SP),AX
- MULQ 184(SP)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SP),AX
- MULQ 192(SP)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ $REDMASK51,DX
- SHLQ $13,CX:SI
- ANDQ DX,SI
- SHLQ $13,R9:R8
- ANDQ DX,R8
- ADDQ CX,R8
- SHLQ $13,R11:R10
- ANDQ DX,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ DX,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ DX,R14
- ADDQ R13,R14
- IMUL3Q $19,R15,CX
- ADDQ CX,SI
- MOVQ SI,CX
- SHRQ $51,CX
- ADDQ R8,CX
- MOVQ CX,R8
- SHRQ $51,CX
- ANDQ DX,SI
- ADDQ R10,CX
- MOVQ CX,R9
- SHRQ $51,CX
- ANDQ DX,R8
- ADDQ R12,CX
- MOVQ CX,AX
- SHRQ $51,CX
- ANDQ DX,R9
- ADDQ R14,CX
- MOVQ CX,R10
- SHRQ $51,CX
- ANDQ DX,AX
- IMUL3Q $19,CX,CX
- ADDQ CX,SI
- ANDQ DX,R10
- MOVQ SI,80(DI)
- MOVQ R8,88(DI)
- MOVQ R9,96(DI)
- MOVQ AX,104(DI)
- MOVQ R10,112(DI)
- RET
diff --git a/ssl/test/runner/curve25519/mont25519_amd64.go b/ssl/test/runner/curve25519/mont25519_amd64.go
deleted file mode 100644
index 5822bd5..0000000
--- a/ssl/test/runner/curve25519/mont25519_amd64.go
+++ /dev/null
@@ -1,240 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build amd64,!gccgo,!appengine
-
-package curve25519
-
-// These functions are implemented in the .s files. The names of the functions
-// in the rest of the file are also taken from the SUPERCOP sources to help
-// people following along.
-
-//go:noescape
-
-func cswap(inout *[5]uint64, v uint64)
-
-//go:noescape
-
-func ladderstep(inout *[5][5]uint64)
-
-//go:noescape
-
-func freeze(inout *[5]uint64)
-
-//go:noescape
-
-func mul(dest, a, b *[5]uint64)
-
-//go:noescape
-
-func square(out, in *[5]uint64)
-
-// mladder uses a Montgomery ladder to calculate (xr/zr) *= s.
-func mladder(xr, zr *[5]uint64, s *[32]byte) {
- var work [5][5]uint64
-
- work[0] = *xr
- setint(&work[1], 1)
- setint(&work[2], 0)
- work[3] = *xr
- setint(&work[4], 1)
-
- j := uint(6)
- var prevbit byte
-
- for i := 31; i >= 0; i-- {
- for j < 8 {
- bit := ((*s)[i] >> j) & 1
- swap := bit ^ prevbit
- prevbit = bit
- cswap(&work[1], uint64(swap))
- ladderstep(&work)
- j--
- }
- j = 7
- }
-
- *xr = work[1]
- *zr = work[2]
-}
-
-func scalarMult(out, in, base *[32]byte) {
- var e [32]byte
- copy(e[:], (*in)[:])
- e[0] &= 248
- e[31] &= 127
- e[31] |= 64
-
- var t, z [5]uint64
- unpack(&t, base)
- mladder(&t, &z, &e)
- invert(&z, &z)
- mul(&t, &t, &z)
- pack(out, &t)
-}
-
-func setint(r *[5]uint64, v uint64) {
- r[0] = v
- r[1] = 0
- r[2] = 0
- r[3] = 0
- r[4] = 0
-}
-
-// unpack sets r = x where r consists of 5, 51-bit limbs in little-endian
-// order.
-func unpack(r *[5]uint64, x *[32]byte) {
- r[0] = uint64(x[0]) |
- uint64(x[1])<<8 |
- uint64(x[2])<<16 |
- uint64(x[3])<<24 |
- uint64(x[4])<<32 |
- uint64(x[5])<<40 |
- uint64(x[6]&7)<<48
-
- r[1] = uint64(x[6])>>3 |
- uint64(x[7])<<5 |
- uint64(x[8])<<13 |
- uint64(x[9])<<21 |
- uint64(x[10])<<29 |
- uint64(x[11])<<37 |
- uint64(x[12]&63)<<45
-
- r[2] = uint64(x[12])>>6 |
- uint64(x[13])<<2 |
- uint64(x[14])<<10 |
- uint64(x[15])<<18 |
- uint64(x[16])<<26 |
- uint64(x[17])<<34 |
- uint64(x[18])<<42 |
- uint64(x[19]&1)<<50
-
- r[3] = uint64(x[19])>>1 |
- uint64(x[20])<<7 |
- uint64(x[21])<<15 |
- uint64(x[22])<<23 |
- uint64(x[23])<<31 |
- uint64(x[24])<<39 |
- uint64(x[25]&15)<<47
-
- r[4] = uint64(x[25])>>4 |
- uint64(x[26])<<4 |
- uint64(x[27])<<12 |
- uint64(x[28])<<20 |
- uint64(x[29])<<28 |
- uint64(x[30])<<36 |
- uint64(x[31]&127)<<44
-}
-
-// pack sets out = x where out is the usual, little-endian form of the 5,
-// 51-bit limbs in x.
-func pack(out *[32]byte, x *[5]uint64) {
- t := *x
- freeze(&t)
-
- out[0] = byte(t[0])
- out[1] = byte(t[0] >> 8)
- out[2] = byte(t[0] >> 16)
- out[3] = byte(t[0] >> 24)
- out[4] = byte(t[0] >> 32)
- out[5] = byte(t[0] >> 40)
- out[6] = byte(t[0] >> 48)
-
- out[6] ^= byte(t[1]<<3) & 0xf8
- out[7] = byte(t[1] >> 5)
- out[8] = byte(t[1] >> 13)
- out[9] = byte(t[1] >> 21)
- out[10] = byte(t[1] >> 29)
- out[11] = byte(t[1] >> 37)
- out[12] = byte(t[1] >> 45)
-
- out[12] ^= byte(t[2]<<6) & 0xc0
- out[13] = byte(t[2] >> 2)
- out[14] = byte(t[2] >> 10)
- out[15] = byte(t[2] >> 18)
- out[16] = byte(t[2] >> 26)
- out[17] = byte(t[2] >> 34)
- out[18] = byte(t[2] >> 42)
- out[19] = byte(t[2] >> 50)
-
- out[19] ^= byte(t[3]<<1) & 0xfe
- out[20] = byte(t[3] >> 7)
- out[21] = byte(t[3] >> 15)
- out[22] = byte(t[3] >> 23)
- out[23] = byte(t[3] >> 31)
- out[24] = byte(t[3] >> 39)
- out[25] = byte(t[3] >> 47)
-
- out[25] ^= byte(t[4]<<4) & 0xf0
- out[26] = byte(t[4] >> 4)
- out[27] = byte(t[4] >> 12)
- out[28] = byte(t[4] >> 20)
- out[29] = byte(t[4] >> 28)
- out[30] = byte(t[4] >> 36)
- out[31] = byte(t[4] >> 44)
-}
-
-// invert calculates r = x^-1 mod p using Fermat's little theorem.
-func invert(r *[5]uint64, x *[5]uint64) {
- var z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t [5]uint64
-
- square(&z2, x) /* 2 */
- square(&t, &z2) /* 4 */
- square(&t, &t) /* 8 */
- mul(&z9, &t, x) /* 9 */
- mul(&z11, &z9, &z2) /* 11 */
- square(&t, &z11) /* 22 */
- mul(&z2_5_0, &t, &z9) /* 2^5 - 2^0 = 31 */
-
- square(&t, &z2_5_0) /* 2^6 - 2^1 */
- for i := 1; i < 5; i++ { /* 2^20 - 2^10 */
- square(&t, &t)
- }
- mul(&z2_10_0, &t, &z2_5_0) /* 2^10 - 2^0 */
-
- square(&t, &z2_10_0) /* 2^11 - 2^1 */
- for i := 1; i < 10; i++ { /* 2^20 - 2^10 */
- square(&t, &t)
- }
- mul(&z2_20_0, &t, &z2_10_0) /* 2^20 - 2^0 */
-
- square(&t, &z2_20_0) /* 2^21 - 2^1 */
- for i := 1; i < 20; i++ { /* 2^40 - 2^20 */
- square(&t, &t)
- }
- mul(&t, &t, &z2_20_0) /* 2^40 - 2^0 */
-
- square(&t, &t) /* 2^41 - 2^1 */
- for i := 1; i < 10; i++ { /* 2^50 - 2^10 */
- square(&t, &t)
- }
- mul(&z2_50_0, &t, &z2_10_0) /* 2^50 - 2^0 */
-
- square(&t, &z2_50_0) /* 2^51 - 2^1 */
- for i := 1; i < 50; i++ { /* 2^100 - 2^50 */
- square(&t, &t)
- }
- mul(&z2_100_0, &t, &z2_50_0) /* 2^100 - 2^0 */
-
- square(&t, &z2_100_0) /* 2^101 - 2^1 */
- for i := 1; i < 100; i++ { /* 2^200 - 2^100 */
- square(&t, &t)
- }
- mul(&t, &t, &z2_100_0) /* 2^200 - 2^0 */
-
- square(&t, &t) /* 2^201 - 2^1 */
- for i := 1; i < 50; i++ { /* 2^250 - 2^50 */
- square(&t, &t)
- }
- mul(&t, &t, &z2_50_0) /* 2^250 - 2^0 */
-
- square(&t, &t) /* 2^251 - 2^1 */
- square(&t, &t) /* 2^252 - 2^2 */
- square(&t, &t) /* 2^253 - 2^3 */
-
- square(&t, &t) /* 2^254 - 2^4 */
-
- square(&t, &t) /* 2^255 - 2^5 */
- mul(r, &t, &z11) /* 2^255 - 21 */
-}
diff --git a/ssl/test/runner/curve25519/mul_amd64.s b/ssl/test/runner/curve25519/mul_amd64.s
deleted file mode 100644
index b162e65..0000000
--- a/ssl/test/runner/curve25519/mul_amd64.s
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-#include "const_amd64.h"
-
-// func mul(dest, a, b *[5]uint64)
-TEXT ·mul(SB),0,$16-24
- MOVQ dest+0(FP), DI
- MOVQ a+8(FP), SI
- MOVQ b+16(FP), DX
-
- MOVQ DX,CX
- MOVQ 24(SI),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,0(SP)
- MULQ 16(CX)
- MOVQ AX,R8
- MOVQ DX,R9
- MOVQ 32(SI),DX
- IMUL3Q $19,DX,AX
- MOVQ AX,8(SP)
- MULQ 8(CX)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 0(SI),AX
- MULQ 0(CX)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 0(SI),AX
- MULQ 8(CX)
- MOVQ AX,R10
- MOVQ DX,R11
- MOVQ 0(SI),AX
- MULQ 16(CX)
- MOVQ AX,R12
- MOVQ DX,R13
- MOVQ 0(SI),AX
- MULQ 24(CX)
- MOVQ AX,R14
- MOVQ DX,R15
- MOVQ 0(SI),AX
- MULQ 32(CX)
- MOVQ AX,BX
- MOVQ DX,BP
- MOVQ 8(SI),AX
- MULQ 0(CX)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SI),AX
- MULQ 8(CX)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 8(SI),AX
- MULQ 16(CX)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 8(SI),AX
- MULQ 24(CX)
- ADDQ AX,BX
- ADCQ DX,BP
- MOVQ 8(SI),DX
- IMUL3Q $19,DX,AX
- MULQ 32(CX)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 16(SI),AX
- MULQ 0(CX)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 16(SI),AX
- MULQ 8(CX)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 16(SI),AX
- MULQ 16(CX)
- ADDQ AX,BX
- ADCQ DX,BP
- MOVQ 16(SI),DX
- IMUL3Q $19,DX,AX
- MULQ 24(CX)
- ADDQ AX,R8
- ADCQ DX,R9
- MOVQ 16(SI),DX
- IMUL3Q $19,DX,AX
- MULQ 32(CX)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 24(SI),AX
- MULQ 0(CX)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ 24(SI),AX
- MULQ 8(CX)
- ADDQ AX,BX
- ADCQ DX,BP
- MOVQ 0(SP),AX
- MULQ 24(CX)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 0(SP),AX
- MULQ 32(CX)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 32(SI),AX
- MULQ 0(CX)
- ADDQ AX,BX
- ADCQ DX,BP
- MOVQ 8(SP),AX
- MULQ 16(CX)
- ADDQ AX,R10
- ADCQ DX,R11
- MOVQ 8(SP),AX
- MULQ 24(CX)
- ADDQ AX,R12
- ADCQ DX,R13
- MOVQ 8(SP),AX
- MULQ 32(CX)
- ADDQ AX,R14
- ADCQ DX,R15
- MOVQ $REDMASK51,SI
- SHLQ $13,R9:R8
- ANDQ SI,R8
- SHLQ $13,R11:R10
- ANDQ SI,R10
- ADDQ R9,R10
- SHLQ $13,R13:R12
- ANDQ SI,R12
- ADDQ R11,R12
- SHLQ $13,R15:R14
- ANDQ SI,R14
- ADDQ R13,R14
- SHLQ $13,BP:BX
- ANDQ SI,BX
- ADDQ R15,BX
- IMUL3Q $19,BP,DX
- ADDQ DX,R8
- MOVQ R8,DX
- SHRQ $51,DX
- ADDQ R10,DX
- MOVQ DX,CX
- SHRQ $51,DX
- ANDQ SI,R8
- ADDQ R12,DX
- MOVQ DX,R9
- SHRQ $51,DX
- ANDQ SI,CX
- ADDQ R14,DX
- MOVQ DX,AX
- SHRQ $51,DX
- ANDQ SI,R9
- ADDQ BX,DX
- MOVQ DX,R10
- SHRQ $51,DX
- ANDQ SI,AX
- IMUL3Q $19,DX,DX
- ADDQ DX,R8
- ANDQ SI,R10
- MOVQ R8,0(DI)
- MOVQ CX,8(DI)
- MOVQ R9,16(DI)
- MOVQ AX,24(DI)
- MOVQ R10,32(DI)
- RET
diff --git a/ssl/test/runner/curve25519/square_amd64.s b/ssl/test/runner/curve25519/square_amd64.s
deleted file mode 100644
index 4e864a8..0000000
--- a/ssl/test/runner/curve25519/square_amd64.s
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// This code was translated into a form compatible with 6a from the public
-// domain sources in SUPERCOP: http://bench.cr.yp.to/supercop.html
-
-// +build amd64,!gccgo,!appengine
-
-#include "const_amd64.h"
-
-// func square(out, in *[5]uint64)
-TEXT ·square(SB),7,$0-16
- MOVQ out+0(FP), DI
- MOVQ in+8(FP), SI
-
- MOVQ 0(SI),AX
- MULQ 0(SI)
- MOVQ AX,CX
- MOVQ DX,R8
- MOVQ 0(SI),AX
- SHLQ $1,AX
- MULQ 8(SI)
- MOVQ AX,R9
- MOVQ DX,R10
- MOVQ 0(SI),AX
- SHLQ $1,AX
- MULQ 16(SI)
- MOVQ AX,R11
- MOVQ DX,R12
- MOVQ 0(SI),AX
- SHLQ $1,AX
- MULQ 24(SI)
- MOVQ AX,R13
- MOVQ DX,R14
- MOVQ 0(SI),AX
- SHLQ $1,AX
- MULQ 32(SI)
- MOVQ AX,R15
- MOVQ DX,BX
- MOVQ 8(SI),AX
- MULQ 8(SI)
- ADDQ AX,R11
- ADCQ DX,R12
- MOVQ 8(SI),AX
- SHLQ $1,AX
- MULQ 16(SI)
- ADDQ AX,R13
- ADCQ DX,R14
- MOVQ 8(SI),AX
- SHLQ $1,AX
- MULQ 24(SI)
- ADDQ AX,R15
- ADCQ DX,BX
- MOVQ 8(SI),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SI)
- ADDQ AX,CX
- ADCQ DX,R8
- MOVQ 16(SI),AX
- MULQ 16(SI)
- ADDQ AX,R15
- ADCQ DX,BX
- MOVQ 16(SI),DX
- IMUL3Q $38,DX,AX
- MULQ 24(SI)
- ADDQ AX,CX
- ADCQ DX,R8
- MOVQ 16(SI),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SI)
- ADDQ AX,R9
- ADCQ DX,R10
- MOVQ 24(SI),DX
- IMUL3Q $19,DX,AX
- MULQ 24(SI)
- ADDQ AX,R9
- ADCQ DX,R10
- MOVQ 24(SI),DX
- IMUL3Q $38,DX,AX
- MULQ 32(SI)
- ADDQ AX,R11
- ADCQ DX,R12
- MOVQ 32(SI),DX
- IMUL3Q $19,DX,AX
- MULQ 32(SI)
- ADDQ AX,R13
- ADCQ DX,R14
- MOVQ $REDMASK51,SI
- SHLQ $13,R8:CX
- ANDQ SI,CX
- SHLQ $13,R10:R9
- ANDQ SI,R9
- ADDQ R8,R9
- SHLQ $13,R12:R11
- ANDQ SI,R11
- ADDQ R10,R11
- SHLQ $13,R14:R13
- ANDQ SI,R13
- ADDQ R12,R13
- SHLQ $13,BX:R15
- ANDQ SI,R15
- ADDQ R14,R15
- IMUL3Q $19,BX,DX
- ADDQ DX,CX
- MOVQ CX,DX
- SHRQ $51,DX
- ADDQ R9,DX
- ANDQ SI,CX
- MOVQ DX,R8
- SHRQ $51,DX
- ADDQ R11,DX
- ANDQ SI,R8
- MOVQ DX,R9
- SHRQ $51,DX
- ADDQ R13,DX
- ANDQ SI,R9
- MOVQ DX,AX
- SHRQ $51,DX
- ADDQ R15,DX
- ANDQ SI,AX
- MOVQ DX,R10
- SHRQ $51,DX
- IMUL3Q $19,DX,DX
- ADDQ DX,CX
- ANDQ SI,R10
- MOVQ CX,0(DI)
- MOVQ R8,8(DI)
- MOVQ R9,16(DI)
- MOVQ AX,24(DI)
- MOVQ R10,32(DI)
- RET
diff --git a/ssl/test/runner/deterministic.go b/ssl/test/runner/deterministic.go
index 2b71076..50ae47f 100644
--- a/ssl/test/runner/deterministic.go
+++ b/ssl/test/runner/deterministic.go
@@ -16,6 +16,8 @@
import (
"encoding/binary"
+
+ "golang.org/x/crypto/chacha20"
)
// Use a different key from crypto/rand/deterministic.c.
@@ -31,7 +33,11 @@
}
var nonce [12]byte
binary.LittleEndian.PutUint64(nonce[:8], d.numCalls)
- chaCha20(buf, buf, deterministicRandKey, nonce[:], 0)
+ cipher, err := chacha20.NewUnauthenticatedCipher(deterministicRandKey, nonce[:])
+ if err != nil {
+ return 0, err
+ }
+ cipher.XORKeyStream(buf, buf)
d.numCalls++
return len(buf), nil
}
diff --git a/ssl/test/runner/hkdf.go b/ssl/test/runner/hkdf.go
deleted file mode 100644
index c60e4cc..0000000
--- a/ssl/test/runner/hkdf.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2016, Google Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package runner
-
-import (
- "crypto/hmac"
- "hash"
-)
-
-// hkdfExtract implements HKDF-Extract from RFC 5869.
-func hkdfExtract(hash func() hash.Hash, salt, ikm []byte) []byte {
- if salt == nil {
- salt = make([]byte, hash().Size())
- }
- hmac := hmac.New(hash, salt)
- hmac.Write(ikm)
- return hmac.Sum(nil)
-}
-
-// hkdfExpand implements HKDF-Expand from RFC 5869.
-func hkdfExpand(hash func() hash.Hash, prk, info []byte, length int) []byte {
- hashSize := hash().Size()
- if length > 255*hashSize {
- panic("hkdfExpand: length too long")
- }
- if len(prk) < hashSize {
- panic("hkdfExpand: prk too short")
- }
- var lastBlock []byte
- counter := byte(0)
- okm := make([]byte, length)
- hmac := hmac.New(hash, prk)
- for length > 0 {
- hmac.Reset()
- counter++
- hmac.Write(lastBlock)
- hmac.Write(info)
- hmac.Write([]byte{counter})
- block := hmac.Sum(nil)
- lastBlock = block
- copy(okm[(int(counter)-1)*hashSize:], block)
- length -= hashSize
- }
- return okm
-}
diff --git a/ssl/test/runner/hkdf_test.go b/ssl/test/runner/hkdf_test.go
deleted file mode 100644
index 4e6958e..0000000
--- a/ssl/test/runner/hkdf_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2016, Google Inc.
-//
-// Permission to use, copy, modify, and/or distribute this software for any
-// purpose with or without fee is hereby granted, provided that the above
-// copyright notice and this permission notice appear in all copies.
-//
-// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-package runner
-
-import (
- "bytes"
- "crypto"
- _ "crypto/sha1"
- _ "crypto/sha256"
- "testing"
-)
-
-var hkdfTests = []struct {
- hash crypto.Hash
- ikm, salt, info, prk, okm []byte
-}{
- {
- crypto.SHA256,
- []byte{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b},
- []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c},
- []byte{0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9},
- []byte{0x07, 0x77, 0x09, 0x36, 0x2c, 0x2e, 0x32, 0xdf, 0x0d, 0xdc, 0x3f, 0x0d, 0xc4, 0x7b, 0xba, 0x63, 0x90, 0xb6, 0xc7, 0x3b, 0xb5, 0x0f, 0x9c, 0x31, 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5},
- []byte{0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65},
- },
- {
- crypto.SHA256,
- []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f},
- []byte{0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf},
- []byte{0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff},
- []byte{0x06, 0xa6, 0xb8, 0x8c, 0x58, 0x53, 0x36, 0x1a, 0x06, 0x10, 0x4c, 0x9c, 0xeb, 0x35, 0xb4, 0x5c, 0xef, 0x76, 0x00, 0x14, 0x90, 0x46, 0x71, 0x01, 0x4a, 0x19, 0x3f, 0x40, 0xc1, 0x5f, 0xc2, 0x44},
- []byte{0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87},
- },
- {
- crypto.SHA256,
- []byte{
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
- 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b},
- []byte{},
- []byte{},
- []byte{0x19, 0xef, 0x24, 0xa3, 0x2c, 0x71, 0x7b, 0x16, 0x7f, 0x33, 0xa9, 0x1d, 0x6f, 0x64, 0x8b, 0xdf, 0x96, 0x59, 0x67, 0x76, 0xaf, 0xdb, 0x63, 0x77, 0xac, 0x43, 0x4c, 0x1c, 0x29, 0x3c, 0xcb, 0x04},
- []byte{0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8},
- },
- {
- crypto.SHA1,
- []byte{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b},
- []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c},
- []byte{0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9},
- []byte{0x9b, 0x6c, 0x18, 0xc4, 0x32, 0xa7, 0xbf, 0x8f, 0x0e, 0x71, 0xc8, 0xeb, 0x88, 0xf4, 0xb3, 0x0b, 0xaa, 0x2b, 0xa2, 0x43},
- []byte{0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, 0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81, 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, 0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3, 0xf8, 0x96},
- },
- {
- crypto.SHA1,
- []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f},
- []byte{0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf},
- []byte{0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff},
- []byte{0x8a, 0xda, 0xe0, 0x9a, 0x2a, 0x30, 0x70, 0x59, 0x47, 0x8d, 0x30, 0x9b, 0x26, 0xc4, 0x11, 0x5a, 0x22, 0x4c, 0xfa, 0xf6},
- []byte{0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, 0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb, 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, 0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3, 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, 0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e, 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, 0xd3, 0xb4},
- },
- {
- crypto.SHA1,
- []byte{0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b},
- []byte{},
- []byte{},
- []byte{0xda, 0x8c, 0x8a, 0x73, 0xc7, 0xfa, 0x77, 0x28, 0x8e, 0xc6, 0xf5, 0xe7, 0xc2, 0x97, 0x78, 0x6a, 0xa0, 0xd3, 0x2d, 0x01},
- []byte{0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, 0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06, 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, 0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3, 0x49, 0x18},
- },
- {
- crypto.SHA1,
- []byte{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c},
- []byte{},
- []byte{},
- []byte{0x2a, 0xdc, 0xca, 0xda, 0x18, 0x77, 0x9e, 0x7c, 0x20, 0x77, 0xad, 0x2e, 0xb1, 0x9d, 0x3f, 0x3e, 0x73, 0x13, 0x85, 0xdd},
- []byte{0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, 0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a, 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, 0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac, 0xfc, 0x48},
- },
-}
-
-func TestHKDF(t *testing.T) {
- for i, tt := range hkdfTests {
- prk := hkdfExtract(tt.hash.New, tt.salt, tt.ikm)
- if !bytes.Equal(prk, tt.prk) {
- t.Errorf("%d. got hkdfExtract(%x, %x) = %x; wanted %x", i+1, tt.salt, tt.ikm, prk, tt.prk)
- }
-
- okm := hkdfExpand(tt.hash.New, tt.prk, tt.info, len(tt.okm))
- if !bytes.Equal(okm, tt.okm) {
- t.Errorf("%d. got hkdfExpand(%x, %x, %d) = %x; wanted %x", i+1, tt.prk, tt.info, len(tt.okm), okm, tt.okm)
- }
- }
-}
diff --git a/ssl/test/runner/key_agreement.go b/ssl/test/runner/key_agreement.go
index 266163e..b435f18 100644
--- a/ssl/test/runner/key_agreement.go
+++ b/ssl/test/runner/key_agreement.go
@@ -17,8 +17,8 @@
"io"
"math/big"
- "boringssl.googlesource.com/boringssl/ssl/test/runner/curve25519"
"boringssl.googlesource.com/boringssl/ssl/test/runner/hrss"
+ "golang.org/x/crypto/curve25519"
)
type keyType int
diff --git a/ssl/test/runner/poly1305/poly1305.go b/ssl/test/runner/poly1305/poly1305.go
deleted file mode 100644
index f562fa5..0000000
--- a/ssl/test/runner/poly1305/poly1305.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-/*
-Package poly1305 implements Poly1305 one-time message authentication code as
-specified in https://cr.yp.to/mac/poly1305-20050329.pdf.
-
-Poly1305 is a fast, one-time authentication function. It is infeasible for an
-attacker to generate an authenticator for a message without the key. However, a
-key must only be used for a single message. Authenticating two different
-messages with the same key allows an attacker to forge authenticators for other
-messages with the same key.
-
-Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was
-used with a fixed key in order to generate one-time keys from an nonce.
-However, in this package AES isn't used and the one-time key is specified
-directly.
-*/
-package poly1305 // import "golang.org/x/crypto/poly1305"
-
-import "crypto/subtle"
-
-// TagSize is the size, in bytes, of a poly1305 authenticator.
-const TagSize = 16
-
-// Verify returns true if mac is a valid authenticator for m with the given
-// key.
-func Verify(mac *[16]byte, m []byte, key *[32]byte) bool {
- var tmp [16]byte
- Sum(&tmp, m, key)
- return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1
-}
diff --git a/ssl/test/runner/poly1305/poly1305_test.go b/ssl/test/runner/poly1305/poly1305_test.go
deleted file mode 100644
index 256bdbb..0000000
--- a/ssl/test/runner/poly1305/poly1305_test.go
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package poly1305
-
-import (
- "encoding/hex"
- "flag"
- "testing"
- "unsafe"
-)
-
-var stressFlag = flag.Bool("stress", false, "run slow stress tests")
-
-type test struct {
- in string
- key string
- tag string
-}
-
-func (t *test) Input() []byte {
- in, err := hex.DecodeString(t.in)
- if err != nil {
- panic(err)
- }
- return in
-}
-
-func (t *test) Key() [32]byte {
- buf, err := hex.DecodeString(t.key)
- if err != nil {
- panic(err)
- }
- var key [32]byte
- copy(key[:], buf[:32])
- return key
-}
-
-func (t *test) Tag() [16]byte {
- buf, err := hex.DecodeString(t.tag)
- if err != nil {
- panic(err)
- }
- var tag [16]byte
- copy(tag[:], buf[:16])
- return tag
-}
-
-func testSum(t *testing.T, unaligned bool, sumImpl func(tag *[TagSize]byte, msg []byte, key *[32]byte)) {
- var tag [16]byte
- for i, v := range testData {
- in := v.Input()
- if unaligned {
- in = unalignBytes(in)
- }
- key := v.Key()
- sumImpl(&tag, in, &key)
- if tag != v.Tag() {
- t.Errorf("%d: expected %x, got %x", i, v.Tag(), tag[:])
- }
- }
-}
-
-func TestBurnin(t *testing.T) {
- // This test can be used to sanity-check significant changes. It can
- // take about many minutes to run, even on fast machines. It's disabled
- // by default.
- if !*stressFlag {
- t.Skip("skipping without -stress")
- }
-
- var key [32]byte
- var input [25]byte
- var output [16]byte
-
- for i := range key {
- key[i] = 1
- }
- for i := range input {
- input[i] = 2
- }
-
- for i := uint64(0); i < 1e10; i++ {
- Sum(&output, input[:], &key)
- copy(key[0:], output[:])
- copy(key[16:], output[:])
- copy(input[:], output[:])
- copy(input[16:], output[:])
- }
-
- const expected = "5e3b866aea0b636d240c83c428f84bfa"
- if got := hex.EncodeToString(output[:]); got != expected {
- t.Errorf("expected %s, got %s", expected, got)
- }
-}
-
-func TestSum(t *testing.T) { testSum(t, false, Sum) }
-func TestSumUnaligned(t *testing.T) { testSum(t, true, Sum) }
-func TestSumGeneric(t *testing.T) { testSum(t, false, sumGeneric) }
-func TestSumGenericUnaligned(t *testing.T) { testSum(t, true, sumGeneric) }
-
-func benchmark(b *testing.B, size int, unaligned bool) {
- var out [16]byte
- var key [32]byte
- in := make([]byte, size)
- if unaligned {
- in = unalignBytes(in)
- }
- b.SetBytes(int64(len(in)))
- b.ResetTimer()
- for i := 0; i < b.N; i++ {
- Sum(&out, in, &key)
- }
-}
-
-func Benchmark64(b *testing.B) { benchmark(b, 64, false) }
-func Benchmark1K(b *testing.B) { benchmark(b, 1024, false) }
-func Benchmark64Unaligned(b *testing.B) { benchmark(b, 64, true) }
-func Benchmark1KUnaligned(b *testing.B) { benchmark(b, 1024, true) }
-func Benchmark2M(b *testing.B) { benchmark(b, 2097152, true) }
-
-func unalignBytes(in []byte) []byte {
- out := make([]byte, len(in)+1)
- if uintptr(unsafe.Pointer(&out[0]))&(unsafe.Alignof(uint32(0))-1) == 0 {
- out = out[1:]
- } else {
- out = out[:len(in)]
- }
- copy(out, in)
- return out
-}
diff --git a/ssl/test/runner/poly1305/sum_amd64.go b/ssl/test/runner/poly1305/sum_amd64.go
deleted file mode 100644
index 4dd72fe..0000000
--- a/ssl/test/runner/poly1305/sum_amd64.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build amd64,!gccgo,!appengine
-
-package poly1305
-
-// This function is implemented in sum_amd64.s
-//go:noescape
-func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
-
-// Sum generates an authenticator for m using a one-time key and puts the
-// 16-byte result into out. Authenticating two different messages with the same
-// key allows an attacker to forge messages at will.
-func Sum(out *[16]byte, m []byte, key *[32]byte) {
- var mPtr *byte
- if len(m) > 0 {
- mPtr = &m[0]
- }
- poly1305(out, mPtr, uint64(len(m)), key)
-}
diff --git a/ssl/test/runner/poly1305/sum_amd64.s b/ssl/test/runner/poly1305/sum_amd64.s
deleted file mode 100644
index 2edae63..0000000
--- a/ssl/test/runner/poly1305/sum_amd64.s
+++ /dev/null
@@ -1,125 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build amd64,!gccgo,!appengine
-
-#include "textflag.h"
-
-#define POLY1305_ADD(msg, h0, h1, h2) \
- ADDQ 0(msg), h0; \
- ADCQ 8(msg), h1; \
- ADCQ $1, h2; \
- LEAQ 16(msg), msg
-
-#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \
- MOVQ r0, AX; \
- MULQ h0; \
- MOVQ AX, t0; \
- MOVQ DX, t1; \
- MOVQ r0, AX; \
- MULQ h1; \
- ADDQ AX, t1; \
- ADCQ $0, DX; \
- MOVQ r0, t2; \
- IMULQ h2, t2; \
- ADDQ DX, t2; \
- \
- MOVQ r1, AX; \
- MULQ h0; \
- ADDQ AX, t1; \
- ADCQ $0, DX; \
- MOVQ DX, h0; \
- MOVQ r1, t3; \
- IMULQ h2, t3; \
- MOVQ r1, AX; \
- MULQ h1; \
- ADDQ AX, t2; \
- ADCQ DX, t3; \
- ADDQ h0, t2; \
- ADCQ $0, t3; \
- \
- MOVQ t0, h0; \
- MOVQ t1, h1; \
- MOVQ t2, h2; \
- ANDQ $3, h2; \
- MOVQ t2, t0; \
- ANDQ $0xFFFFFFFFFFFFFFFC, t0; \
- ADDQ t0, h0; \
- ADCQ t3, h1; \
- ADCQ $0, h2; \
- SHRQ $2, t3, t2; \
- SHRQ $2, t3; \
- ADDQ t2, h0; \
- ADCQ t3, h1; \
- ADCQ $0, h2
-
-DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF
-DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC
-GLOBL ·poly1305Mask<>(SB), RODATA, $16
-
-// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key)
-TEXT ·poly1305(SB), $0-32
- MOVQ out+0(FP), DI
- MOVQ m+8(FP), SI
- MOVQ mlen+16(FP), R15
- MOVQ key+24(FP), AX
-
- MOVQ 0(AX), R11
- MOVQ 8(AX), R12
- ANDQ ·poly1305Mask<>(SB), R11 // r0
- ANDQ ·poly1305Mask<>+8(SB), R12 // r1
- XORQ R8, R8 // h0
- XORQ R9, R9 // h1
- XORQ R10, R10 // h2
-
- CMPQ R15, $16
- JB bytes_between_0_and_15
-
-loop:
- POLY1305_ADD(SI, R8, R9, R10)
-
-multiply:
- POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14)
- SUBQ $16, R15
- CMPQ R15, $16
- JAE loop
-
-bytes_between_0_and_15:
- TESTQ R15, R15
- JZ done
- MOVQ $1, BX
- XORQ CX, CX
- XORQ R13, R13
- ADDQ R15, SI
-
-flush_buffer:
- SHLQ $8, BX, CX
- SHLQ $8, BX
- MOVB -1(SI), R13
- XORQ R13, BX
- DECQ SI
- DECQ R15
- JNZ flush_buffer
-
- ADDQ BX, R8
- ADCQ CX, R9
- ADCQ $0, R10
- MOVQ $16, R15
- JMP multiply
-
-done:
- MOVQ R8, AX
- MOVQ R9, BX
- SUBQ $0xFFFFFFFFFFFFFFFB, AX
- SBBQ $0xFFFFFFFFFFFFFFFF, BX
- SBBQ $3, R10
- CMOVQCS R8, AX
- CMOVQCS R9, BX
- MOVQ key+24(FP), R8
- ADDQ 16(R8), AX
- ADCQ 24(R8), BX
-
- MOVQ AX, 0(DI)
- MOVQ BX, 8(DI)
- RET
diff --git a/ssl/test/runner/poly1305/sum_arm.go b/ssl/test/runner/poly1305/sum_arm.go
deleted file mode 100644
index 5dc321c..0000000
--- a/ssl/test/runner/poly1305/sum_arm.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build arm,!gccgo,!appengine,!nacl
-
-package poly1305
-
-// This function is implemented in sum_arm.s
-//go:noescape
-func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]byte)
-
-// Sum generates an authenticator for m using a one-time key and puts the
-// 16-byte result into out. Authenticating two different messages with the same
-// key allows an attacker to forge messages at will.
-func Sum(out *[16]byte, m []byte, key *[32]byte) {
- var mPtr *byte
- if len(m) > 0 {
- mPtr = &m[0]
- }
- poly1305_auth_armv6(out, mPtr, uint32(len(m)), key)
-}
diff --git a/ssl/test/runner/poly1305/sum_arm.s b/ssl/test/runner/poly1305/sum_arm.s
deleted file mode 100644
index f70b4ac..0000000
--- a/ssl/test/runner/poly1305/sum_arm.s
+++ /dev/null
@@ -1,427 +0,0 @@
-// Copyright 2015 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build arm,!gccgo,!appengine,!nacl
-
-#include "textflag.h"
-
-// This code was translated into a form compatible with 5a from the public
-// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305.
-
-DATA ·poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff
-DATA ·poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03
-DATA ·poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff
-DATA ·poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff
-DATA ·poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff
-GLOBL ·poly1305_init_constants_armv6<>(SB), 8, $20
-
-// Warning: the linker may use R11 to synthesize certain instructions. Please
-// take care and verify that no synthetic instructions use it.
-
-TEXT poly1305_init_ext_armv6<>(SB), NOSPLIT, $0
- // Needs 16 bytes of stack and 64 bytes of space pointed to by R0. (It
- // might look like it's only 60 bytes of space but the final four bytes
- // will be written by another function.) We need to skip over four
- // bytes of stack because that's saving the value of 'g'.
- ADD $4, R13, R8
- MOVM.IB [R4-R7], (R8)
- MOVM.IA.W (R1), [R2-R5]
- MOVW $·poly1305_init_constants_armv6<>(SB), R7
- MOVW R2, R8
- MOVW R2>>26, R9
- MOVW R3>>20, g
- MOVW R4>>14, R11
- MOVW R5>>8, R12
- ORR R3<<6, R9, R9
- ORR R4<<12, g, g
- ORR R5<<18, R11, R11
- MOVM.IA (R7), [R2-R6]
- AND R8, R2, R2
- AND R9, R3, R3
- AND g, R4, R4
- AND R11, R5, R5
- AND R12, R6, R6
- MOVM.IA.W [R2-R6], (R0)
- EOR R2, R2, R2
- EOR R3, R3, R3
- EOR R4, R4, R4
- EOR R5, R5, R5
- EOR R6, R6, R6
- MOVM.IA.W [R2-R6], (R0)
- MOVM.IA.W (R1), [R2-R5]
- MOVM.IA [R2-R6], (R0)
- ADD $20, R13, R0
- MOVM.DA (R0), [R4-R7]
- RET
-
-#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \
- MOVBU (offset+0)(Rsrc), Rtmp; \
- MOVBU Rtmp, (offset+0)(Rdst); \
- MOVBU (offset+1)(Rsrc), Rtmp; \
- MOVBU Rtmp, (offset+1)(Rdst); \
- MOVBU (offset+2)(Rsrc), Rtmp; \
- MOVBU Rtmp, (offset+2)(Rdst); \
- MOVBU (offset+3)(Rsrc), Rtmp; \
- MOVBU Rtmp, (offset+3)(Rdst)
-
-TEXT poly1305_blocks_armv6<>(SB), NOSPLIT, $0
- // Needs 24 bytes of stack for saved registers and then 88 bytes of
- // scratch space after that. We assume that 24 bytes at (R13) have
- // already been used: four bytes for the link register saved in the
- // prelude of poly1305_auth_armv6, four bytes for saving the value of g
- // in that function and 16 bytes of scratch space used around
- // poly1305_finish_ext_armv6_skip1.
- ADD $24, R13, R12
- MOVM.IB [R4-R8, R14], (R12)
- MOVW R0, 88(R13)
- MOVW R1, 92(R13)
- MOVW R2, 96(R13)
- MOVW R1, R14
- MOVW R2, R12
- MOVW 56(R0), R8
- WORD $0xe1180008 // TST R8, R8 not working see issue 5921
- EOR R6, R6, R6
- MOVW.EQ $(1<<24), R6
- MOVW R6, 84(R13)
- ADD $116, R13, g
- MOVM.IA (R0), [R0-R9]
- MOVM.IA [R0-R4], (g)
- CMP $16, R12
- BLO poly1305_blocks_armv6_done
-
-poly1305_blocks_armv6_mainloop:
- WORD $0xe31e0003 // TST R14, #3 not working see issue 5921
- BEQ poly1305_blocks_armv6_mainloop_aligned
- ADD $100, R13, g
- MOVW_UNALIGNED(R14, g, R0, 0)
- MOVW_UNALIGNED(R14, g, R0, 4)
- MOVW_UNALIGNED(R14, g, R0, 8)
- MOVW_UNALIGNED(R14, g, R0, 12)
- MOVM.IA (g), [R0-R3]
- ADD $16, R14
- B poly1305_blocks_armv6_mainloop_loaded
-
-poly1305_blocks_armv6_mainloop_aligned:
- MOVM.IA.W (R14), [R0-R3]
-
-poly1305_blocks_armv6_mainloop_loaded:
- MOVW R0>>26, g
- MOVW R1>>20, R11
- MOVW R2>>14, R12
- MOVW R14, 92(R13)
- MOVW R3>>8, R4
- ORR R1<<6, g, g
- ORR R2<<12, R11, R11
- ORR R3<<18, R12, R12
- BIC $0xfc000000, R0, R0
- BIC $0xfc000000, g, g
- MOVW 84(R13), R3
- BIC $0xfc000000, R11, R11
- BIC $0xfc000000, R12, R12
- ADD R0, R5, R5
- ADD g, R6, R6
- ORR R3, R4, R4
- ADD R11, R7, R7
- ADD $116, R13, R14
- ADD R12, R8, R8
- ADD R4, R9, R9
- MOVM.IA (R14), [R0-R4]
- MULLU R4, R5, (R11, g)
- MULLU R3, R5, (R14, R12)
- MULALU R3, R6, (R11, g)
- MULALU R2, R6, (R14, R12)
- MULALU R2, R7, (R11, g)
- MULALU R1, R7, (R14, R12)
- ADD R4<<2, R4, R4
- ADD R3<<2, R3, R3
- MULALU R1, R8, (R11, g)
- MULALU R0, R8, (R14, R12)
- MULALU R0, R9, (R11, g)
- MULALU R4, R9, (R14, R12)
- MOVW g, 76(R13)
- MOVW R11, 80(R13)
- MOVW R12, 68(R13)
- MOVW R14, 72(R13)
- MULLU R2, R5, (R11, g)
- MULLU R1, R5, (R14, R12)
- MULALU R1, R6, (R11, g)
- MULALU R0, R6, (R14, R12)
- MULALU R0, R7, (R11, g)
- MULALU R4, R7, (R14, R12)
- ADD R2<<2, R2, R2
- ADD R1<<2, R1, R1
- MULALU R4, R8, (R11, g)
- MULALU R3, R8, (R14, R12)
- MULALU R3, R9, (R11, g)
- MULALU R2, R9, (R14, R12)
- MOVW g, 60(R13)
- MOVW R11, 64(R13)
- MOVW R12, 52(R13)
- MOVW R14, 56(R13)
- MULLU R0, R5, (R11, g)
- MULALU R4, R6, (R11, g)
- MULALU R3, R7, (R11, g)
- MULALU R2, R8, (R11, g)
- MULALU R1, R9, (R11, g)
- ADD $52, R13, R0
- MOVM.IA (R0), [R0-R7]
- MOVW g>>26, R12
- MOVW R4>>26, R14
- ORR R11<<6, R12, R12
- ORR R5<<6, R14, R14
- BIC $0xfc000000, g, g
- BIC $0xfc000000, R4, R4
- ADD.S R12, R0, R0
- ADC $0, R1, R1
- ADD.S R14, R6, R6
- ADC $0, R7, R7
- MOVW R0>>26, R12
- MOVW R6>>26, R14
- ORR R1<<6, R12, R12
- ORR R7<<6, R14, R14
- BIC $0xfc000000, R0, R0
- BIC $0xfc000000, R6, R6
- ADD R14<<2, R14, R14
- ADD.S R12, R2, R2
- ADC $0, R3, R3
- ADD R14, g, g
- MOVW R2>>26, R12
- MOVW g>>26, R14
- ORR R3<<6, R12, R12
- BIC $0xfc000000, g, R5
- BIC $0xfc000000, R2, R7
- ADD R12, R4, R4
- ADD R14, R0, R0
- MOVW R4>>26, R12
- BIC $0xfc000000, R4, R8
- ADD R12, R6, R9
- MOVW 96(R13), R12
- MOVW 92(R13), R14
- MOVW R0, R6
- CMP $32, R12
- SUB $16, R12, R12
- MOVW R12, 96(R13)
- BHS poly1305_blocks_armv6_mainloop
-
-poly1305_blocks_armv6_done:
- MOVW 88(R13), R12
- MOVW R5, 20(R12)
- MOVW R6, 24(R12)
- MOVW R7, 28(R12)
- MOVW R8, 32(R12)
- MOVW R9, 36(R12)
- ADD $48, R13, R0
- MOVM.DA (R0), [R4-R8, R14]
- RET
-
-#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \
- MOVBU.P 1(Rsrc), Rtmp; \
- MOVBU.P Rtmp, 1(Rdst); \
- MOVBU.P 1(Rsrc), Rtmp; \
- MOVBU.P Rtmp, 1(Rdst)
-
-#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \
- MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \
- MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp)
-
-// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key)
-TEXT ·poly1305_auth_armv6(SB), $196-16
- // The value 196, just above, is the sum of 64 (the size of the context
- // structure) and 132 (the amount of stack needed).
- //
- // At this point, the stack pointer (R13) has been moved down. It
- // points to the saved link register and there's 196 bytes of free
- // space above it.
- //
- // The stack for this function looks like:
- //
- // +---------------------
- // |
- // | 64 bytes of context structure
- // |
- // +---------------------
- // |
- // | 112 bytes for poly1305_blocks_armv6
- // |
- // +---------------------
- // | 16 bytes of final block, constructed at
- // | poly1305_finish_ext_armv6_skip8
- // +---------------------
- // | four bytes of saved 'g'
- // +---------------------
- // | lr, saved by prelude <- R13 points here
- // +---------------------
- MOVW g, 4(R13)
-
- MOVW out+0(FP), R4
- MOVW m+4(FP), R5
- MOVW mlen+8(FP), R6
- MOVW key+12(FP), R7
-
- ADD $136, R13, R0 // 136 = 4 + 4 + 16 + 112
- MOVW R7, R1
-
- // poly1305_init_ext_armv6 will write to the stack from R13+4, but
- // that's ok because none of the other values have been written yet.
- BL poly1305_init_ext_armv6<>(SB)
- BIC.S $15, R6, R2
- BEQ poly1305_auth_armv6_noblocks
- ADD $136, R13, R0
- MOVW R5, R1
- ADD R2, R5, R5
- SUB R2, R6, R6
- BL poly1305_blocks_armv6<>(SB)
-
-poly1305_auth_armv6_noblocks:
- ADD $136, R13, R0
- MOVW R5, R1
- MOVW R6, R2
- MOVW R4, R3
-
- MOVW R0, R5
- MOVW R1, R6
- MOVW R2, R7
- MOVW R3, R8
- AND.S R2, R2, R2
- BEQ poly1305_finish_ext_armv6_noremaining
- EOR R0, R0
- ADD $8, R13, R9 // 8 = offset to 16 byte scratch space
- MOVW R0, (R9)
- MOVW R0, 4(R9)
- MOVW R0, 8(R9)
- MOVW R0, 12(R9)
- WORD $0xe3110003 // TST R1, #3 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_aligned
- WORD $0xe3120008 // TST R2, #8 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip8
- MOVWP_UNALIGNED(R1, R9, g)
- MOVWP_UNALIGNED(R1, R9, g)
-
-poly1305_finish_ext_armv6_skip8:
- WORD $0xe3120004 // TST $4, R2 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip4
- MOVWP_UNALIGNED(R1, R9, g)
-
-poly1305_finish_ext_armv6_skip4:
- WORD $0xe3120002 // TST $2, R2 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip2
- MOVHUP_UNALIGNED(R1, R9, g)
- B poly1305_finish_ext_armv6_skip2
-
-poly1305_finish_ext_armv6_aligned:
- WORD $0xe3120008 // TST R2, #8 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip8_aligned
- MOVM.IA.W (R1), [g-R11]
- MOVM.IA.W [g-R11], (R9)
-
-poly1305_finish_ext_armv6_skip8_aligned:
- WORD $0xe3120004 // TST $4, R2 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip4_aligned
- MOVW.P 4(R1), g
- MOVW.P g, 4(R9)
-
-poly1305_finish_ext_armv6_skip4_aligned:
- WORD $0xe3120002 // TST $2, R2 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip2
- MOVHU.P 2(R1), g
- MOVH.P g, 2(R9)
-
-poly1305_finish_ext_armv6_skip2:
- WORD $0xe3120001 // TST $1, R2 not working see issue 5921
- BEQ poly1305_finish_ext_armv6_skip1
- MOVBU.P 1(R1), g
- MOVBU.P g, 1(R9)
-
-poly1305_finish_ext_armv6_skip1:
- MOVW $1, R11
- MOVBU R11, 0(R9)
- MOVW R11, 56(R5)
- MOVW R5, R0
- ADD $8, R13, R1
- MOVW $16, R2
- BL poly1305_blocks_armv6<>(SB)
-
-poly1305_finish_ext_armv6_noremaining:
- MOVW 20(R5), R0
- MOVW 24(R5), R1
- MOVW 28(R5), R2
- MOVW 32(R5), R3
- MOVW 36(R5), R4
- MOVW R4>>26, R12
- BIC $0xfc000000, R4, R4
- ADD R12<<2, R12, R12
- ADD R12, R0, R0
- MOVW R0>>26, R12
- BIC $0xfc000000, R0, R0
- ADD R12, R1, R1
- MOVW R1>>26, R12
- BIC $0xfc000000, R1, R1
- ADD R12, R2, R2
- MOVW R2>>26, R12
- BIC $0xfc000000, R2, R2
- ADD R12, R3, R3
- MOVW R3>>26, R12
- BIC $0xfc000000, R3, R3
- ADD R12, R4, R4
- ADD $5, R0, R6
- MOVW R6>>26, R12
- BIC $0xfc000000, R6, R6
- ADD R12, R1, R7
- MOVW R7>>26, R12
- BIC $0xfc000000, R7, R7
- ADD R12, R2, g
- MOVW g>>26, R12
- BIC $0xfc000000, g, g
- ADD R12, R3, R11
- MOVW $-(1<<26), R12
- ADD R11>>26, R12, R12
- BIC $0xfc000000, R11, R11
- ADD R12, R4, R9
- MOVW R9>>31, R12
- SUB $1, R12
- AND R12, R6, R6
- AND R12, R7, R7
- AND R12, g, g
- AND R12, R11, R11
- AND R12, R9, R9
- MVN R12, R12
- AND R12, R0, R0
- AND R12, R1, R1
- AND R12, R2, R2
- AND R12, R3, R3
- AND R12, R4, R4
- ORR R6, R0, R0
- ORR R7, R1, R1
- ORR g, R2, R2
- ORR R11, R3, R3
- ORR R9, R4, R4
- ORR R1<<26, R0, R0
- MOVW R1>>6, R1
- ORR R2<<20, R1, R1
- MOVW R2>>12, R2
- ORR R3<<14, R2, R2
- MOVW R3>>18, R3
- ORR R4<<8, R3, R3
- MOVW 40(R5), R6
- MOVW 44(R5), R7
- MOVW 48(R5), g
- MOVW 52(R5), R11
- ADD.S R6, R0, R0
- ADC.S R7, R1, R1
- ADC.S g, R2, R2
- ADC.S R11, R3, R3
- MOVM.IA [R0-R3], (R8)
- MOVW R5, R12
- EOR R0, R0, R0
- EOR R1, R1, R1
- EOR R2, R2, R2
- EOR R3, R3, R3
- EOR R4, R4, R4
- EOR R5, R5, R5
- EOR R6, R6, R6
- EOR R7, R7, R7
- MOVM.IA.W [R0-R7], (R12)
- MOVM.IA [R0-R7], (R12)
- MOVW 4(R13), g
- RET
diff --git a/ssl/test/runner/poly1305/sum_noasm.go b/ssl/test/runner/poly1305/sum_noasm.go
deleted file mode 100644
index 751eec5..0000000
--- a/ssl/test/runner/poly1305/sum_noasm.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build s390x,!go1.11 !arm,!amd64,!s390x gccgo appengine nacl
-
-package poly1305
-
-// Sum generates an authenticator for msg using a one-time key and puts the
-// 16-byte result into out. Authenticating two different messages with the same
-// key allows an attacker to forge messages at will.
-func Sum(out *[TagSize]byte, msg []byte, key *[32]byte) {
- sumGeneric(out, msg, key)
-}
diff --git a/ssl/test/runner/poly1305/sum_ref.go b/ssl/test/runner/poly1305/sum_ref.go
deleted file mode 100644
index c4d59bd..0000000
--- a/ssl/test/runner/poly1305/sum_ref.go
+++ /dev/null
@@ -1,139 +0,0 @@
-// Copyright 2012 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package poly1305
-
-import "encoding/binary"
-
-// sumGeneric generates an authenticator for msg using a one-time key and
-// puts the 16-byte result into out. This is the generic implementation of
-// Sum and should be called if no assembly implementation is available.
-func sumGeneric(out *[TagSize]byte, msg []byte, key *[32]byte) {
- var (
- h0, h1, h2, h3, h4 uint32 // the hash accumulators
- r0, r1, r2, r3, r4 uint64 // the r part of the key
- )
-
- r0 = uint64(binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff)
- r1 = uint64((binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03)
- r2 = uint64((binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff)
- r3 = uint64((binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff)
- r4 = uint64((binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff)
-
- R1, R2, R3, R4 := r1*5, r2*5, r3*5, r4*5
-
- for len(msg) >= TagSize {
- // h += msg
- h0 += binary.LittleEndian.Uint32(msg[0:]) & 0x3ffffff
- h1 += (binary.LittleEndian.Uint32(msg[3:]) >> 2) & 0x3ffffff
- h2 += (binary.LittleEndian.Uint32(msg[6:]) >> 4) & 0x3ffffff
- h3 += (binary.LittleEndian.Uint32(msg[9:]) >> 6) & 0x3ffffff
- h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | (1 << 24)
-
- // h *= r
- d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
- d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
- d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
- d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
- d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
-
- // h %= p
- h0 = uint32(d0) & 0x3ffffff
- h1 = uint32(d1) & 0x3ffffff
- h2 = uint32(d2) & 0x3ffffff
- h3 = uint32(d3) & 0x3ffffff
- h4 = uint32(d4) & 0x3ffffff
-
- h0 += uint32(d4>>26) * 5
- h1 += h0 >> 26
- h0 = h0 & 0x3ffffff
-
- msg = msg[TagSize:]
- }
-
- if len(msg) > 0 {
- var block [TagSize]byte
- off := copy(block[:], msg)
- block[off] = 0x01
-
- // h += msg
- h0 += binary.LittleEndian.Uint32(block[0:]) & 0x3ffffff
- h1 += (binary.LittleEndian.Uint32(block[3:]) >> 2) & 0x3ffffff
- h2 += (binary.LittleEndian.Uint32(block[6:]) >> 4) & 0x3ffffff
- h3 += (binary.LittleEndian.Uint32(block[9:]) >> 6) & 0x3ffffff
- h4 += (binary.LittleEndian.Uint32(block[12:]) >> 8)
-
- // h *= r
- d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1)
- d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2)
- d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3)
- d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4)
- d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0)
-
- // h %= p
- h0 = uint32(d0) & 0x3ffffff
- h1 = uint32(d1) & 0x3ffffff
- h2 = uint32(d2) & 0x3ffffff
- h3 = uint32(d3) & 0x3ffffff
- h4 = uint32(d4) & 0x3ffffff
-
- h0 += uint32(d4>>26) * 5
- h1 += h0 >> 26
- h0 = h0 & 0x3ffffff
- }
-
- // h %= p reduction
- h2 += h1 >> 26
- h1 &= 0x3ffffff
- h3 += h2 >> 26
- h2 &= 0x3ffffff
- h4 += h3 >> 26
- h3 &= 0x3ffffff
- h0 += 5 * (h4 >> 26)
- h4 &= 0x3ffffff
- h1 += h0 >> 26
- h0 &= 0x3ffffff
-
- // h - p
- t0 := h0 + 5
- t1 := h1 + (t0 >> 26)
- t2 := h2 + (t1 >> 26)
- t3 := h3 + (t2 >> 26)
- t4 := h4 + (t3 >> 26) - (1 << 26)
- t0 &= 0x3ffffff
- t1 &= 0x3ffffff
- t2 &= 0x3ffffff
- t3 &= 0x3ffffff
-
- // select h if h < p else h - p
- t_mask := (t4 >> 31) - 1
- h_mask := ^t_mask
- h0 = (h0 & h_mask) | (t0 & t_mask)
- h1 = (h1 & h_mask) | (t1 & t_mask)
- h2 = (h2 & h_mask) | (t2 & t_mask)
- h3 = (h3 & h_mask) | (t3 & t_mask)
- h4 = (h4 & h_mask) | (t4 & t_mask)
-
- // h %= 2^128
- h0 |= h1 << 26
- h1 = ((h1 >> 6) | (h2 << 20))
- h2 = ((h2 >> 12) | (h3 << 14))
- h3 = ((h3 >> 18) | (h4 << 8))
-
- // s: the s part of the key
- // tag = (h + s) % (2^128)
- t := uint64(h0) + uint64(binary.LittleEndian.Uint32(key[16:]))
- h0 = uint32(t)
- t = uint64(h1) + uint64(binary.LittleEndian.Uint32(key[20:])) + (t >> 32)
- h1 = uint32(t)
- t = uint64(h2) + uint64(binary.LittleEndian.Uint32(key[24:])) + (t >> 32)
- h2 = uint32(t)
- t = uint64(h3) + uint64(binary.LittleEndian.Uint32(key[28:])) + (t >> 32)
- h3 = uint32(t)
-
- binary.LittleEndian.PutUint32(out[0:], h0)
- binary.LittleEndian.PutUint32(out[4:], h1)
- binary.LittleEndian.PutUint32(out[8:], h2)
- binary.LittleEndian.PutUint32(out[12:], h3)
-}
diff --git a/ssl/test/runner/poly1305/sum_s390x.go b/ssl/test/runner/poly1305/sum_s390x.go
deleted file mode 100644
index 7a266ce..0000000
--- a/ssl/test/runner/poly1305/sum_s390x.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build s390x,go1.11,!gccgo,!appengine
-
-package poly1305
-
-// hasVectorFacility reports whether the machine supports
-// the vector facility (vx).
-func hasVectorFacility() bool
-
-// hasVMSLFacility reports whether the machine supports
-// Vector Multiply Sum Logical (VMSL).
-func hasVMSLFacility() bool
-
-var hasVX = hasVectorFacility()
-var hasVMSL = hasVMSLFacility()
-
-// poly1305vx is an assembly implementation of Poly1305 that uses vector
-// instructions. It must only be called if the vector facility (vx) is
-// available.
-//go:noescape
-func poly1305vx(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
-
-// poly1305vmsl is an assembly implementation of Poly1305 that uses vector
-// instructions, including VMSL. It must only be called if the vector facility (vx) is
-// available and if VMSL is supported.
-//go:noescape
-func poly1305vmsl(out *[16]byte, m *byte, mlen uint64, key *[32]byte)
-
-// Sum generates an authenticator for m using a one-time key and puts the
-// 16-byte result into out. Authenticating two different messages with the same
-// key allows an attacker to forge messages at will.
-func Sum(out *[16]byte, m []byte, key *[32]byte) {
- if hasVX {
- var mPtr *byte
- if len(m) > 0 {
- mPtr = &m[0]
- }
- if hasVMSL && len(m) > 256 {
- poly1305vmsl(out, mPtr, uint64(len(m)), key)
- } else {
- poly1305vx(out, mPtr, uint64(len(m)), key)
- }
- } else {
- sumGeneric(out, m, key)
- }
-}
diff --git a/ssl/test/runner/poly1305/sum_s390x.s b/ssl/test/runner/poly1305/sum_s390x.s
deleted file mode 100644
index 356c07a..0000000
--- a/ssl/test/runner/poly1305/sum_s390x.s
+++ /dev/null
@@ -1,400 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build s390x,go1.11,!gccgo,!appengine
-
-#include "textflag.h"
-
-// Implementation of Poly1305 using the vector facility (vx).
-
-// constants
-#define MOD26 V0
-#define EX0 V1
-#define EX1 V2
-#define EX2 V3
-
-// temporaries
-#define T_0 V4
-#define T_1 V5
-#define T_2 V6
-#define T_3 V7
-#define T_4 V8
-
-// key (r)
-#define R_0 V9
-#define R_1 V10
-#define R_2 V11
-#define R_3 V12
-#define R_4 V13
-#define R5_1 V14
-#define R5_2 V15
-#define R5_3 V16
-#define R5_4 V17
-#define RSAVE_0 R5
-#define RSAVE_1 R6
-#define RSAVE_2 R7
-#define RSAVE_3 R8
-#define RSAVE_4 R9
-#define R5SAVE_1 V28
-#define R5SAVE_2 V29
-#define R5SAVE_3 V30
-#define R5SAVE_4 V31
-
-// message block
-#define F_0 V18
-#define F_1 V19
-#define F_2 V20
-#define F_3 V21
-#define F_4 V22
-
-// accumulator
-#define H_0 V23
-#define H_1 V24
-#define H_2 V25
-#define H_3 V26
-#define H_4 V27
-
-GLOBL ·keyMask<>(SB), RODATA, $16
-DATA ·keyMask<>+0(SB)/8, $0xffffff0ffcffff0f
-DATA ·keyMask<>+8(SB)/8, $0xfcffff0ffcffff0f
-
-GLOBL ·bswapMask<>(SB), RODATA, $16
-DATA ·bswapMask<>+0(SB)/8, $0x0f0e0d0c0b0a0908
-DATA ·bswapMask<>+8(SB)/8, $0x0706050403020100
-
-GLOBL ·constants<>(SB), RODATA, $64
-// MOD26
-DATA ·constants<>+0(SB)/8, $0x3ffffff
-DATA ·constants<>+8(SB)/8, $0x3ffffff
-// EX0
-DATA ·constants<>+16(SB)/8, $0x0006050403020100
-DATA ·constants<>+24(SB)/8, $0x1016151413121110
-// EX1
-DATA ·constants<>+32(SB)/8, $0x060c0b0a09080706
-DATA ·constants<>+40(SB)/8, $0x161c1b1a19181716
-// EX2
-DATA ·constants<>+48(SB)/8, $0x0d0d0d0d0d0f0e0d
-DATA ·constants<>+56(SB)/8, $0x1d1d1d1d1d1f1e1d
-
-// h = (f*g) % (2**130-5) [partial reduction]
-#define MULTIPLY(f0, f1, f2, f3, f4, g0, g1, g2, g3, g4, g51, g52, g53, g54, h0, h1, h2, h3, h4) \
- VMLOF f0, g0, h0 \
- VMLOF f0, g1, h1 \
- VMLOF f0, g2, h2 \
- VMLOF f0, g3, h3 \
- VMLOF f0, g4, h4 \
- VMLOF f1, g54, T_0 \
- VMLOF f1, g0, T_1 \
- VMLOF f1, g1, T_2 \
- VMLOF f1, g2, T_3 \
- VMLOF f1, g3, T_4 \
- VMALOF f2, g53, h0, h0 \
- VMALOF f2, g54, h1, h1 \
- VMALOF f2, g0, h2, h2 \
- VMALOF f2, g1, h3, h3 \
- VMALOF f2, g2, h4, h4 \
- VMALOF f3, g52, T_0, T_0 \
- VMALOF f3, g53, T_1, T_1 \
- VMALOF f3, g54, T_2, T_2 \
- VMALOF f3, g0, T_3, T_3 \
- VMALOF f3, g1, T_4, T_4 \
- VMALOF f4, g51, h0, h0 \
- VMALOF f4, g52, h1, h1 \
- VMALOF f4, g53, h2, h2 \
- VMALOF f4, g54, h3, h3 \
- VMALOF f4, g0, h4, h4 \
- VAG T_0, h0, h0 \
- VAG T_1, h1, h1 \
- VAG T_2, h2, h2 \
- VAG T_3, h3, h3 \
- VAG T_4, h4, h4
-
-// carry h0->h1 h3->h4, h1->h2 h4->h0, h0->h1 h2->h3, h3->h4
-#define REDUCE(h0, h1, h2, h3, h4) \
- VESRLG $26, h0, T_0 \
- VESRLG $26, h3, T_1 \
- VN MOD26, h0, h0 \
- VN MOD26, h3, h3 \
- VAG T_0, h1, h1 \
- VAG T_1, h4, h4 \
- VESRLG $26, h1, T_2 \
- VESRLG $26, h4, T_3 \
- VN MOD26, h1, h1 \
- VN MOD26, h4, h4 \
- VESLG $2, T_3, T_4 \
- VAG T_3, T_4, T_4 \
- VAG T_2, h2, h2 \
- VAG T_4, h0, h0 \
- VESRLG $26, h2, T_0 \
- VESRLG $26, h0, T_1 \
- VN MOD26, h2, h2 \
- VN MOD26, h0, h0 \
- VAG T_0, h3, h3 \
- VAG T_1, h1, h1 \
- VESRLG $26, h3, T_2 \
- VN MOD26, h3, h3 \
- VAG T_2, h4, h4
-
-// expand in0 into d[0] and in1 into d[1]
-#define EXPAND(in0, in1, d0, d1, d2, d3, d4) \
- VGBM $0x0707, d1 \ // d1=tmp
- VPERM in0, in1, EX2, d4 \
- VPERM in0, in1, EX0, d0 \
- VPERM in0, in1, EX1, d2 \
- VN d1, d4, d4 \
- VESRLG $26, d0, d1 \
- VESRLG $30, d2, d3 \
- VESRLG $4, d2, d2 \
- VN MOD26, d0, d0 \
- VN MOD26, d1, d1 \
- VN MOD26, d2, d2 \
- VN MOD26, d3, d3
-
-// pack h4:h0 into h1:h0 (no carry)
-#define PACK(h0, h1, h2, h3, h4) \
- VESLG $26, h1, h1 \
- VESLG $26, h3, h3 \
- VO h0, h1, h0 \
- VO h2, h3, h2 \
- VESLG $4, h2, h2 \
- VLEIB $7, $48, h1 \
- VSLB h1, h2, h2 \
- VO h0, h2, h0 \
- VLEIB $7, $104, h1 \
- VSLB h1, h4, h3 \
- VO h3, h0, h0 \
- VLEIB $7, $24, h1 \
- VSRLB h1, h4, h1
-
-// if h > 2**130-5 then h -= 2**130-5
-#define MOD(h0, h1, t0, t1, t2) \
- VZERO t0 \
- VLEIG $1, $5, t0 \
- VACCQ h0, t0, t1 \
- VAQ h0, t0, t0 \
- VONE t2 \
- VLEIG $1, $-4, t2 \
- VAQ t2, t1, t1 \
- VACCQ h1, t1, t1 \
- VONE t2 \
- VAQ t2, t1, t1 \
- VN h0, t1, t2 \
- VNC t0, t1, t1 \
- VO t1, t2, h0
-
-// func poly1305vx(out *[16]byte, m *byte, mlen uint64, key *[32]key)
-TEXT ·poly1305vx(SB), $0-32
- // This code processes up to 2 blocks (32 bytes) per iteration
- // using the algorithm described in:
- // NEON crypto, Daniel J. Bernstein & Peter Schwabe
- // https://cryptojedi.org/papers/neoncrypto-20120320.pdf
- LMG out+0(FP), R1, R4 // R1=out, R2=m, R3=mlen, R4=key
-
- // load MOD26, EX0, EX1 and EX2
- MOVD $·constants<>(SB), R5
- VLM (R5), MOD26, EX2
-
- // setup r
- VL (R4), T_0
- MOVD $·keyMask<>(SB), R6
- VL (R6), T_1
- VN T_0, T_1, T_0
- EXPAND(T_0, T_0, R_0, R_1, R_2, R_3, R_4)
-
- // setup r*5
- VLEIG $0, $5, T_0
- VLEIG $1, $5, T_0
-
- // store r (for final block)
- VMLOF T_0, R_1, R5SAVE_1
- VMLOF T_0, R_2, R5SAVE_2
- VMLOF T_0, R_3, R5SAVE_3
- VMLOF T_0, R_4, R5SAVE_4
- VLGVG $0, R_0, RSAVE_0
- VLGVG $0, R_1, RSAVE_1
- VLGVG $0, R_2, RSAVE_2
- VLGVG $0, R_3, RSAVE_3
- VLGVG $0, R_4, RSAVE_4
-
- // skip r**2 calculation
- CMPBLE R3, $16, skip
-
- // calculate r**2
- MULTIPLY(R_0, R_1, R_2, R_3, R_4, R_0, R_1, R_2, R_3, R_4, R5SAVE_1, R5SAVE_2, R5SAVE_3, R5SAVE_4, H_0, H_1, H_2, H_3, H_4)
- REDUCE(H_0, H_1, H_2, H_3, H_4)
- VLEIG $0, $5, T_0
- VLEIG $1, $5, T_0
- VMLOF T_0, H_1, R5_1
- VMLOF T_0, H_2, R5_2
- VMLOF T_0, H_3, R5_3
- VMLOF T_0, H_4, R5_4
- VLR H_0, R_0
- VLR H_1, R_1
- VLR H_2, R_2
- VLR H_3, R_3
- VLR H_4, R_4
-
- // initialize h
- VZERO H_0
- VZERO H_1
- VZERO H_2
- VZERO H_3
- VZERO H_4
-
-loop:
- CMPBLE R3, $32, b2
- VLM (R2), T_0, T_1
- SUB $32, R3
- MOVD $32(R2), R2
- EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
- VLEIB $4, $1, F_4
- VLEIB $12, $1, F_4
-
-multiply:
- VAG H_0, F_0, F_0
- VAG H_1, F_1, F_1
- VAG H_2, F_2, F_2
- VAG H_3, F_3, F_3
- VAG H_4, F_4, F_4
- MULTIPLY(F_0, F_1, F_2, F_3, F_4, R_0, R_1, R_2, R_3, R_4, R5_1, R5_2, R5_3, R5_4, H_0, H_1, H_2, H_3, H_4)
- REDUCE(H_0, H_1, H_2, H_3, H_4)
- CMPBNE R3, $0, loop
-
-finish:
- // sum vectors
- VZERO T_0
- VSUMQG H_0, T_0, H_0
- VSUMQG H_1, T_0, H_1
- VSUMQG H_2, T_0, H_2
- VSUMQG H_3, T_0, H_3
- VSUMQG H_4, T_0, H_4
-
- // h may be >= 2*(2**130-5) so we need to reduce it again
- REDUCE(H_0, H_1, H_2, H_3, H_4)
-
- // carry h1->h4
- VESRLG $26, H_1, T_1
- VN MOD26, H_1, H_1
- VAQ T_1, H_2, H_2
- VESRLG $26, H_2, T_2
- VN MOD26, H_2, H_2
- VAQ T_2, H_3, H_3
- VESRLG $26, H_3, T_3
- VN MOD26, H_3, H_3
- VAQ T_3, H_4, H_4
-
- // h is now < 2*(2**130-5)
- // pack h into h1 (hi) and h0 (lo)
- PACK(H_0, H_1, H_2, H_3, H_4)
-
- // if h > 2**130-5 then h -= 2**130-5
- MOD(H_0, H_1, T_0, T_1, T_2)
-
- // h += s
- MOVD $·bswapMask<>(SB), R5
- VL (R5), T_1
- VL 16(R4), T_0
- VPERM T_0, T_0, T_1, T_0 // reverse bytes (to big)
- VAQ T_0, H_0, H_0
- VPERM H_0, H_0, T_1, H_0 // reverse bytes (to little)
- VST H_0, (R1)
-
- RET
-
-b2:
- CMPBLE R3, $16, b1
-
- // 2 blocks remaining
- SUB $17, R3
- VL (R2), T_0
- VLL R3, 16(R2), T_1
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, T_1
- EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
- CMPBNE R3, $16, 2(PC)
- VLEIB $12, $1, F_4
- VLEIB $4, $1, F_4
-
- // setup [r²,r]
- VLVGG $1, RSAVE_0, R_0
- VLVGG $1, RSAVE_1, R_1
- VLVGG $1, RSAVE_2, R_2
- VLVGG $1, RSAVE_3, R_3
- VLVGG $1, RSAVE_4, R_4
- VPDI $0, R5_1, R5SAVE_1, R5_1
- VPDI $0, R5_2, R5SAVE_2, R5_2
- VPDI $0, R5_3, R5SAVE_3, R5_3
- VPDI $0, R5_4, R5SAVE_4, R5_4
-
- MOVD $0, R3
- BR multiply
-
-skip:
- VZERO H_0
- VZERO H_1
- VZERO H_2
- VZERO H_3
- VZERO H_4
-
- CMPBEQ R3, $0, finish
-
-b1:
- // 1 block remaining
- SUB $1, R3
- VLL R3, (R2), T_0
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, T_0
- VZERO T_1
- EXPAND(T_0, T_1, F_0, F_1, F_2, F_3, F_4)
- CMPBNE R3, $16, 2(PC)
- VLEIB $4, $1, F_4
- VLEIG $1, $1, R_0
- VZERO R_1
- VZERO R_2
- VZERO R_3
- VZERO R_4
- VZERO R5_1
- VZERO R5_2
- VZERO R5_3
- VZERO R5_4
-
- // setup [r, 1]
- VLVGG $0, RSAVE_0, R_0
- VLVGG $0, RSAVE_1, R_1
- VLVGG $0, RSAVE_2, R_2
- VLVGG $0, RSAVE_3, R_3
- VLVGG $0, RSAVE_4, R_4
- VPDI $0, R5SAVE_1, R5_1, R5_1
- VPDI $0, R5SAVE_2, R5_2, R5_2
- VPDI $0, R5SAVE_3, R5_3, R5_3
- VPDI $0, R5SAVE_4, R5_4, R5_4
-
- MOVD $0, R3
- BR multiply
-
-TEXT ·hasVectorFacility(SB), NOSPLIT, $24-1
- MOVD $x-24(SP), R1
- XC $24, 0(R1), 0(R1) // clear the storage
- MOVD $2, R0 // R0 is the number of double words stored -1
- WORD $0xB2B01000 // STFLE 0(R1)
- XOR R0, R0 // reset the value of R0
- MOVBZ z-8(SP), R1
- AND $0x40, R1
- BEQ novector
-
-vectorinstalled:
- // check if the vector instruction has been enabled
- VLEIB $0, $0xF, V16
- VLGVB $0, V16, R1
- CMPBNE R1, $0xF, novector
- MOVB $1, ret+0(FP) // have vx
- RET
-
-novector:
- MOVB $0, ret+0(FP) // no vx
- RET
diff --git a/ssl/test/runner/poly1305/sum_vmsl_s390x.s b/ssl/test/runner/poly1305/sum_vmsl_s390x.s
deleted file mode 100644
index e548020..0000000
--- a/ssl/test/runner/poly1305/sum_vmsl_s390x.s
+++ /dev/null
@@ -1,931 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// +build s390x,go1.11,!gccgo,!appengine
-
-#include "textflag.h"
-
-// Implementation of Poly1305 using the vector facility (vx) and the VMSL instruction.
-
-// constants
-#define EX0 V1
-#define EX1 V2
-#define EX2 V3
-
-// temporaries
-#define T_0 V4
-#define T_1 V5
-#define T_2 V6
-#define T_3 V7
-#define T_4 V8
-#define T_5 V9
-#define T_6 V10
-#define T_7 V11
-#define T_8 V12
-#define T_9 V13
-#define T_10 V14
-
-// r**2 & r**4
-#define R_0 V15
-#define R_1 V16
-#define R_2 V17
-#define R5_1 V18
-#define R5_2 V19
-// key (r)
-#define RSAVE_0 R7
-#define RSAVE_1 R8
-#define RSAVE_2 R9
-#define R5SAVE_1 R10
-#define R5SAVE_2 R11
-
-// message block
-#define M0 V20
-#define M1 V21
-#define M2 V22
-#define M3 V23
-#define M4 V24
-#define M5 V25
-
-// accumulator
-#define H0_0 V26
-#define H1_0 V27
-#define H2_0 V28
-#define H0_1 V29
-#define H1_1 V30
-#define H2_1 V31
-
-GLOBL ·keyMask<>(SB), RODATA, $16
-DATA ·keyMask<>+0(SB)/8, $0xffffff0ffcffff0f
-DATA ·keyMask<>+8(SB)/8, $0xfcffff0ffcffff0f
-
-GLOBL ·bswapMask<>(SB), RODATA, $16
-DATA ·bswapMask<>+0(SB)/8, $0x0f0e0d0c0b0a0908
-DATA ·bswapMask<>+8(SB)/8, $0x0706050403020100
-
-GLOBL ·constants<>(SB), RODATA, $48
-// EX0
-DATA ·constants<>+0(SB)/8, $0x18191a1b1c1d1e1f
-DATA ·constants<>+8(SB)/8, $0x0000050403020100
-// EX1
-DATA ·constants<>+16(SB)/8, $0x18191a1b1c1d1e1f
-DATA ·constants<>+24(SB)/8, $0x00000a0908070605
-// EX2
-DATA ·constants<>+32(SB)/8, $0x18191a1b1c1d1e1f
-DATA ·constants<>+40(SB)/8, $0x0000000f0e0d0c0b
-
-GLOBL ·c<>(SB), RODATA, $48
-// EX0
-DATA ·c<>+0(SB)/8, $0x0000050403020100
-DATA ·c<>+8(SB)/8, $0x0000151413121110
-// EX1
-DATA ·c<>+16(SB)/8, $0x00000a0908070605
-DATA ·c<>+24(SB)/8, $0x00001a1918171615
-// EX2
-DATA ·c<>+32(SB)/8, $0x0000000f0e0d0c0b
-DATA ·c<>+40(SB)/8, $0x0000001f1e1d1c1b
-
-GLOBL ·reduce<>(SB), RODATA, $32
-// 44 bit
-DATA ·reduce<>+0(SB)/8, $0x0
-DATA ·reduce<>+8(SB)/8, $0xfffffffffff
-// 42 bit
-DATA ·reduce<>+16(SB)/8, $0x0
-DATA ·reduce<>+24(SB)/8, $0x3ffffffffff
-
-// h = (f*g) % (2**130-5) [partial reduction]
-// uses T_0...T_9 temporary registers
-// input: m02_0, m02_1, m02_2, m13_0, m13_1, m13_2, r_0, r_1, r_2, r5_1, r5_2, m4_0, m4_1, m4_2, m5_0, m5_1, m5_2
-// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8, t9
-// output: m02_0, m02_1, m02_2, m13_0, m13_1, m13_2
-#define MULTIPLY(m02_0, m02_1, m02_2, m13_0, m13_1, m13_2, r_0, r_1, r_2, r5_1, r5_2, m4_0, m4_1, m4_2, m5_0, m5_1, m5_2, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9) \
- \ // Eliminate the dependency for the last 2 VMSLs
- VMSLG m02_0, r_2, m4_2, m4_2 \
- VMSLG m13_0, r_2, m5_2, m5_2 \ // 8 VMSLs pipelined
- VMSLG m02_0, r_0, m4_0, m4_0 \
- VMSLG m02_1, r5_2, V0, T_0 \
- VMSLG m02_0, r_1, m4_1, m4_1 \
- VMSLG m02_1, r_0, V0, T_1 \
- VMSLG m02_1, r_1, V0, T_2 \
- VMSLG m02_2, r5_1, V0, T_3 \
- VMSLG m02_2, r5_2, V0, T_4 \
- VMSLG m13_0, r_0, m5_0, m5_0 \
- VMSLG m13_1, r5_2, V0, T_5 \
- VMSLG m13_0, r_1, m5_1, m5_1 \
- VMSLG m13_1, r_0, V0, T_6 \
- VMSLG m13_1, r_1, V0, T_7 \
- VMSLG m13_2, r5_1, V0, T_8 \
- VMSLG m13_2, r5_2, V0, T_9 \
- VMSLG m02_2, r_0, m4_2, m4_2 \
- VMSLG m13_2, r_0, m5_2, m5_2 \
- VAQ m4_0, T_0, m02_0 \
- VAQ m4_1, T_1, m02_1 \
- VAQ m5_0, T_5, m13_0 \
- VAQ m5_1, T_6, m13_1 \
- VAQ m02_0, T_3, m02_0 \
- VAQ m02_1, T_4, m02_1 \
- VAQ m13_0, T_8, m13_0 \
- VAQ m13_1, T_9, m13_1 \
- VAQ m4_2, T_2, m02_2 \
- VAQ m5_2, T_7, m13_2 \
-
-// SQUARE uses three limbs of r and r_2*5 to output square of r
-// uses T_1, T_5 and T_7 temporary registers
-// input: r_0, r_1, r_2, r5_2
-// temp: TEMP0, TEMP1, TEMP2
-// output: p0, p1, p2
-#define SQUARE(r_0, r_1, r_2, r5_2, p0, p1, p2, TEMP0, TEMP1, TEMP2) \
- VMSLG r_0, r_0, p0, p0 \
- VMSLG r_1, r5_2, V0, TEMP0 \
- VMSLG r_2, r5_2, p1, p1 \
- VMSLG r_0, r_1, V0, TEMP1 \
- VMSLG r_1, r_1, p2, p2 \
- VMSLG r_0, r_2, V0, TEMP2 \
- VAQ TEMP0, p0, p0 \
- VAQ TEMP1, p1, p1 \
- VAQ TEMP2, p2, p2 \
- VAQ TEMP0, p0, p0 \
- VAQ TEMP1, p1, p1 \
- VAQ TEMP2, p2, p2 \
-
-// carry h0->h1->h2->h0 || h3->h4->h5->h3
-// uses T_2, T_4, T_5, T_7, T_8, T_9
-// t6, t7, t8, t9, t10, t11
-// input: h0, h1, h2, h3, h4, h5
-// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11
-// output: h0, h1, h2, h3, h4, h5
-#define REDUCE(h0, h1, h2, h3, h4, h5, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11) \
- VLM (R12), t6, t7 \ // 44 and 42 bit clear mask
- VLEIB $7, $0x28, t10 \ // 5 byte shift mask
- VREPIB $4, t8 \ // 4 bit shift mask
- VREPIB $2, t11 \ // 2 bit shift mask
- VSRLB t10, h0, t0 \ // h0 byte shift
- VSRLB t10, h1, t1 \ // h1 byte shift
- VSRLB t10, h2, t2 \ // h2 byte shift
- VSRLB t10, h3, t3 \ // h3 byte shift
- VSRLB t10, h4, t4 \ // h4 byte shift
- VSRLB t10, h5, t5 \ // h5 byte shift
- VSRL t8, t0, t0 \ // h0 bit shift
- VSRL t8, t1, t1 \ // h2 bit shift
- VSRL t11, t2, t2 \ // h2 bit shift
- VSRL t8, t3, t3 \ // h3 bit shift
- VSRL t8, t4, t4 \ // h4 bit shift
- VESLG $2, t2, t9 \ // h2 carry x5
- VSRL t11, t5, t5 \ // h5 bit shift
- VN t6, h0, h0 \ // h0 clear carry
- VAQ t2, t9, t2 \ // h2 carry x5
- VESLG $2, t5, t9 \ // h5 carry x5
- VN t6, h1, h1 \ // h1 clear carry
- VN t7, h2, h2 \ // h2 clear carry
- VAQ t5, t9, t5 \ // h5 carry x5
- VN t6, h3, h3 \ // h3 clear carry
- VN t6, h4, h4 \ // h4 clear carry
- VN t7, h5, h5 \ // h5 clear carry
- VAQ t0, h1, h1 \ // h0->h1
- VAQ t3, h4, h4 \ // h3->h4
- VAQ t1, h2, h2 \ // h1->h2
- VAQ t4, h5, h5 \ // h4->h5
- VAQ t2, h0, h0 \ // h2->h0
- VAQ t5, h3, h3 \ // h5->h3
- VREPG $1, t6, t6 \ // 44 and 42 bit masks across both halves
- VREPG $1, t7, t7 \
- VSLDB $8, h0, h0, h0 \ // set up [h0/1/2, h3/4/5]
- VSLDB $8, h1, h1, h1 \
- VSLDB $8, h2, h2, h2 \
- VO h0, h3, h3 \
- VO h1, h4, h4 \
- VO h2, h5, h5 \
- VESRLG $44, h3, t0 \ // 44 bit shift right
- VESRLG $44, h4, t1 \
- VESRLG $42, h5, t2 \
- VN t6, h3, h3 \ // clear carry bits
- VN t6, h4, h4 \
- VN t7, h5, h5 \
- VESLG $2, t2, t9 \ // multiply carry by 5
- VAQ t9, t2, t2 \
- VAQ t0, h4, h4 \
- VAQ t1, h5, h5 \
- VAQ t2, h3, h3 \
-
-// carry h0->h1->h2->h0
-// input: h0, h1, h2
-// temp: t0, t1, t2, t3, t4, t5, t6, t7, t8
-// output: h0, h1, h2
-#define REDUCE2(h0, h1, h2, t0, t1, t2, t3, t4, t5, t6, t7, t8) \
- VLEIB $7, $0x28, t3 \ // 5 byte shift mask
- VREPIB $4, t4 \ // 4 bit shift mask
- VREPIB $2, t7 \ // 2 bit shift mask
- VGBM $0x003F, t5 \ // mask to clear carry bits
- VSRLB t3, h0, t0 \
- VSRLB t3, h1, t1 \
- VSRLB t3, h2, t2 \
- VESRLG $4, t5, t5 \ // 44 bit clear mask
- VSRL t4, t0, t0 \
- VSRL t4, t1, t1 \
- VSRL t7, t2, t2 \
- VESRLG $2, t5, t6 \ // 42 bit clear mask
- VESLG $2, t2, t8 \
- VAQ t8, t2, t2 \
- VN t5, h0, h0 \
- VN t5, h1, h1 \
- VN t6, h2, h2 \
- VAQ t0, h1, h1 \
- VAQ t1, h2, h2 \
- VAQ t2, h0, h0 \
- VSRLB t3, h0, t0 \
- VSRLB t3, h1, t1 \
- VSRLB t3, h2, t2 \
- VSRL t4, t0, t0 \
- VSRL t4, t1, t1 \
- VSRL t7, t2, t2 \
- VN t5, h0, h0 \
- VN t5, h1, h1 \
- VESLG $2, t2, t8 \
- VN t6, h2, h2 \
- VAQ t0, h1, h1 \
- VAQ t8, t2, t2 \
- VAQ t1, h2, h2 \
- VAQ t2, h0, h0 \
-
-// expands two message blocks into the lower halfs of the d registers
-// moves the contents of the d registers into upper halfs
-// input: in1, in2, d0, d1, d2, d3, d4, d5
-// temp: TEMP0, TEMP1, TEMP2, TEMP3
-// output: d0, d1, d2, d3, d4, d5
-#define EXPACC(in1, in2, d0, d1, d2, d3, d4, d5, TEMP0, TEMP1, TEMP2, TEMP3) \
- VGBM $0xff3f, TEMP0 \
- VGBM $0xff1f, TEMP1 \
- VESLG $4, d1, TEMP2 \
- VESLG $4, d4, TEMP3 \
- VESRLG $4, TEMP0, TEMP0 \
- VPERM in1, d0, EX0, d0 \
- VPERM in2, d3, EX0, d3 \
- VPERM in1, d2, EX2, d2 \
- VPERM in2, d5, EX2, d5 \
- VPERM in1, TEMP2, EX1, d1 \
- VPERM in2, TEMP3, EX1, d4 \
- VN TEMP0, d0, d0 \
- VN TEMP0, d3, d3 \
- VESRLG $4, d1, d1 \
- VESRLG $4, d4, d4 \
- VN TEMP1, d2, d2 \
- VN TEMP1, d5, d5 \
- VN TEMP0, d1, d1 \
- VN TEMP0, d4, d4 \
-
-// expands one message block into the lower halfs of the d registers
-// moves the contents of the d registers into upper halfs
-// input: in, d0, d1, d2
-// temp: TEMP0, TEMP1, TEMP2
-// output: d0, d1, d2
-#define EXPACC2(in, d0, d1, d2, TEMP0, TEMP1, TEMP2) \
- VGBM $0xff3f, TEMP0 \
- VESLG $4, d1, TEMP2 \
- VGBM $0xff1f, TEMP1 \
- VPERM in, d0, EX0, d0 \
- VESRLG $4, TEMP0, TEMP0 \
- VPERM in, d2, EX2, d2 \
- VPERM in, TEMP2, EX1, d1 \
- VN TEMP0, d0, d0 \
- VN TEMP1, d2, d2 \
- VESRLG $4, d1, d1 \
- VN TEMP0, d1, d1 \
-
-// pack h2:h0 into h1:h0 (no carry)
-// input: h0, h1, h2
-// output: h0, h1, h2
-#define PACK(h0, h1, h2) \
- VMRLG h1, h2, h2 \ // copy h1 to upper half h2
- VESLG $44, h1, h1 \ // shift limb 1 44 bits, leaving 20
- VO h0, h1, h0 \ // combine h0 with 20 bits from limb 1
- VESRLG $20, h2, h1 \ // put top 24 bits of limb 1 into h1
- VLEIG $1, $0, h1 \ // clear h2 stuff from lower half of h1
- VO h0, h1, h0 \ // h0 now has 88 bits (limb 0 and 1)
- VLEIG $0, $0, h2 \ // clear upper half of h2
- VESRLG $40, h2, h1 \ // h1 now has upper two bits of result
- VLEIB $7, $88, h1 \ // for byte shift (11 bytes)
- VSLB h1, h2, h2 \ // shift h2 11 bytes to the left
- VO h0, h2, h0 \ // combine h0 with 20 bits from limb 1
- VLEIG $0, $0, h1 \ // clear upper half of h1
-
-// if h > 2**130-5 then h -= 2**130-5
-// input: h0, h1
-// temp: t0, t1, t2
-// output: h0
-#define MOD(h0, h1, t0, t1, t2) \
- VZERO t0 \
- VLEIG $1, $5, t0 \
- VACCQ h0, t0, t1 \
- VAQ h0, t0, t0 \
- VONE t2 \
- VLEIG $1, $-4, t2 \
- VAQ t2, t1, t1 \
- VACCQ h1, t1, t1 \
- VONE t2 \
- VAQ t2, t1, t1 \
- VN h0, t1, t2 \
- VNC t0, t1, t1 \
- VO t1, t2, h0 \
-
-// func poly1305vmsl(out *[16]byte, m *byte, mlen uint64, key *[32]key)
-TEXT ·poly1305vmsl(SB), $0-32
- // This code processes 6 + up to 4 blocks (32 bytes) per iteration
- // using the algorithm described in:
- // NEON crypto, Daniel J. Bernstein & Peter Schwabe
- // https://cryptojedi.org/papers/neoncrypto-20120320.pdf
- // And as moddified for VMSL as described in
- // Accelerating Poly1305 Cryptographic Message Authentication on the z14
- // O'Farrell et al, CASCON 2017, p48-55
- // https://ibm.ent.box.com/s/jf9gedj0e9d2vjctfyh186shaztavnht
-
- LMG out+0(FP), R1, R4 // R1=out, R2=m, R3=mlen, R4=key
- VZERO V0 // c
-
- // load EX0, EX1 and EX2
- MOVD $·constants<>(SB), R5
- VLM (R5), EX0, EX2 // c
-
- // setup r
- VL (R4), T_0
- MOVD $·keyMask<>(SB), R6
- VL (R6), T_1
- VN T_0, T_1, T_0
- VZERO T_2 // limbs for r
- VZERO T_3
- VZERO T_4
- EXPACC2(T_0, T_2, T_3, T_4, T_1, T_5, T_7)
-
- // T_2, T_3, T_4: [0, r]
-
- // setup r*20
- VLEIG $0, $0, T_0
- VLEIG $1, $20, T_0 // T_0: [0, 20]
- VZERO T_5
- VZERO T_6
- VMSLG T_0, T_3, T_5, T_5
- VMSLG T_0, T_4, T_6, T_6
-
- // store r for final block in GR
- VLGVG $1, T_2, RSAVE_0 // c
- VLGVG $1, T_3, RSAVE_1 // c
- VLGVG $1, T_4, RSAVE_2 // c
- VLGVG $1, T_5, R5SAVE_1 // c
- VLGVG $1, T_6, R5SAVE_2 // c
-
- // initialize h
- VZERO H0_0
- VZERO H1_0
- VZERO H2_0
- VZERO H0_1
- VZERO H1_1
- VZERO H2_1
-
- // initialize pointer for reduce constants
- MOVD $·reduce<>(SB), R12
-
- // calculate r**2 and 20*(r**2)
- VZERO R_0
- VZERO R_1
- VZERO R_2
- SQUARE(T_2, T_3, T_4, T_6, R_0, R_1, R_2, T_1, T_5, T_7)
- REDUCE2(R_0, R_1, R_2, M0, M1, M2, M3, M4, R5_1, R5_2, M5, T_1)
- VZERO R5_1
- VZERO R5_2
- VMSLG T_0, R_1, R5_1, R5_1
- VMSLG T_0, R_2, R5_2, R5_2
-
- // skip r**4 calculation if 3 blocks or less
- CMPBLE R3, $48, b4
-
- // calculate r**4 and 20*(r**4)
- VZERO T_8
- VZERO T_9
- VZERO T_10
- SQUARE(R_0, R_1, R_2, R5_2, T_8, T_9, T_10, T_1, T_5, T_7)
- REDUCE2(T_8, T_9, T_10, M0, M1, M2, M3, M4, T_2, T_3, M5, T_1)
- VZERO T_2
- VZERO T_3
- VMSLG T_0, T_9, T_2, T_2
- VMSLG T_0, T_10, T_3, T_3
-
- // put r**2 to the right and r**4 to the left of R_0, R_1, R_2
- VSLDB $8, T_8, T_8, T_8
- VSLDB $8, T_9, T_9, T_9
- VSLDB $8, T_10, T_10, T_10
- VSLDB $8, T_2, T_2, T_2
- VSLDB $8, T_3, T_3, T_3
-
- VO T_8, R_0, R_0
- VO T_9, R_1, R_1
- VO T_10, R_2, R_2
- VO T_2, R5_1, R5_1
- VO T_3, R5_2, R5_2
-
- CMPBLE R3, $80, load // less than or equal to 5 blocks in message
-
- // 6(or 5+1) blocks
- SUB $81, R3
- VLM (R2), M0, M4
- VLL R3, 80(R2), M5
- ADD $1, R3
- MOVBZ $1, R0
- CMPBGE R3, $16, 2(PC)
- VLVGB R3, R0, M5
- MOVD $96(R2), R2
- EXPACC(M0, M1, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
- EXPACC(M2, M3, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
- VLEIB $2, $1, H2_0
- VLEIB $2, $1, H2_1
- VLEIB $10, $1, H2_0
- VLEIB $10, $1, H2_1
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO T_4
- VZERO T_10
- EXPACC(M4, M5, M0, M1, M2, M3, T_4, T_10, T_0, T_1, T_2, T_3)
- VLR T_4, M4
- VLEIB $10, $1, M2
- CMPBLT R3, $16, 2(PC)
- VLEIB $10, $1, T_10
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M2, M3, M4, T_4, T_5, T_2, T_7, T_8, T_9)
- VMRHG V0, H0_1, H0_0
- VMRHG V0, H1_1, H1_0
- VMRHG V0, H2_1, H2_0
- VMRLG V0, H0_1, H0_1
- VMRLG V0, H1_1, H1_1
- VMRLG V0, H2_1, H2_1
-
- SUB $16, R3
- CMPBLE R3, $0, square
-
-load:
- // load EX0, EX1 and EX2
- MOVD $·c<>(SB), R5
- VLM (R5), EX0, EX2
-
-loop:
- CMPBLE R3, $64, add // b4 // last 4 or less blocks left
-
- // next 4 full blocks
- VLM (R2), M2, M5
- SUB $64, R3
- MOVD $64(R2), R2
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, T_0, T_1, T_3, T_4, T_5, T_2, T_7, T_8, T_9)
-
- // expacc in-lined to create [m2, m3] limbs
- VGBM $0x3f3f, T_0 // 44 bit clear mask
- VGBM $0x1f1f, T_1 // 40 bit clear mask
- VPERM M2, M3, EX0, T_3
- VESRLG $4, T_0, T_0 // 44 bit clear mask ready
- VPERM M2, M3, EX1, T_4
- VPERM M2, M3, EX2, T_5
- VN T_0, T_3, T_3
- VESRLG $4, T_4, T_4
- VN T_1, T_5, T_5
- VN T_0, T_4, T_4
- VMRHG H0_1, T_3, H0_0
- VMRHG H1_1, T_4, H1_0
- VMRHG H2_1, T_5, H2_0
- VMRLG H0_1, T_3, H0_1
- VMRLG H1_1, T_4, H1_1
- VMRLG H2_1, T_5, H2_1
- VLEIB $10, $1, H2_0
- VLEIB $10, $1, H2_1
- VPERM M4, M5, EX0, T_3
- VPERM M4, M5, EX1, T_4
- VPERM M4, M5, EX2, T_5
- VN T_0, T_3, T_3
- VESRLG $4, T_4, T_4
- VN T_1, T_5, T_5
- VN T_0, T_4, T_4
- VMRHG V0, T_3, M0
- VMRHG V0, T_4, M1
- VMRHG V0, T_5, M2
- VMRLG V0, T_3, M3
- VMRLG V0, T_4, M4
- VMRLG V0, T_5, M5
- VLEIB $10, $1, M2
- VLEIB $10, $1, M5
-
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- CMPBNE R3, $0, loop
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
- VMRHG V0, H0_1, H0_0
- VMRHG V0, H1_1, H1_0
- VMRHG V0, H2_1, H2_0
- VMRLG V0, H0_1, H0_1
- VMRLG V0, H1_1, H1_1
- VMRLG V0, H2_1, H2_1
-
- // load EX0, EX1, EX2
- MOVD $·constants<>(SB), R5
- VLM (R5), EX0, EX2
-
- // sum vectors
- VAQ H0_0, H0_1, H0_0
- VAQ H1_0, H1_1, H1_0
- VAQ H2_0, H2_1, H2_0
-
- // h may be >= 2*(2**130-5) so we need to reduce it again
- // M0...M4 are used as temps here
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
-
-next: // carry h1->h2
- VLEIB $7, $0x28, T_1
- VREPIB $4, T_2
- VGBM $0x003F, T_3
- VESRLG $4, T_3
-
- // byte shift
- VSRLB T_1, H1_0, T_4
-
- // bit shift
- VSRL T_2, T_4, T_4
-
- // clear h1 carry bits
- VN T_3, H1_0, H1_0
-
- // add carry
- VAQ T_4, H2_0, H2_0
-
- // h is now < 2*(2**130-5)
- // pack h into h1 (hi) and h0 (lo)
- PACK(H0_0, H1_0, H2_0)
-
- // if h > 2**130-5 then h -= 2**130-5
- MOD(H0_0, H1_0, T_0, T_1, T_2)
-
- // h += s
- MOVD $·bswapMask<>(SB), R5
- VL (R5), T_1
- VL 16(R4), T_0
- VPERM T_0, T_0, T_1, T_0 // reverse bytes (to big)
- VAQ T_0, H0_0, H0_0
- VPERM H0_0, H0_0, T_1, H0_0 // reverse bytes (to little)
- VST H0_0, (R1)
- RET
-
-add:
- // load EX0, EX1, EX2
- MOVD $·constants<>(SB), R5
- VLM (R5), EX0, EX2
-
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
- VMRHG V0, H0_1, H0_0
- VMRHG V0, H1_1, H1_0
- VMRHG V0, H2_1, H2_0
- VMRLG V0, H0_1, H0_1
- VMRLG V0, H1_1, H1_1
- VMRLG V0, H2_1, H2_1
- CMPBLE R3, $64, b4
-
-b4:
- CMPBLE R3, $48, b3 // 3 blocks or less
-
- // 4(3+1) blocks remaining
- SUB $49, R3
- VLM (R2), M0, M2
- VLL R3, 48(R2), M3
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, M3
- MOVD $64(R2), R2
- EXPACC(M0, M1, H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_0, T_1, T_2, T_3)
- VLEIB $10, $1, H2_0
- VLEIB $10, $1, H2_1
- VZERO M0
- VZERO M1
- VZERO M4
- VZERO M5
- VZERO T_4
- VZERO T_10
- EXPACC(M2, M3, M0, M1, M4, M5, T_4, T_10, T_0, T_1, T_2, T_3)
- VLR T_4, M2
- VLEIB $10, $1, M4
- CMPBNE R3, $16, 2(PC)
- VLEIB $10, $1, T_10
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M4, M5, M2, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M3, M4, M5, T_4, T_5, T_2, T_7, T_8, T_9)
- VMRHG V0, H0_1, H0_0
- VMRHG V0, H1_1, H1_0
- VMRHG V0, H2_1, H2_0
- VMRLG V0, H0_1, H0_1
- VMRLG V0, H1_1, H1_1
- VMRLG V0, H2_1, H2_1
- SUB $16, R3
- CMPBLE R3, $0, square // this condition must always hold true!
-
-b3:
- CMPBLE R3, $32, b2
-
- // 3 blocks remaining
-
- // setup [r²,r]
- VSLDB $8, R_0, R_0, R_0
- VSLDB $8, R_1, R_1, R_1
- VSLDB $8, R_2, R_2, R_2
- VSLDB $8, R5_1, R5_1, R5_1
- VSLDB $8, R5_2, R5_2, R5_2
-
- VLVGG $1, RSAVE_0, R_0
- VLVGG $1, RSAVE_1, R_1
- VLVGG $1, RSAVE_2, R_2
- VLVGG $1, R5SAVE_1, R5_1
- VLVGG $1, R5SAVE_2, R5_2
-
- // setup [h0, h1]
- VSLDB $8, H0_0, H0_0, H0_0
- VSLDB $8, H1_0, H1_0, H1_0
- VSLDB $8, H2_0, H2_0, H2_0
- VO H0_1, H0_0, H0_0
- VO H1_1, H1_0, H1_0
- VO H2_1, H2_0, H2_0
- VZERO H0_1
- VZERO H1_1
- VZERO H2_1
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
-
- // H*[r**2, r]
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, H0_1, H1_1, T_10, M5)
-
- SUB $33, R3
- VLM (R2), M0, M1
- VLL R3, 32(R2), M2
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, M2
-
- // H += m0
- VZERO T_1
- VZERO T_2
- VZERO T_3
- EXPACC2(M0, T_1, T_2, T_3, T_4, T_5, T_6)
- VLEIB $10, $1, T_3
- VAG H0_0, T_1, H0_0
- VAG H1_0, T_2, H1_0
- VAG H2_0, T_3, H2_0
-
- VZERO M0
- VZERO M3
- VZERO M4
- VZERO M5
- VZERO T_10
-
- // (H+m0)*r
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M3, M4, M5, V0, T_10, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M3, M4, M5, T_10, H0_1, H1_1, H2_1, T_9)
-
- // H += m1
- VZERO V0
- VZERO T_1
- VZERO T_2
- VZERO T_3
- EXPACC2(M1, T_1, T_2, T_3, T_4, T_5, T_6)
- VLEIB $10, $1, T_3
- VAQ H0_0, T_1, H0_0
- VAQ H1_0, T_2, H1_0
- VAQ H2_0, T_3, H2_0
- REDUCE2(H0_0, H1_0, H2_0, M0, M3, M4, M5, T_9, H0_1, H1_1, H2_1, T_10)
-
- // [H, m2] * [r**2, r]
- EXPACC2(M2, H0_0, H1_0, H2_0, T_1, T_2, T_3)
- CMPBNE R3, $16, 2(PC)
- VLEIB $10, $1, H2_0
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, H0_1, H1_1, M5, T_10)
- SUB $16, R3
- CMPBLE R3, $0, next // this condition must always hold true!
-
-b2:
- CMPBLE R3, $16, b1
-
- // 2 blocks remaining
-
- // setup [r²,r]
- VSLDB $8, R_0, R_0, R_0
- VSLDB $8, R_1, R_1, R_1
- VSLDB $8, R_2, R_2, R_2
- VSLDB $8, R5_1, R5_1, R5_1
- VSLDB $8, R5_2, R5_2, R5_2
-
- VLVGG $1, RSAVE_0, R_0
- VLVGG $1, RSAVE_1, R_1
- VLVGG $1, RSAVE_2, R_2
- VLVGG $1, R5SAVE_1, R5_1
- VLVGG $1, R5SAVE_2, R5_2
-
- // setup [h0, h1]
- VSLDB $8, H0_0, H0_0, H0_0
- VSLDB $8, H1_0, H1_0, H1_0
- VSLDB $8, H2_0, H2_0, H2_0
- VO H0_1, H0_0, H0_0
- VO H1_1, H1_0, H1_0
- VO H2_1, H2_0, H2_0
- VZERO H0_1
- VZERO H1_1
- VZERO H2_1
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
-
- // H*[r**2, r]
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, T_10, M0, M1, M2, M3, M4, T_4, T_5, T_2, T_7, T_8, T_9)
- VMRHG V0, H0_1, H0_0
- VMRHG V0, H1_1, H1_0
- VMRHG V0, H2_1, H2_0
- VMRLG V0, H0_1, H0_1
- VMRLG V0, H1_1, H1_1
- VMRLG V0, H2_1, H2_1
-
- // move h to the left and 0s at the right
- VSLDB $8, H0_0, H0_0, H0_0
- VSLDB $8, H1_0, H1_0, H1_0
- VSLDB $8, H2_0, H2_0, H2_0
-
- // get message blocks and append 1 to start
- SUB $17, R3
- VL (R2), M0
- VLL R3, 16(R2), M1
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, M1
- VZERO T_6
- VZERO T_7
- VZERO T_8
- EXPACC2(M0, T_6, T_7, T_8, T_1, T_2, T_3)
- EXPACC2(M1, T_6, T_7, T_8, T_1, T_2, T_3)
- VLEIB $2, $1, T_8
- CMPBNE R3, $16, 2(PC)
- VLEIB $10, $1, T_8
-
- // add [m0, m1] to h
- VAG H0_0, T_6, H0_0
- VAG H1_0, T_7, H1_0
- VAG H2_0, T_8, H2_0
-
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
- VZERO T_10
- VZERO M0
-
- // at this point R_0 .. R5_2 look like [r**2, r]
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M2, M3, M4, M5, T_10, M0, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M2, M3, M4, M5, T_9, H0_1, H1_1, H2_1, T_10)
- SUB $16, R3, R3
- CMPBLE R3, $0, next
-
-b1:
- CMPBLE R3, $0, next
-
- // 1 block remaining
-
- // setup [r²,r]
- VSLDB $8, R_0, R_0, R_0
- VSLDB $8, R_1, R_1, R_1
- VSLDB $8, R_2, R_2, R_2
- VSLDB $8, R5_1, R5_1, R5_1
- VSLDB $8, R5_2, R5_2, R5_2
-
- VLVGG $1, RSAVE_0, R_0
- VLVGG $1, RSAVE_1, R_1
- VLVGG $1, RSAVE_2, R_2
- VLVGG $1, R5SAVE_1, R5_1
- VLVGG $1, R5SAVE_2, R5_2
-
- // setup [h0, h1]
- VSLDB $8, H0_0, H0_0, H0_0
- VSLDB $8, H1_0, H1_0, H1_0
- VSLDB $8, H2_0, H2_0, H2_0
- VO H0_1, H0_0, H0_0
- VO H1_1, H1_0, H1_0
- VO H2_1, H2_0, H2_0
- VZERO H0_1
- VZERO H1_1
- VZERO H2_1
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
-
- // H*[r**2, r]
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
-
- // set up [0, m0] limbs
- SUB $1, R3
- VLL R3, (R2), M0
- ADD $1, R3
- MOVBZ $1, R0
- CMPBEQ R3, $16, 2(PC)
- VLVGB R3, R0, M0
- VZERO T_1
- VZERO T_2
- VZERO T_3
- EXPACC2(M0, T_1, T_2, T_3, T_4, T_5, T_6)// limbs: [0, m]
- CMPBNE R3, $16, 2(PC)
- VLEIB $10, $1, T_3
-
- // h+m0
- VAQ H0_0, T_1, H0_0
- VAQ H1_0, T_2, H1_0
- VAQ H2_0, T_3, H2_0
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
-
- BR next
-
-square:
- // setup [r²,r]
- VSLDB $8, R_0, R_0, R_0
- VSLDB $8, R_1, R_1, R_1
- VSLDB $8, R_2, R_2, R_2
- VSLDB $8, R5_1, R5_1, R5_1
- VSLDB $8, R5_2, R5_2, R5_2
-
- VLVGG $1, RSAVE_0, R_0
- VLVGG $1, RSAVE_1, R_1
- VLVGG $1, RSAVE_2, R_2
- VLVGG $1, R5SAVE_1, R5_1
- VLVGG $1, R5SAVE_2, R5_2
-
- // setup [h0, h1]
- VSLDB $8, H0_0, H0_0, H0_0
- VSLDB $8, H1_0, H1_0, H1_0
- VSLDB $8, H2_0, H2_0, H2_0
- VO H0_1, H0_0, H0_0
- VO H1_1, H1_0, H1_0
- VO H2_1, H2_0, H2_0
- VZERO H0_1
- VZERO H1_1
- VZERO H2_1
-
- VZERO M0
- VZERO M1
- VZERO M2
- VZERO M3
- VZERO M4
- VZERO M5
-
- // (h0*r**2) + (h1*r)
- MULTIPLY(H0_0, H1_0, H2_0, H0_1, H1_1, H2_1, R_0, R_1, R_2, R5_1, R5_2, M0, M1, M2, M3, M4, M5, T_0, T_1, T_2, T_3, T_4, T_5, T_6, T_7, T_8, T_9)
- REDUCE2(H0_0, H1_0, H2_0, M0, M1, M2, M3, M4, T_9, T_10, H0_1, M5)
- BR next
-
-TEXT ·hasVMSLFacility(SB), NOSPLIT, $24-1
- MOVD $x-24(SP), R1
- XC $24, 0(R1), 0(R1) // clear the storage
- MOVD $2, R0 // R0 is the number of double words stored -1
- WORD $0xB2B01000 // STFLE 0(R1)
- XOR R0, R0 // reset the value of R0
- MOVBZ z-8(SP), R1
- AND $0x01, R1
- BEQ novmsl
-
-vectorinstalled:
- // check if the vector instruction has been enabled
- VLEIB $0, $0xF, V16
- VLGVB $0, V16, R1
- CMPBNE R1, $0xF, novmsl
- MOVB $1, ret+0(FP) // have vx
- RET
-
-novmsl:
- MOVB $0, ret+0(FP) // no vx
- RET
diff --git a/ssl/test/runner/poly1305/vectors_test.go b/ssl/test/runner/poly1305/vectors_test.go
deleted file mode 100644
index 18d7ff8..0000000
--- a/ssl/test/runner/poly1305/vectors_test.go
+++ /dev/null
@@ -1,2943 +0,0 @@
-// Copyright 2018 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package poly1305
-
-var testData = [...]test{
- // edge cases
- {
- // see https://go-review.googlesource.com/#/c/30101/
- key: "3b3a29e93b213a5c5c3b3b053a3a8c0d00000000000000000000000000000000",
- tag: "6dc18b8c344cd79927118bbe84b7f314",
- in: "81d8b2e46a25213b58fee4213a2a28e921c12a9632516d3b73272727becf2129",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "04000000000000000000000000000000", // (2¹³⁰-1) % (2¹³⁰-5)
- in: "ffffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "faffffffffffffffffffffffffffffff", // (2¹³⁰-6) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (2¹³⁰-5) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "f9ffffffffffffffffffffffffffffff", // (2*(2¹³⁰-6)) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (2*(2¹³⁰-5)) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "f8ffffffffffffffffffffffffffffff", // (3*(2¹³⁰-6)) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (3*(2¹³⁰-5)) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "f7ffffffffffffffffffffffffffffff", // (4*(2¹³⁰-6)) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (4*(2¹³⁰-5)) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "f3ffffffffffffffffffffffffffffff", // (8*(2¹³⁰-6)) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (8*(2¹³⁰-5)) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "ebffffffffffffffffffffffffffffff", // (16*(2¹³⁰-6)) % (2¹³⁰-5)
- in: "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "faffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- {
- key: "0100000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000", // (16*(2¹³⁰-5)) % (2¹³⁰-5)
- in: "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "fbffffffffffffffffffffffffffffff" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000" +
- "00000000000000000000000000000000",
- },
- // original smoke tests
- {
- key: "746869732069732033322d62797465206b657920666f7220506f6c7931333035",
- tag: "a6f745008f81c916a20dcc74eef2b2f0",
- in: "48656c6c6f20776f726c6421",
- },
- {
- key: "746869732069732033322d62797465206b657920666f7220506f6c7931333035",
- tag: "49ec78090e481ec6c26b33b91ccc0307",
- in: "0000000000000000000000000000000000000000000000000000000000000000",
- },
- {
- key: "746869732069732033322d62797465206b657920666f7220506f6c7931333035",
- tag: "da84bcab02676c38cdb015604274c2aa",
- in: "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000",
- },
- {
- key: "0000000000000000000000000000000000000000000000000000000000000000",
- tag: "00000000000000000000000000000000",
- in: "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000000000" +
- "000000000000000000000000000000000000000000000000000000",
- },
- // randomly generated
- {
- key: "52fdfc072182654f163f5f0f9a621d729566c74d10037c4d7bbb0407d1e2c649",
- tag: "9566c74d10037c4d7bbb0407d1e2c649",
- in: "",
- },
- {
- key: "81855ad8681d0d86d1e91e00167939cb6694d2c422acd208a0072939487f6999",
- tag: "eaa270caaa12faa39b797374a4b8a420",
- in: "eb",
- },
- {
- key: "9d18a44784045d87f3c67cf22746e995af5a25367951baa2ff6cd471c483f15f",
- tag: "dbea66e1da48a8f822887c6162c2acf1",
- in: "b90b",
- },
- {
- key: "adb37c5821b6d95526a41a9504680b4e7c8b763a1b1d49d4955c848621632525",
- tag: "6ac09aaa88c32ee95a7198376f16abdb",
- in: "3fec73",
- },
- {
- key: "8dd7a9e28bf921119c160f0702448615bbda08313f6a8eb668d20bf505987592",
- tag: "b1443487f97fe340b04a74719ed4de68",
- in: "1e668a5b",
- },
- {
- key: "df2c7fc4844592d2572bcd0668d2d6c52f5054e2d0836bf84c7174cb7476364c",
- tag: "7463be0f9d99a5348039e4afcbf4019c",
- in: "c3dbd968b0",
- },
- {
- key: "f7172ed85794bb358b0c3b525da1786f9fff094279db1944ebd7a19d0f7bbacb",
- tag: "2edaee3bcf303fd05609e131716f8157",
- in: "e0255aa5b7d4",
- },
- {
- key: "4bec40f84c892b9bffd43629b0223beea5f4f74391f445d15afd4294040374f6",
- tag: "965f18767420c1d94a4ef657e8d15e1e",
- in: "924b98cbf8713f",
- },
- {
- key: "8d962d7c8d019192c24224e2cafccae3a61fb586b14323a6bc8f9e7df1d92933",
- tag: "2bf4a33287dd6d87e1ed4282f7342b6a",
- in: "3ff993933bea6f5b",
- },
- {
- key: "3af6de0374366c4719e43a1b067d89bc7f01f1f573981659a44ff17a4c7215a3",
- tag: "c5e987b60373a48893c5af30acf2471f",
- in: "b539eb1e5849c6077d",
- },
- {
- key: "bb5722f5717a289a266f97647981998ebea89c0b4b373970115e82ed6f4125c8",
- tag: "19f0f640b309d168ea1b480e6a4faee5",
- in: "fa7311e4d7defa922daa",
- },
- {
- key: "e7786667f7e936cd4f24abf7df866baa56038367ad6145de1ee8f4a8b0993ebd",
- tag: "de75e5565d97834b9fa84ad568d31359",
- in: "f8883a0ad8be9c3978b048",
- },
- {
- key: "83e56a156a8de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e",
- tag: "de184a5a9b826aa203c5c017986d6690",
- in: "4da6430105220d0b29688b73",
- },
- {
- key: "4b8ea0f3ca9936e8461f10d77c96ea80a7a665f606f6a63b7f3dfd2567c18979",
- tag: "7478f18d9684905aa5d1a34ee67e4c84",
- in: "e4d60f26686d9bf2fb26c901ff",
- },
- {
- key: "354cde1607ee294b39f32b7c7822ba64f84ab43ca0c6e6b91c1fd3be89904341",
- tag: "3b2008a9c52b5308f5538b789ab5506f",
- in: "79d3af4491a369012db92d184fc3",
- },
- {
- key: "9d1734ff5716428953bb6865fcf92b0c3a17c9028be9914eb7649c6c93478009",
- tag: "71c8e76a67a505b7370b562ba15ba032",
- in: "79d1830356f2a54c3deab2a4b4475d",
- },
- {
- key: "63afbe8fb56987c77f5818526f1814be823350eab13935f31d84484517e924ae",
- tag: "1dc895f74f866bdb3edf6c4430829c1c",
- in: "f78ae151c00755925836b7075885650c",
- },
- {
- key: "30ec29a3703934bf50a28da102975deda77e758579ea3dfe4136abf752b3b827",
- tag: "afca2b3ba7b0e1a928001966883e9b16",
- in: "1d03e944b3c9db366b75045f8efd69d22ae5411947cb553d7694267aef4e" +
- "bcea406b32d6108bd68584f57e37caac6e33feaa3263a399437024ba9c9b" +
- "14678a274f01a910ae295f6efbfe5f5abf44ccde263b5606633e2bf0006f" +
- "28295d7d39069f01a239c4365854c3af7f6b41d631f92b9a8d12f4125732" +
- "5fff332f7576b0620556304a3e3eae14c28d0cea39d2901a52720da85ca1" +
- "e4b38eaf3f",
- },
- {
- key: "44c6c6ef8362f2f54fc00e09d6fc25640854c15dfcacaa8a2cecce5a3aba53ab",
- tag: "6f2a09aa76c9b76774e31ec02dcf7991",
- in: "705b18db94b4d338a5143e63408d8724b0cf3fae17a3f79be1072fb63c35" +
- "d6042c4160f38ee9e2a9f3fb4ffb0019b454d522b5ffa17604193fb89667" +
- "10a7960732ca52cf53c3f520c889b79bf504cfb57c7601232d589baccea9" +
- "d6e263e25c27741d3f6c62cbbb15d9afbcbf7f7da41ab0408e3969c2e2cd" +
- "cf233438bf1774ace7709a4f091e9a83fdeae0ec55eb233a9b5394cb3c78" +
- "56b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdec90b302dcdc3b9ef5" +
- "22e2a6f1ed0afec1f8e20faabedf6b162e717d3a748a58677a0c56348f89" +
- "21a266b11d0f334c62fe52ba53af19779cb2948b6570ffa0b773963c130a" +
- "d797ddea",
- },
- {
- key: "fe4e3ad29b5125210f0ef1c314090f07c79a6f571c246f3e9ac0b7413ef110bd",
- tag: "27381e3fc2a356103fb796f107d826e7",
- in: "58b00ce73bff706f7ff4b6f44090a32711f3208e4e4b89cb5165ce64002c" +
- "bd9c2887aa113df2468928d5a23b9ca740f80c9382d9c6034ad2960c7965" +
- "03e1ce221725f50caf1fbfe831b10b7bf5b15c47a53dbf8e7dcafc9e1386" +
- "47a4b44ed4bce964ed47f74aa594468ced323cb76f0d3fac476c9fb03fc9" +
- "228fbae88fd580663a0454b68312207f0a3b584c62316492b49753b5d502" +
- "7ce15a4f0a58250d8fb50e77f2bf4f0152e5d49435807f9d4b97be6fb779" +
- "70466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd4a75" +
- "e498320982c85aad70384859c05a4b13a1d5b2f5bfef5a6ed92da482caa9" +
- "568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e" +
- "a6",
- },
- {
- key: "4729a861d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e641",
- tag: "0173965669fb9de88d38a827a0271271",
- in: "5a761f03abaa40abc9448fddeb2191d945c04767af847afd0edb5d8857b7" +
- "99acb18e4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdc" +
- "c595bcce3c7bd3d8df93fab7e125ddebafe65a31bd5d41e2d2ce9c2b1789" +
- "2f0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a403" +
- "4aa48afa3f85b8a62708caebbac880b5b89b93da53810164402104e648b6" +
- "226a1b78021851f5d9ac0f313a89ddfc454c5f8f72ac89b38b19f53784c1" +
- "9e9beac03c875a27db029de37ae37a42318813487685929359ca8c5eb94e" +
- "152dc1af42ea3d1676c1bdd19ab8e2925c6daee4de5ef9f9dcf08dfcbd02" +
- "b80809398585928a0f7de50be1a6dc1d5768e8537988fddce562e9b948c9" +
- "18bba3e933e5c400cde5e60c5ead6fc7ae77ba1d259b188a4b21c86fbc23" +
- "d728b45347eada650af24c56d0800a8691332088a805bd55c446e25eb075" +
- "90bafcccbec6177536401d9a2b7f512b54bfc9d00532adf5aaa7c3a96bc5" +
- "9b489f77d9042c5bce26b163defde5ee6a0fbb3e9346cef81f0ae9515ef3" +
- "0fa47a364e75aea9e111d596e685a591121966e031650d510354aa845580" +
- "ff560760fd36514ca197c875f1d02d9216eba7627e2398322eb5cf43d72b" +
- "d2e5b887d4630fb8d4747ead6eb82acd1c5b078143ee26a586ad23139d50" +
- "41723470bf24a865837c",
- },
- {
- key: "9123461c41f5ff99aa99ce24eb4d788576e3336e65491622558fdf297b9fa007",
- tag: "1eb0cdad9237905250d30a24fe172a34",
- in: "864bafd7cd4ca1b2fb5766ab431a032b72b9a7e937ed648d0801f29055d3" +
- "090d2463718254f9442483c7b98b938045da519843854b0ed3f7ba951a49" +
- "3f321f0966603022c1dfc579b99ed9d20d573ad53171c8fef7f1f4e4613b" +
- "b365b2ebb44f0ffb6907136385cdc838f0bdd4c812f042577410aca008c2" +
- "afbc4c79c62572e20f8ed94ee62b4de7aa1cc84c887e1f7c31e927dfe52a" +
- "5f8f46627eb5d3a4fe16fafce23623e196c9dfff7fbaff4ffe94f4589733" +
- "e563e19d3045aad3e226488ac02cca4291aed169dce5039d6ab00e40f67a" +
- "ab29332de1448b35507c7c8a09c4db07105dc31003620405da3b2169f5a9" +
- "10c9d0096e5e3ef1b570680746acd0cc7760331b663138d6d342b051b5df" +
- "410637cf7aee9b0c8c10a8f9980630f34ce001c0ab7ac65e502d39b216cb" +
- "c50e73a32eaf936401e2506bd8b82c30d346bc4b2fa319f245a8657ec122" +
- "eaf4ad5425c249ee160e17b95541c2aee5df820ac85de3f8e784870fd87a" +
- "36cc0d163833df636613a9cc947437b6592835b9f6f4f8c0e70dbeebae7b" +
- "14cdb9bc41033aa5baf40d45e24d72eac4a28e3ca030c9937ab8409a7cbf" +
- "05ae21f97425254543d94d115900b90ae703b97d9856d2441d14ba49a677" +
- "de8b18cb454b99ddd9daa7ccbb7500dae4e2e5df8cf3859ebddada6745fb" +
- "a6a04c5c37c7ca35036f11732ce8bc27b48868611fc73c82a491bfabd7a1" +
- "9df50fdc78a55dbbc2fd37f9296566557fab885b039f30e706f0cd5961e1" +
- "9b642221db44a69497b8ad99408fe1e037c68bf7c5e5de1d2c68192348ec" +
- "1189fb2e36973cef09ff14be23922801f6eaee41409158b45f2dec82d17c" +
- "aaba160cd6",
- },
- {
- key: "40ff73495fe4a05ce1202ca7287ed3235b95e69f571fa5e656aaa51fae1ebdd7",
- tag: "2e619d8ea81b77484e4fddeb29844e4b",
- in: "aa6269c2ec7f4057b33593bc84888c970fd528d4a99a1eab9d2420134537" +
- "cd6d02282e0981e140232a4a87383a21d1845c408ad757043813032a0bd5" +
- "a30dcca6e3aa2df04715d879279a96879a4f3690ac2025a60c7db15e0501" +
- "ebc34b734355fe4a059bd3899d920e95f1c46d432f9b08e64d7f9b38965d" +
- "5a77a7ac183c3833e1a3425ead69d4f975012fd1a49ed832f69e6e9c63b4" +
- "53ec049c9e7a5cf944232d10353f64434abae060f6506ad3fdb1f4415b0a" +
- "f9ce8c208bc20ee526741539fa3203c77ecba410fd6718f227e0b430f9bc" +
- "b049a3d38540dc222969120ce80f2007cd42a708a721aa29987b45d4e428" +
- "811984ecad349cc35dd93515cefe0b002cee5e71c47935e281ebfc4b8b65" +
- "2b69ccb092e55a20f1b9f97d046296124621928739a86671cc180152b953" +
- "e3bf9d19f825c3dd54ae1688e49efb5efe65dcdad34bc860010e7c8c997c" +
- "d5f9e320ca7d39d4ba801a175b1c76f057832f3f36d7d893e216e4c7bbdb" +
- "548d0ba48449330027368b34f9c69776b4591532da1c5be68ef4eebe8cb8" +
- "fa7dc5483fb70c2c896334cb1f9cb5dfe044fa086197ff5dfd02f2ba3884" +
- "c53dd718c8560da743a8e9d4aeae20ccef002d82ca352592b8d8f2a8df3b" +
- "0c35f15b9b370dca80d4ca8e9a133eb52094f2dd5c08731f52315d828846" +
- "e37df68fd10658b480f2ac84233633957e688e924ffe3713b52c76fd8a56" +
- "da8bb07daa8eb4eb8f7334f99256e2766a4109150eed424f0f743543cdea" +
- "66e5baaa03edc918e8305bb19fc0c6b4ddb4aa3886cb5090940fc6d4cabe" +
- "2153809e4ed60a0e2af07f1b2a6bb5a6017a578a27cbdc20a1759f76b088" +
- "9a83ce25ce3ca91a4eb5c2f8580819da04d02c41770c01746de44f3db6e3" +
- "402e7873db7635516e87b33e4b412ba3df68544920f5ea27ec097710954f" +
- "42158bdba66d4814c064b4112538676095467c89ba98e6a543758d7093a4" +
- "94df",
- },
- {
- key: "5cc36d09c7a6472a41f29c380a987b1ecdcf84765f4e5d3ceefc1c02181f570f",
- tag: "0d57b8cbea8090df0541354673dcb4e0",
- in: "44fcd629f08dc1ef53c9ae0d8869fe67fdc7a2c67b425f13c5be8d9f630c" +
- "1d063c02fd75cf64c1aec9d2e2ef6e6431d5f5ad0489078dc61f46494dcc" +
- "f403dad7f094170d2c3e29c198b0f341e284c4be8fa60c1a478d6bd55dd2" +
- "c04dad86d2053d5d25b014e3d8b64322cdcb5004faa46cfa2d6ad2ff933b" +
- "c3bd9a5a74660af3d048a9a43634c0250427d9a6219197a3f3633f841753" +
- "ba7c27f3619f387b6b1a6cb9c1dc227674aa020724d137da2cb87b1615d5" +
- "12974fa4747dd1e17d02c9462a44fec150ca3a8f99cc1e4953365e429956" +
- "5e108535b1f62e1d4ba18e17a52164418bfd1a933f7fb3a126c860830a87" +
- "293d9271da736e4398c1e37fb75c4bf02786e1faf4b610cd1377fbb9ae18" +
- "0655a0abefbad700c09473469f1eca5a66d53fa3dc7cd3e7c3b0411d7e14" +
- "5f96eb9654ab94913dda503a50f9e773842f4d2a5faa60869bf365830511" +
- "f2ededd03e0a73000edb60c9a29a5f5e194cf3b5667a694690384599d116" +
- "f8d2fd93b2aed55b7d44b5b054f3f38e788e4fdf36e591568c41d1052cad" +
- "0fcb68ca4c4bf5090d57df9db6f0d91dd8b11b804f331adb7efb087a5604" +
- "e9e22b4d54db40bcbc6e272ff5eaddfc1471459e59f0554c58251342134a" +
- "8daaef1498069ba581ef1da2510be92843487a4eb8111c79a6f0195fc38a" +
- "d6aee93c1df2b5897eaa38ad8f47ab2fe0e3aa3e6accbfd4c16d46843318" +
- "5fc61c861b96ca65e34d31f24d6f56ee85092314a4d7656205c15322f1c9" +
- "7613c079eae292ba966e10d1e700164e518b243f424c46f9ea63db1c2c34" +
- "b512c403c128ee19030a6226517b805a072512a5e4cd274b7fd1fa23f830" +
- "058208ff1a063b41039c74036b5b3da8b1a0b93135a710352da0f6c31203" +
- "a09d1f2329651bb3ab3984ab591f2247e71cd44835e7a1a1b66d8595f7ae" +
- "f9bf39d1417d2d31ea3599d405ff4b5999a86f52f3259b452909b57937d8" +
- "5364d6c23deb4f14e0d9fcee9184df5994fdc11f045c025c8d561adb0e7d" +
- "fd4748fd4b20f84e53322471a410cdb3fd88e48b2e7eb7ae5dae994cb5ea" +
- "e3eaf21cf9005db560d6d22e4d9b97d7e9e488751afcd72aa176c0fcde93" +
- "16f676fd527d9c42105b851639f09ea70533d26fc60cbeb4b76ed554fc99" +
- "177620b28ca6f56a716f8cb384",
- },
- {
- key: "811c3e356e7c793acf114c624dc86ace38e67bff2a60e5b2a6c20723c1b9f003",
- tag: "c6e59044cefc43ee681c3eed872d02b3",
- in: "e115b304c023792448794546a2474f04294d7a616215e5dd6c40a65bb6ed" +
- "b508c3680b14c176c327fdfb1ee21962c0006b7deb4e5de87db21989d13c" +
- "3ab0462d5d2a52ef4ca0d366ae06a314f50e3a21d9247f814037798cc5e1" +
- "0a63de027477decdeb8a8e0c279299272490106ddf8683126f60d35772c6" +
- "dfc744b0adbfd5dcf118c4f2b06cfaf077881d733a5e643b7c46976647d1" +
- "c1d3f8f6237c6218fa86fb47080b1f7966137667bd6661660c43b75b6339" +
- "0b514bbe491aa46b524bde1c5b7456255fb214c3f74907b7ce1cba94210b" +
- "78b5e68f049fcb002b96a5d38d59df6e977d587abb42d0972d5f3ffc898b" +
- "3cbec26f104255761aee1b8a232d703585dd276ee1f43c8cd7e92a993eb1" +
- "5107d02f59ba75f8dd1442ee37786ddb902deb88dd0ebdbf229fb25a9dca" +
- "86d0ce46a278a45f5517bff2c049cc959a227dcdd3aca677e96ce84390e9" +
- "b9a28e0988777331847a59f1225b027a66c1421422683dd6081af95e16f2" +
- "48ab03da494112449ce7bdace6c988292f95699bb5e4d9c8d250aa28a6df" +
- "44c0c265156deb27e9476a0a4af44f34bdf631b4af1146afe34ea988fc95" +
- "3e71fc21ce60b3962313000fe46d757109281f6e55bc950200d0834ceb5c" +
- "41553afd12576f3fbb9a8e05883ccc51c9a1269b6d8e9d27123dce5d0bd6" +
- "db649c6fea06b4e4e9dea8d2d17709dc50ae8aa38231fd409e9580e255fe" +
- "2bf59e6e1b6e310610ea4881206262be76120d6c97db969e003947f08bad" +
- "8fa731f149397c47d2c964e84f090e77e19046277e18cd8917c48a776c9d" +
- "e627b6656203b522c60e97cc61914621c564243913ae643f1c9c9e0ad00a" +
- "14f66eaa45844229ecc35abb2637317ae5d5e338c68691bea8fa1fd469b7" +
- "b54d0fccd730c1284ec7e6fccdec800b8fa67e6e55ac574f1e53a65ab976" +
- "4c218a404184793cc9892308e296b334c85f7097edc16927c2451c4cd7e5" +
- "3f239aa4f4c83241bde178f692898b1ece2dbcb19a97e64c4710326528f2" +
- "4b099d0b674bd614fad307d9b9440adab32117f0f15b1450277b00eb366e" +
- "0260fca84c1d27e50a1116d2ce16c8f5eb212c77c1a84425744ea3195edb" +
- "b54c970b77e090b644942d43fe8c4546a158bad7620217a40e34b9bb84d1" +
- "89eff32b20ef3f015714dbb1f150015d6eeb84cbccbd3fffa63bde89",
- },
- {
- key: "f33691f5db2dea41e1e608af3ff39f3a6988dba204ce1b09214475ae0ea864b8",
- tag: "6e50e70411201378c8d67857d7b631d2",
- in: "439bc9ea10db4d2b08c7fcf2e8bd89fa9844f8061d462e28f174489e7514" +
- "0f84e842040141cc59ce38f9551850cfbdfac2d75337d155090d70d0d930" +
- "04340bdfe60062f17c53f3c9005b9995a0feb49f6bef8eaff80f4feb7ef3" +
- "f2181733a4b43b6ac43a5130a73a9b3c2cbc93bd296cd5f48c9df022b6c8" +
- "2bb752bc21e3d8379be31328aa32edc11efc8a4b4b3f370ee8c870cd281d" +
- "614e6bc2c0a5ca303bc48696a3bd574ee34738de4c4c29910f8feb7557bf" +
- "ffcfe7428b4703144bd6d7fe5b3f5de748918553df5453b3c6001696f3de" +
- "0137e454aadf30cedfb6be36b0b908a38409f1a2dc202fc285610765e4c8" +
- "6414692bf4bde20ed899e97727b7ea1d95d7c621717c560f1d260ab3624e" +
- "d6168d77c483dd5ce0d234049017795f2e5a7569d7ad323c50a5b1170337" +
- "4174a9977026c20cd52c10b72f14e0569a684a3dcf2ccbc148fd3db506e2" +
- "8d24f6c55544cb3980a36e86747adc89ebad78d1630618d113fa445f8625" +
- "b583cd7be33913c30c419d047cf3baf40fd05219a1fcec717b87a65fa022" +
- "1a3aa8143062d77588168019454240ae3d37640996f2967810459bc658df" +
- "e556de4d07263dc3d9158ec242008226d1c6aea7f0846e12ce2d316e80da" +
- "522343264ec9451ec23aaaa367d640faad4af3d44d6d86544ade34c93518" +
- "2843f6b4d1c934996778affa9ee962e7dfef5e70d933d4309f0f343e9606" +
- "1b91b11ac380a9675e17a96099fe411bedc28a298cd78d5496e28fbbd4f5" +
- "b0a27735d1144348e22be5b75724d8f125e99c4cb4e9c3a1f0b4e9da5146" +
- "e6afaa33d02fda74bf58a8badee2b634b989c01755afa6ab20ee494c6ae4" +
- "c2c6f17af6b53b61d2947d83a18eb3b8a1612aad5d3ea7e8e35f325c9168" +
- "ac490f22cb713ddb61fbd96011c5849ac8e2fcd42db820349bdf9157dcc0" +
- "0d9f9ed9c099b10c7194d48b623b0df43759734b2a2e5f8a35e7192bf9a0" +
- "03dcb9d16a54bd84d922f85b6021b28aacc5264fe9e83deb48f18f864cbd" +
- "367eb163d39c45b0eb907311a2a4b09fb26109088df782ce031b02f3caff" +
- "d2dbe25b1cbde9f35ba7c47292a4fd49e7def7a28824f3dfda259a86c3de" +
- "59257c255c712686ee47d128a55c7b9e8c546035eab7e2da420f32ed5c94" +
- "bc12a34dc68eb99257a7ea03b69d6c760b0681fa24e4ca97b7c377182ab5" +
- "fee30a278b08c44c988a8f925af2997883111c750d176b432735868208f4" +
- "0de7137331b544f2d28040a3581d195e82811c945c3f9fde68fc21b36a44" +
- "e1cfa2d8eb625f3102461539b3f13c660936a5ddb29a0ae791fbf52c2f69" +
- "7bd334653f3605b362d91cd78569b41dbd09b2a5892440b5097fa08d0b4b" +
- "291fc5b934585dd8d5adc80d573fdd194b2eae26dfc49f5e51c1f1607d7e" +
- "87740702f244bf39ca1d52423e0ae84891dfdf4f43ef984c7a5f293a2007" +
- "a1e00e39c757f064518953f55621f955986f63",
- },
- {
- key: "d115b6ac998a65b48b3dae5977abaf985258d3d1cfe1616cec3d6a77f7a75785",
- tag: "b431c9318ec2769fc8ee8f5fc3c079c3",
- in: "7e7eb43839a6d7616b8a7b1fb7144817904342a9bd34167051162941a6b1" +
- "b85db5e587f76e4a53211755d5ab29c11822d7711a97b3f1ff5b21f2485d" +
- "9c86241fb56cdd6796245d3112df11ad9a7344db44d09934c4efb280ed65" +
- "80cfcafb5c97a32993cbbf4917183e0b7bb38f2ce2479c28e1d39f673962" +
- "17a7010448dfd39a4e7f406c8bd2d804f993bb410fffa4eb57518a531ecf" +
- "259a8af068230acb826d9ffc20ee0fc43885221a321e3928971bb28615f0" +
- "d9f099f5b68a80503a910fdba0bc643c60b64837900be38770b6b30c362c" +
- "4580722b5dbb1b9c8cd02a18fd7b5661d2c4d28aa941c50af6655c826690" +
- "37312fbf9f1cf4adb0b9400532755011b40e8252bd0e3c7a22efb0ef9122" +
- "1e04b4aa8316d4a4ffeaa11909d38cc264650e7ca416835ded0953f39e29" +
- "b01d3a33bba454760fb0a96d9fe50b3e42c95271e57840380d1fd39a375b" +
- "3e5513a31a4b80a2dad8731d4fd1ced5ff61e1fbe8ff3ff90a277e6b5631" +
- "f99f046c4c3c66158554f61af2ede73aede97e94b1d1f129aaadf9b53548" +
- "553cc2304103e245b77701f134d94d2a3658f2b41108c5a519c2c8f450db" +
- "027824f1c0ab94010589a4139ff521938b4f0c7bf0986585f535b6e292e5" +
- "b3ded23bf81cec17c8420fe67a449e508864e4cbb7eaf335975668f013e9" +
- "da70b33bd52a72094a8f03762ea7440ce9fcd10e251837cfc9ccc1a8cc47" +
- "0c67379f6a32f16cf70ea8c19d1a67779a9b2d2b379665e0e908a88b26e7" +
- "8c9f94f17acefa6d5feb70a7095e0297c53e091cf98df132a23a5ce5aa72" +
- "59f1154b92e079f0b6f95d2a38aa5d62a2fd97c12ee7b085e57cc4652863" +
- "8defacc1e70c3aceab82a9fa04e6aa70f5fbfd19de075bee4e3aac4a87d0" +
- "ad0226a463a554816f1ebac08f30f4c3a93fa85d79b92f0da06348b4f008" +
- "880fac2df0f768d8f9d082f5a747afb0f62eb29c89d926de9fc491921474" +
- "1d8647c67d57ac55f94751389ee466bbd44dbe186f2f38abbc61a0425613" +
- "e9b6a64e6bcb45a2e2bb783b9103483643d5610a7e2dcdb10b5d78423285" +
- "506b42a99b00a4fb7b619b4526bb4ec78299dd01ad894fde2f053e18c55b" +
- "6047f86333f2690c2cb8e87d9834ab8a5e339aa346e4d9952ed62dc083e3" +
- "b11a823a67f23fec099a033f127ebe8626a89fa1a5a6b3520aa0d215a8e7" +
- "dea3af37907686c16521739a95d6c532cc259c497bf397fceaea49cd46b9" +
- "ad5c1b39a36fdd2f0d2225fef1b6ca2bb73fe604646c10ba4c572ab13a26" +
- "559ededc98f5a34c874cc25621e65ba4852529b5a4e9c1b2bf8e1a8f8ff0" +
- "5a31095b84696c6381eb9ad37ac0db184fe5fccf3554e514946a33cabe6f" +
- "4d617b549d28ad1cc4642dac96e0215ee1596481600d3619e8f45e2c9ae1" +
- "da834d44aca216bba0efef6254503ca90339f2d7ca508b2722d50c08def8" +
- "a736590fa44855cd9eb9979c743783aa26e633696739f2ae25ff7b72ceb2" +
- "4dff4455b85bbd675c8cb71ad18386dc58c371bdf37b4b3875b98a9423ff" +
- "3becfc0d0ba2aacab3ee7683cb3b345095fefcaca5751ca793da63c89428",
- },
- {
- key: "f3717306b9729be998cdb2c9d856306c5ae3d89da2cdcef12f86f6110c98d873",
- tag: "907dba0f4849c7cf4570b5128b5f31d5",
- in: "079572187d4559f24d8e48dc366441acf226a4db79e214ec3ee288acc349" +
- "887e2e377419bcafa377d0151497b52e4d9cf2a02b0fc91ad9516482bdf6" +
- "eccd1497954b53241bfb0bc5c04cc45045c6251f23a510060fee32721872" +
- "bbc95cd8d400dff00bcac2ecce6229c7d73d8f85ed5a87afdccf6dedd299" +
- "2d5c7b5b8090c47c737ded036ff0e9aedf02a2242fd9820be618b9601e73" +
- "d3ba5d8f1ae9805cfd2306251704bc74e3546997f109f1dfae20c03ff31f" +
- "17564769aa49f01233c9c4b79f90fa3d1433d18cdc497914046ad77d2792" +
- "2588a7d0e61d4258d7d80cdab8503e3111ddca22cf7f39c1f80f1e16a68d" +
- "9e21db8b53dd316dfa4233cb453a39a90101c60efc08514a3057db007e96" +
- "507745bd4a0764ed8717a250bffb5fd1ea58474bdfb5b869681939693926" +
- "40d832a3387ed4ac9cdab0d2af8fcb51b86e4d927097f1e79b5af96574ec" +
- "d59d0dd150a0208978c41de28ad6cadf72a49279cffd6dc281c640f2e294" +
- "4cde49a13ed390da1dd92e3011ce0f4a0863375a9db3f67fca1e3b8288a0" +
- "78611161d7cb668ecdb932e1ff3733982c8c460eeeff2bca46c96e8a02cf" +
- "b55d770940de556373a4dd676e3a0dd66f1280c8cb77a85136b3f003fab4" +
- "887dad548de7bfe6488ae55e7a71da4097db03900d4b94e776a939530328" +
- "83492da900b2a6c3e73d7a6f12ee30c9dd06cc34e5a3893976eb1de5864d" +
- "32e792ac02e68d052d9d0cfc7cfb40b77728422f6c26cf68987c6b40fcfe" +
- "9d660abc657360eb129de11bd70af5eb8fe350af2c27a6ece2cdf81b94c8" +
- "0e68e8c51106497cfa5171236efe2d71d76b5dff3352af9b407dc5aab60f" +
- "46b5683646f5b28732b7c750d351a08a507243d8e437cc4bef13a3edaa20" +
- "5fc4e9968b4e563fa0dc965ba20b8e48bc188a321b16d3213bed69647512" +
- "7a20afc1a3680ef261df6d37b017dee05cfc3a42e4130216e5540cf715c4" +
- "e638d7d615c50bef576eeb19b3b15b2c2b454dfcef2b18161a143ddf52fc" +
- "8e88fa71cbe34c92cd4b5a0adc81e5c33e11d2721bc1b95a9e693ac3cabc" +
- "490889a8a42bf7e22375b679e8598c8faef22a006ed2da8ab1c08aaed2f5" +
- "6d6f26649036335c0881bfec1e3a5346335c3b3707ee92173f1a7a3305c2" +
- "933f78e995da8f1df64daf12b81ce23c8813c27fd4551103dc33561c2e80" +
- "45b6b6770fa03498fd359a104884699d628020173edbcc4398b977e456e4" +
- "885964840466176a490e7c513ba5d66090277c1ab1632a995a54f555a452" +
- "1170a000507865b6650730aa6d6050a55959102836fff3d37e4773340e59" +
- "2e56951ff9652519de4421d9c5b63edbeb30a3852a1ea110a9a29721aee3" +
- "23d5a306de1624cecc87badc47aa87f489635d2fb60bff62ba67f5257999" +
- "6af0a1f1a6fbcd8704e119196fcc289a6db6a4170a2cae31a1d30744b702" +
- "2536d1526d41659c2dcc8b39c26aecfc0f8a707136d81b2827a158fd7386" +
- "a537514471c213a8c859016748e0264cf3fbde10f40c620840ec4df99432" +
- "e2b9e1e368e33f126ec40c572e841c2618d49d4eb098b9533b1f4ae00b46" +
- "8d15de8c8ab6d0b650e599576f2bd90a124c9c6a0f911fd1bd8253bac272" +
- "942cbdf8864f3747ff7f09d8a5a9d8599be7ee1744e5f1faf3e526cd2a06" +
- "b157527272af9d38565957c9ce663c295766c0e0e464971c6282b70d4c0c" +
- "1fb3b69856b34c089ad2b2c745f5a033cee1429c5b855581ee285278893c" +
- "43a5968d9c28384b7abe8d072ba69089c938685cb1eab461f05314ad6d06" +
- "eaa58512f8738bde35b7b15ef359dd2e8753cb1ed6",
- },
- {
- key: "9772c1a4b74cbf53586e5df04369b35f1fdca390565872251bc6844bc81bda88",
- tag: "68eb7fc459ecc3be819485001ab438dc",
- in: "e115cc2f33e367cb85c01a914b3a512404ad6a98b5b0c3a211d4bffd5802" +
- "ee43b3fb07451c74524ec8b4eddbb41ca33dd6e49791875d716a44bec97b" +
- "7c2d4546616939ffa3b1ab9b8ba1d1a637e7c985cc922606caa0453085e3" +
- "5f2fe0bd2de129d1d1856ade975a3281a62965927d8bb695e54514e69558" +
- "89361a2a00a1b24e62bda78d0b71a0d40147016fcdaf1a702331dda8e678" +
- "d8f476dcc91698da1688c610ec0cb1d9b8fbcd45dfde6d1503ba60a01337" +
- "ae5b2f5c854a82c3087779babd2e522dd92f4718cd9f8c649ac226745ca2" +
- "fa1696442764758f67cd926369578ae87612790dc56ed9cda935281a490e" +
- "5c984950ec7a4e930520d273a69da4ed3a330e532508e26f942961fed0e3" +
- "efeed52a7b96250d723155aa39a8ae85131c255c32bf406b647de1a37fba" +
- "dc61e302bb5b70adec4505ee66b3a1d1b7bfe9c58b11e53ad556d56e5807" +
- "017bb30b71be94e8f86aaf1496e8b8d6db75ec0afbe1cd336c23963c745d" +
- "7b4ba1787ceb30728f1762b46f6eaad5064c8029d29b86266b87f93142a2" +
- "74f519f3281d8c1cb43c23eb184ae41f3f625cf624b05a48d73cd7783fdf" +
- "14954a03ec1a930e9a954424eff030e3f15357de4c19983f484619a0e9e2" +
- "b67221cf965e9aa8d8926595c793adfe0181050df8b845ce648a66df532f" +
- "78b10c83ecc86374a4f8abf8edcc303654bafd3dcc7de9c77a0a9d1d98fb" +
- "121534b47d16f75b55fdc2a5e2e6799f8a2f8000d4292282e56863ae422a" +
- "5779900ad6881b78946e750d7777f33f2f013a75c19615632c0e40b98338" +
- "1e9b8d35a26abe30242c45662eebb157e6d7a8a5519de60268ac289b8295" +
- "5d4feb47b9eef6da65031c6f52c2c4f5baa36fce3618b6a331f1e8bdd621" +
- "48954fcf0846afeeb0a6cadb495c909a7fe671b021d5b0b4669961052187" +
- "d01b67d44218471bfb04c1a3d82bf7b776208013fc8adabaefb11719f7a7" +
- "e6cb0b92d4cc39b403ceb56bd806cbdcc9ee75362ab4aaeb760e170fdc6a" +
- "23c038d45f465d8ec8519af8b0aad2eb5fae2972c603ed35ff8e46644803" +
- "fc042ff8044540280766e35d8aaddcaa81e7c0c7eba28674f710492924c6" +
- "1743da4d241e12b0c519910d4e31de332c2672ea77c9a3d5c60cd78a35d7" +
- "924fda105b6f0a7cc11523157982418405be0bacf554b6398aeb9a1a3b12" +
- "fe411c09e9bfb66416a47dd51cbd29abf8fbbd264dd57ba21a388c7e19e8" +
- "12e66768b2584ad8471bef36245881fc04a22d9900a246668592ca35cfc3" +
- "a8faf77da494df65f7d5c3daa129b7c98cef57e0826dee394eb927b3d6b3" +
- "a3c42fa2576dcc6efd1259b6819da9544c82728276b324a36121a519aee5" +
- "ae850738a44349cdec1220a6a933808aee44ba48ce46ec8fb7d897bd9e6b" +
- "c4c325a27d1b457eb6be5c1806cd301c5d874d2e863fb0a01cbd3e1f5b0f" +
- "8e0c771fca0c0b14042a7b0f3ae6264294a82212119b73821dcfbbfd85bb" +
- "625b6f75e4dc0ee0292ab4f17daf1d507e6c97364260480d406bd43b7d8e" +
- "8c2f26672a916321b482d5fa7166e282bfeed9b3598c8f8c19d2f8c8b98d" +
- "f24c2500c8ad41cd6ed3f2835737916d846f1a6406cda1125ed7740fe301" +
- "d1144559b7c95fa407599ae40a795226513153f86c9b8abe7d8aa6963c99" +
- "5646ec586cbf20a03a698cc0681b7bd333402d00fa8e15cb32300b5a24ea" +
- "316c5e1df67de78891846cb9183a4b112c3bcc17bcaa5fecd6c1dbbf6ef8" +
- "272d9269e7f0ba9f17050a6aa5f11cb28874360396ab647941f2c9a85cb0" +
- "6a969919b16997b0827af8f909c614545f1ad638ebb23109f6bab6b49b22" +
- "b2285cabbb998b3e1bf42771b4d4e52330b224e5a1d63169ec85fe1c7dd2" +
- "46dbafa6138448420f463d547a41c2b26026d4621b854bc7786ab3a0a93a" +
- "e5390dd840f2454028b7c3bb87680f04f084089bbc8786ee42cf06904d01" +
- "7e405144d2fae141599e2babe71abfbe7644fb25ec8a8a44a8928ff77a59" +
- "a3e235de6bd7c7b803cf3cf60435e473e3315f02d7292b1c3f5a19c93646" +
- "3cc4ccd6b24961083756f86ffa107322c5c7dd8d2e4ca0466f6725e8a35b" +
- "574f0439f34ca52a393b2f017d2503ba2018fb4a0991fddc1949832d370a" +
- "27c42e",
- },
- {
- key: "d18a328b63a1d0f34e987682fe6ca3d48b4834b4312a17e99b3d88827b8d2238",
- tag: "938b43b80cb3935e39b21dd8ba133cf8",
- in: "bc2b0baf92580ee6c5efe640f2a029a791a3c77bec459be74cbc30931508" +
- "d9f312c3a0944212831cbe4fc92e8f107f2f750c91bcc09f7624fa9a09b4" +
- "9b7712cf5d619ea9da100fc23068ae2f4e353047e3956b215884bdb12235" +
- "3f06b8ee98f36c3212493d61ae9ce151cd0453f3075b18a12d7d73da3de7" +
- "dc2d98376cfb420069ca8148c511ca6bbae57572394a3c615a6fefb30c5f" +
- "d727f964b4065ac9ee252bdd2bcae3e70162fe0e8069974e073f0a093d45" +
- "be52d7de16a8f5f65c548aa6525822ffb00dc642530fedf355f7188ef017" +
- "56384760c80afb61ad903d10119a7d615ec4fbdc79c490160bdeaf200915" +
- "e405f2a921a2380c0ab9d2ac1e4fdc8ec4b907368c004458598efac13dc7" +
- "2751e7faded538e3dc8b16590cac9b7ec294da0ad53e22cb9c05d8ef494f" +
- "a04f6ab7c843c867fbe3cf1b4eb146d65339b0b03392259f12627a8e98e8" +
- "0f4896c30b8ecd210acb2365539a872541921dcd8e1e54caf4936dfc7e1f" +
- "68f3bbce61d325b447a8cce7f0fcad28494f2e47dae46b136594b5dfca7a" +
- "bdafd6856f91496c05b21079aa55aa8c41628220a2cf0cdd755893375b7b" +
- "b13d914c9a1d1db4a18f8fa36c55e52d0342352052032fb62d32fcd51cb1" +
- "ac46f44b06e682db5d96d583cda03b966c650c03ae53542e8da1066b6884" +
- "4a7e2280c664415e413f270b1fdcfbb40b9daa6131d071ee7eb1553dc5b1" +
- "a50677971223dc316d2d326d57cbd529c88698facdca425e2d5c6b10d7ae" +
- "cae28b8890aa44ede9b9193dbe8d1d8aa1fa580ca384b57eadcbefc96dd8" +
- "bfccbe3b855a96f1fd4913035f817b75954ef1827c7718aab24d353e41cb" +
- "a73748e14e0c2750d5b6a9752125708cc7ee7a498c7fbadf4186e7f8fa93" +
- "bfdf281a49400f877621651b8ba87edda5231e80b758564e75139b61b1a9" +
- "9fb9ec694f928ab1f47c6c4287bd4182d1b2be053380616e98da06f3ef57" +
- "b570ade17c51da1d602b6ebc5a638ebde30d99bf4f91d0e01557c7dcd8f7" +
- "9e5120143c935fc699eb5616ccd3cac56b5f8a53ed9e6c47ba896bfefe71" +
- "2004ad908c12cf6d954b83bec8fb0e641cc261ff8f542b86e62d90e227f2" +
- "a5bd59c9d390c0dd857f6da2b7624787a0bb31908bae84896890b283da61" +
- "d8ec4f56eea38b22b438d6374b42243f9c1d94288874e53ab90c554cc1f1" +
- "d736acde67aff55007fd4b3becc4d0f3ddd96f10dc75255cb0327aa47076" +
- "2b3a3a656e33c87b02a682658b6cd2a75d9c0462803c9bbffa51441501a0" +
- "3a2fbb2344aa13d27ffb9e98704ea6720b6a9992e53449688cd74d0648fa" +
- "e8e776b0ea6bf048b2ec05341e5948cab0af015328b284ae7bd89a5f763c" +
- "eaf5ca3e647a9f5bff7197e4d357e4359fa5fe30709545453149be510e3b" +
- "ff86beeba5110c79c0215fbe9ac9339a8ac7d41f7488588ab14ac657aaf7" +
- "d5c03a353932bbb2b261f0e83f3526c5e8e0c2348a10ab4eed6ecdcf9014" +
- "7550abcb0a722f257e01d38bad47cdd5a64eef43ef4e741bf50da275720a" +
- "0aee47adfc5cd2534b911dc269197c3c396820b303f6941e3fd85b5ed21d" +
- "6d8136745c3eeb9f36b1f226434e334dc94be8a5606079cb7643136aacd2" +
- "da9c38b2eb7e2b898bd8632003767bf0c87d00a3c2fcee48bbbcdd949af3" +
- "3455128216709df25879b0ce894ac4f121dfca6b8c7865002b828696641d" +
- "14ffc59924fbda50866fded0afaea545c8008c564a3a0b023f519a9980ea" +
- "d541d91d1c07a739fd02286ea5660e473f80494236a68e84ea31aad71348" +
- "e45055ded69c39941e31d51df257a4d0b0d8f025dbedee093f2b91795bc1" +
- "533dc472020769a157a187abd6d8d52e1693e2ef56b2212759d0c0120e54" +
- "c425d0084fdb3925e296dd6cdd8e677043a90674904057d88ebdea5998aa" +
- "03562a790adecc4399352df43e5179cf8c584d95ef8e4b37295946b1d37f" +
- "faf4b3b7b98869184e42ea8b304fe1059f180ff83d14a0861ca7c0682c34" +
- "b48a70df8653bd8d9a26f9489e1271fa44e41b392e648d0e619ecdad2c53" +
- "952094802eeb70ade4ffe096e3049867de93a824217e31364b18204e9681" +
- "dd8e84ae2678aad155b238f59dd9bf9ce07e97183a690b2a46a8f3624843" +
- "5b2f713e7d8dcda4dea1e3c4cf9692dda082322c51f7bb1f63d92aa987ec" +
- "cf1355a043e21a7b8d60a2b97f18487f6fff4c77df92dbfdc9837540c518" +
- "9fd9585731bc6e726a34ca21154b0499522c9d1016953dd0fa2eb6a92b6d" +
- "14d6e3da5c12fabe92bd639e253983fc91041091791643",
- },
- {
- key: "46e8eb27acfdc8f4be622d8741c7bc414464c149e21da97ab4afbf3e07b98b0e",
- tag: "56b5f49be824c7a19b19faabf0787a87",
- in: "ced52b76c057872a60107194b432cf04b7be05e65209045d2952ea0284d8" +
- "3e2ed5a15cfdc58071204573c18ab03765b4d5e63a601419e039c42075b2" +
- "7ebb2827de9c6233d6632e6d3db9140bdb4a9291d53f33734c2dc8e24df9" +
- "0764dc10e0d321d20fdf659bfa2a81bc9e04fd0f83448143276647c08bfa" +
- "dcfe3bc23898eda655c9353693ed7b022f43eefa23c21db7660c5029ca64" +
- "a6085d93029ea6c43197356f56b7624d4819f5008d053357d981ffbe7f40" +
- "96d6c55d8417002d36189b04bbb2c637339d90f4910a400833a8d422d88d" +
- "c816c1636e8d9f7f926c244a28d9e0a956cec11e81d0fd81d4b2b5d4904a" +
- "d1a5f55b5ec078dcb5c2bc1112bbfd5efc8c2577fe6d9872a985ee129e5b" +
- "953e9cebf28cf23c6f9c6a5e09cb09ab586c6a50e4389cd3110777591d7f" +
- "0608a3fd95b99f6ba03984fb0e13c6bbbde3668c59f2f2b69d7caadffa94" +
- "6f67e725d56280e59e66dca025a18d4616e81abd9801835bd94485bb2025" +
- "dee81fba440005b181ee81dc1d7796cbec92e4ec1c9016c8e8073cf281ce" +
- "f749993f09a618a4671d58b476feffa454600f82955c591882715148a826" +
- "586f68bb50059914dce1c1c85e5e3951647c9964ec9316005209a58baeb5" +
- "2c6d01e6b4c275c0050a7e2bdc52133e433b050a700b556d4314e5c041d1" +
- "93ee47f47adc971aed1b63259dd5cd4f95854a71a947eae3d3d12d0d7b52" +
- "c6cd2fef2d2e892607a9681d73ac3236fad21ee30a4f857010bc95c00d5f" +
- "6f0c6b3fe50cd6452be6eec4f5f01542dc2cb5e2db1f52224f11348fe2a0" +
- "5d1e5885f1317f2d06ce2813dc4c723008e836a2ee95d0aac66855fe4c3b" +
- "1b2e02ba0700be759b1ef1c2a3123ee4ccf9200d8d4de5e0d503f04c2053" +
- "66393d1e91b648392ca28389d976aa618b4796acbfe8aa356ecdce1f7786" +
- "bf09af226bb9402317b6fa319bbb9248d8ce00b1f49f066c69d4df93266b" +
- "938342cd7fd4b07c320c2409ef72d8a57c21d0c6d6d493f7ca94d01b9852" +
- "e4fca6a9291e9060154bc38af6c86932645f53914709fc90e11db56ec471" +
- "6d600ee6452041248ea8244f79534f793bfc1f2020855d817cb4ca3c48ea" +
- "7f6441ce9af9bda61936c226d810086c04a35e8654fdc30d4b35701adccc" +
- "016d5895b2121ba4066e44d694f6371d97911786edb73dc3020ba186a01f" +
- "ee3dd6036c0e205a8d05979bad228fd12c0fd2fded6c7f1e4c11354d266e" +
- "d9c2f706269c43cd90504997d93a17b39b10dab0ff083ab3bd06540ce612" +
- "d08f46ce75a16ef330525737410a0d98fb3d484968f9c12edcaf50103fdc" +
- "c14128ea4ad6c30b56247eab28197fe617e5f88afa5cbe003c63d423647a" +
- "d3042626fafd2084a0582ff1b1efdb5baa162662048019546234e2f6b6a1" +
- "d8bb971114aae41df7795b4f3598f2af9e8921a9aadc7fab6c780aaa32a3" +
- "84865a4ccb02351dbc55ec92a3152d1e66ec9d478be5dca17b4a131b4a0d" +
- "3d4420fc6123fef80fd56ca266407d58a7880d6b7e5ce2b6bdc9a3721071" +
- "7feec573d83c83a2e3f7d4023f2f68e785cde728fdbf5054060e4c89faa6" +
- "1c9dd10524a08811d15c627b3b4ada549a3fa1d8dd77c005daaf2addeb10" +
- "0abf694da8dd692f113965cd6366a5a7b0c17e1f2a320243e2c90b01418e" +
- "22426d0401a2c8fd02cb3129a14fdfa6cbcaa1f1c2f17706e9ac374a3458" +
- "777761e986ee4c358d26f8e420d33230d198fd86704e77298dd4c40c5205" +
- "7566ac0cd92993b21937c3a3b4a8b89110a97cf38c781ad758bdc28f3565" +
- "60cf3acbedfa8e05b396d226ef619746e8e4fa84c8e00a7f0e6d652808c8" +
- "9c9b123d9bd802624cfa949eb68af85ca459b9aa85b81dbc0b630856cb9d" +
- "7e18cdc96b3c069a006dd5b716e218a5ed1f580be3e3ccf0083017607902" +
- "a7967a02d0a439e7c54b3b7ca4cc9d94a7754efba0bb5e192e8d1a6e7c79" +
- "4aa59e410869b21009d9443204213f7bceb880ccf1f61edb6a67c395a361" +
- "ff14144262b4d90c0e715dbefce92339ff704cc4065d56118624a7e429e4" +
- "cadf0b9d2e7ffc4eb31c6078474a5265beba0774209c79bf81a930b302bd" +
- "0f142534a6ae402da6d355a010d8c82dc379ea16d49b9d859a7de4db6e62" +
- "40f6976ae0f47bc583b327df7ec88f5bd68f713b5d53796e72e28c29e843" +
- "6c64cd411d335623ff4f5d167f3c7b8cba411e82f03714662425c8e1bc1e" +
- "fbf435d28df541a914a55317de0ded8c744a1c3a6e047590244b207bcdcb" +
- "f4bd1f9f81210deddd629192c58e6fd73e83812f084ef52f21c67bea98ee" +
- "17554437d9642e2e",
- },
- {
- key: "b41210e5ef845bd5a8128455c4e67b533e3e2b19dffc1fb754caa528c234d6a0",
- tag: "72c9534aec8c1d883eef899f04e1c65e",
- in: "7eeca180bb20d99635e36b9208221b2b8ef073fbf5a57f5190e19cb86c49" +
- "89b0e8150d22ec3aaf56f6ed9cb6720284d13a4b0a34cd3d7f7fc7089326" +
- "6d1893fa4185269fb806677ff490aec8f889896fca50d6c80d295875b1d5" +
- "4a779b6d49305360b31011b48537157d0f323ff4e865d46fba6bd23a06c1" +
- "46878cf9404360d325432312ff08ce495edca63a3c93c44d79c050e3f1de" +
- "4b6ca5fedbbd43dbdef9ceb26d440a59c7e0be3a8e461c4f15b6b1e1dc36" +
- "a71fc723ad593fb903e83d0804ce497fc49bfc6b6a602b9dc6e9891010b1" +
- "4ca066cb1c68044c1ad837c638076dd3708078509cba49fdc54922cdf5d7" +
- "715fb43e9b5a5942cb8950eade143577bc9dcedde58d51deddc70075e452" +
- "bbceab1e95b5d003eb96bea69687faa6d50d9c605769cb4287b5d9924dd6" +
- "8881c699abaa6f93e41dac7639cdbbbd0259099a3ed096f482a1fa322b15" +
- "ffc379812c74e09e95f1bd3706347eac421fe56895e738a47fcd3e118773" +
- "c3a7e7e264cc7ff5a53a80e436df058265dab9756fdf6913786a47e98bbc" +
- "411052d58ffec9ee948e28cbaadaae471c5d828eaf3b3c87d3bfd495477b" +
- "403da54f1418a15ace0d4d0df68f6a8f2b0457b127d5eae1f45ae055afa1" +
- "8f058d5dd7eea559de3ae9378ca53f7d6dc9a9465ea1f945295f16ee0404" +
- "7fc9dd3deda8ee32631d7af70c20edc1e12c5f8abd2e78f43dbd4cd6407f" +
- "038efab144a24ea8a090a7ba3e6499345a60106220c2959a388e1a73d070" +
- "1d854bfaaa86165a5aee934b615ac7f45da7c43a1e8f74613917ed10dcd2" +
- "27e4b070414412e77851db5bc053e5f502bb4e2b2645bca074c18643e814" +
- "4caeccb58be49ea9a552913c0616382c899635eea79a166988c206b9aaa0" +
- "977c7ced89c4c7aaeaa8fb89b38030c44530a97187fda592b088198b63a5" +
- "2dfad59a0a4c1aadf812bdf1881924e8b51b8fd4dbca8e73b2986b3ab484" +
- "171e9d0cbb08be40ae60de8818bd7f400191b42c7b3200c27643f06720a7" +
- "e0a17441f34131629388ac43955b78c31ea6602a70dd665f872e7669e865" +
- "f6f40e634e8772d747608cd3a570e1726eb1ddca64f08582b022bb026eda" +
- "6a913dc83f174ce3c18b9fc0503d3ac74e2fe45691d6dfb4af8c86d752a1" +
- "6d6664fab4de08afe8858392fcc35cb9ea82fc42c42d48c0c0556267ea0d" +
- "cc19b10f05e0318c4488ffe704b5036908f5cb938eebd3163503acaa874f" +
- "592d945448fbeb93a877a26a72306a36e181745ba300afdc30cb7986919f" +
- "3dbdc5c47ef1fa052a9e4aeeda3955f61ce2f30a0593a81dbaffebac5a49" +
- "e5a8d1308352701d1ca9e620a67a89abdf5f0f8b1a0acfde5819981d4b77" +
- "58799c0fe41030b86754837712af821c315301aa8dd50d1387b9fb92ee63" +
- "10777e08229edd54e5e86b086ac281bd321082ef46ce298a6211aaa3aa4f" +
- "6e55b5a4641220ec94cca73087760da1b1ac3e0da3f438214e691aa184b0" +
- "535950b715a64d11485940dcaa3f72e0aa521002b1443f5e7880e2a85b83" +
- "40d32db0fc4c4702e10f0fa24a35da9307850e945f608ad34d6cfdf6f2b9" +
- "ff4f6b8e9eb5a883546578e2ff3cc5787322e4384640f42dc5bd05f432d9" +
- "610dcf7c06cdf34762dd2a5e805e24aee8cebb3b4db9e4d1471da995bba9" +
- "a72cf59ea8a040671b1d8ce24a3dce4fc86d2df85c8ab5e1eb2b0567c186" +
- "4fb464f48c3ca72c7df2749542ed4d4be51b63769012ce3d06356856b2a4" +
- "24995a2429a156ad93bc79c705e7b163149ce53a42c34a19680dfe4fd0f7" +
- "fce38c30dffe9da9bc941d131f435c1398f8284a230e9d6e3992710074c3" +
- "881d03aa309a9edd0fde7a39c33f6455dfcc5ae3fa20ea0e0d6549a43536" +
- "b4cd8a2991a135b7d7a4265fb840318813091274414108f13fe191db7774" +
- "6a5f4270f6d51a29ff523954f84cb76131d4abee79161dcbd97dc1ef24cf" +
- "db1fade057dddee00a1e0de0db1afaeed1b535f7bb402afa3b297551fd14" +
- "8c8f3e05f1351d3a8ee2948daaf14e7fc448c4670c906ae076eac5a7c656" +
- "fd5f9cd937b91e26c9e5adb43c138f8d65e447b0022a524e059f879c6e27" +
- "4ff7e671f75717233aae70853d5bd7bbb41b43c47bb08d6dc2f54f9ec606" +
- "9487d1267add72403d01552a3d138abab9ca8a0d2dc32439759aa5695f70" +
- "1a17d28dfb85850fdb55fddadcdde4d220e4b05821e5736d346e7dc9c945" +
- "72743366488b1de8975184771361894b6520e3407c5c2e38473430969e35" +
- "b106024da8618665d58c9d084824a28991a33658d6ec702139e01b65b7d0" +
- "cc537a644caeee880657803d95f5f67816948d5ab362922f8ffbd531473e" +
- "b0ff8fde2afc37a4abfa28dbed0be1b3d4ed48a1d02358e8403905d33b12" +
- "3066e7a9fe2491ee9eb24fc9de7dbd322c8ddbc5ebcd0d92cd102ebac96b" +
- "90e2fd784fd6d4b699304df23b17d963080a013794322690456be525c071" +
- "b78fcd2d1148026e44ff14c4d0f942cd44d2b3263f4a93b79ec7a618b4b0" +
- "d77ae7a1f6e6c7c7e2f498b825bf1954df348bae45ae1d7c87b6787f1212" +
- "60c9a724429a4a2491ef989f65acfdc72fa717486dcf1984905218e11cc3" +
- "970a09d71061e6df751f100abfbf",
- },
- {
- key: "d9b0dc303188756312c12d08488c29f43a72e78714560fe476703c1d9d3e20c1",
- tag: "6b9782f2a09b59653aa448348a49291b",
- in: "dbde1820035997dc8a8ff3015b4e0674e7ce7bf0c2d994b7977f2d91b49b" +
- "f200995040daeb1218a0f4307b6b8211913992b070d321bdb947b4ba5017" +
- "a0885e7e5502710a75cbbcb56d49e1bdc2bc2afa5a0e83851162dec41340" +
- "bafc41c5e11fcbf4ea2ac45bc57def4742281bbf734777f83c9ae1ea3d5e" +
- "d42380230570f59c40d5dd9a2d89b75fa3c92664f12a274d965ed8de79a8" +
- "b37f3763939ad21d1703ad794f617c8b32b20cc4dd7c1b7f969a65e1bafa" +
- "f6c43f30c9eba256f10201910e2cc31a9b13a46ad29257024ef8f2ee29b2" +
- "ee63cc5b6230ab9f87cd5cb534f4b0bb08a790466e0d57b849fffa1ed21b" +
- "fb0b27804e3ff9df7bebf14e100cf91691a493e53870abfad6321f6711c5" +
- "0fbcf1f0b2c1e5231d6c0a08e710525176355f6f82bedc1f787f0d3cb41f" +
- "a11e91ebf9f4cbae46035a371232d63ef0d8bda0355af8cd0a2f7d1327d8" +
- "0ab769ea0f1da0f76ec99cc737b5ce84675fa8a9ac0c98342bb82b5848bf" +
- "656d35327ea01a1b09d84ab974c307511af68a30cd6978b529a8f58c68a5" +
- "9d476062ace8897ec0d1a90d5d167e29ebaa6f46d93d697760c8771417ce" +
- "94c0f3698985a98702833d1b68641b811840ca3d935386dbd4600fbc81c8" +
- "728c4fd0e4588be739a048f03bd4ac651ceecd7e2fb120fe7190011f957f" +
- "cbbfdc025f1ca0b356208db8cad87fcd53c5d3a30a7c2a48140ccd4cdb49" +
- "f3961cef742caedd1e848bf3cacafb0da030416bf3177877aa0bc5f9d1cc" +
- "41fafcb829d5e3ace9394028683d712552579e024084a6b855830ad9f567" +
- "ff58f05d3ec263eddd6f56adec378f167e8dabbeaf7d0a9e65c71660314d" +
- "6c8d54beeca2711113fbc32a2ff8c0daa8373278d10085d2a0660ad53f4e" +
- "1ade74a483be180180acf9e9ad3ea5bdd9162ccd69599163a451c6837d5e" +
- "a5e115bd9a560f395128ea002ee739009a44fa46078b18959933fb6e866f" +
- "eb4612a56ce93b1affcb95fccaa18d71a148582ba1412a5daa07404fcb39" +
- "c3cb4a2519cc506c1172c6c326016ae2e5410f6a438569f35a50d45cbf3c" +
- "c46188651aa22c257858f60649cee8c05c75953ce49358dfe5980445fce9" +
- "614ccd16d333ad236e29d204691ca0bf46f29da954bcaae52e41016556d2" +
- "f4cae1d37565bcbe84de1b49f344d0200478a38187da29c155cc98184d9d" +
- "33dca088d70054e0fce321f7a90c48a14963d0ace2b4e7a24b21c14a5e67" +
- "1994fe1f7d22d1135d4df9268dd18d323fde3603288735626a5449582d35" +
- "30e2c2225414e05a8c7b987c873a82e272a5d83e59b90f3d7264631d6ad0" +
- "4a0cf3b5e96596a66ed5bfbc24ab6e4870aeec0acbad2cc5affaee06de32" +
- "dca06f175bf763cf8e7fdf95941a177e934f0078be7dbaa4c9b6f5c16b4a" +
- "5607bab5d56144a6ba3c7d9a084b8d1f4b24b6f9754ed207b230d3a2cc26" +
- "259ccc725e1f8a44c4df8143e13edb5ebf073e2c9d2da5f1562df4feece2" +
- "f6480987f093f642eb7afa3aa92dce2a8b60bb925cd2d11cf6c2ae7d2153" +
- "1a9c8f068d71d0e682023932fe64e956a49347aed22b21084c4a84480491" +
- "244ac6b337b6d12d5551ad5684766c68bacca62bdcafab6603c81bdbd8e6" +
- "80d9d8b3825eaea4df023142e840f98ee251466a0422d810a54726a9f03a" +
- "7e0afeb0043e60e2ba4908f951d2e87fcbc372096f2a9f4f2a95ad5faede" +
- "3796b11ecf4401c3ee3d268bd8c46476c61e0ffc5c43c0f3c58c79e20f75" +
- "520c102aa3c260972a870fc50f8841fa0553a9e30bf37ad282fb51b34adc" +
- "7a933ca1691a8a706605ce0b906fdccbe954f8e5f2f63c42599a483c4be7" +
- "3a041ef90ad930fe60e7e6d44bab29eebde5abb111e433447825c8a46ef7" +
- "070d1f65862b30418efd93bfea9c2b601a994354a2ff1fc11c383e7bc555" +
- "9e7546b8bf8d44358b1ce8cb63978dd194260e00a88a8fd17df06373aa80" +
- "04a89172a6051bd5b8cea41bdaf3f23fc0612197f5573f3f72bce39c9f89" +
- "faf3fb48d8ca918586d4feaea7e0f2a0d7a6afca096a081af462ea5318cc" +
- "898a9cc09e8258a837559570cbd5eb901e8c0e04ee88ba31c81a76b000b8" +
- "0e544feba576b3eb5272b53e46e96a0b35b9c759caadcec61444f8ec47c3" +
- "45a1d2304e2708eeddfbfa75a98eab3493889047d690e84431d445407fdd" +
- "99560c0bdd287e0944116f8ac62ab992ed3f1e2b415aea784b03c6904795" +
- "f4326ff60bc839615f2894570dc9c27cf928ef192047528a1a19ec990978" +
- "3b0d1a13dd4baf4a19e49bf798975abe2ad167dd574b32b3d0c22aa4d9b5" +
- "2761e8f56cf2100fe5a39fceae3d865f3724d4f299d07ff899fed6baf7fc" +
- "eb7189357bf56cf94a6493e61301b43e3ed158cb9c7a0e615fd9888c2db0" +
- "7f7689762f62ef6b3ad4125e06b07a422f5040c3aa8b8f205d68356c9225" +
- "56fc4c976165fed9599daeb297498ecf744bf6c7dc5e30604c461ad99402" +
- "2eea0fb6fe33f82a97b5c272fd24162a94b761ec7e52173e7bb42e88b343" +
- "64f5fa2c141ed04a86b8d00fd9c25bf77a8dc3e63f5543331405be6bf421" +
- "6a891089b316aa4f887cb4aff0dfb4e80c2ccd65ddd9daa74b17b4411c0f" +
- "c849dc748d9b138279dcd9ebfc6e6759a53f5c28a41bb82107d71cc161fa" +
- "81291a8290",
- },
- {
- key: "fb70ae7ec12264ff9f51124da188e5b11dbf53cae2671363f6054b575b1ddcc1",
- tag: "d9ab81fab28b3be96fa3331714e78c9a",
- in: "c62edf20b1d53962b42386eb570b10378f9764421ecbd7c4802853332747" +
- "19ff4c89c06005050fa9ba6579a844060eb7ece6c43bab520e683e0f36ba" +
- "49cba259edc6ae35d41e0d7812a7d5edbe4d90cd5e0504d16f4c3f70d01f" +
- "5a0313de55934b661ce1ec317968c2c4de60f45c66cded8c10565a1ca6d2" +
- "3a84bf182df2fcb05956ed4d46b49fc0fe3bd23961d9466fde070341ce41" +
- "bc6e148449360a31634fe10e91082d82def90d9da2c250ea72c58add2058" +
- "d046b4392b78bc3af5b3936ed568733e8ad5672dabbfa3130a6a535ec73b" +
- "da8e7223535f49f96cd35d56ed4792c5cb7076720d5461d96a2692b2ada5" +
- "2be08fb7bad15d15a0108143790024f0f15f5adc275e783aa56b70844061" +
- "e30952a040e4cb9650f2a010417812790105d8f58bd25d99b0db3cb16229" +
- "3f6322e86cd5b0bb1505a7b998fb0f81d1e1915faca3c2c8ddea39115507" +
- "80339430a7955521839deff5b301f3fad54edd5ebd2ac4ec9b1795cb4dc0" +
- "e2eb62ebca8e886c3f1e507d10a0228c3027b472a7104b815f5ec8dae55e" +
- "0783ff7ae9a3e6b99e381ad788206b135520cb870ba0cdbe876feea843b8" +
- "5a82adc95a6d71c555f798da92b82daf0abfcdbc82ec30b1f12d78490b06" +
- "7315735017a94ac150b44dfaace151896f873923310ffcd41e91bac04de6" +
- "d70ea71565948c907ab21c4a23703fbbd2a8de6d3095f3d8f901538968e3" +
- "60e7bfddb9d22036b1c23f4f5f1b2ee22623426a2d5de68c1e1a38e38e08" +
- "e2b5670aac1edff69e9c73c2ca56cb69c709009ef1d541aff1fdb2b40c92" +
- "9b87f162f394b76cdbba1f5605993e4dd9c312321d59b0aa5c6e33be1b10" +
- "bfd00b92d4c02db064d0e4a98f2913c89051b0f0ead163deb5087b6466d9" +
- "84f57553b0fa53850eaa142e072fd91802eb9f0d2eb7318dd620555e6ce1" +
- "86706b866d41cf6ba81f100342faa14d801dc6f3d522db38fab17a879fcb" +
- "b6acfe922163505bd23a6842f6ef6397ae5fb6e6016421998bd43b0142b0" +
- "3ca3b16d6ccb7a47891c75c687d791a930b26aaa2e3412e7aa16e2cf1501" +
- "7bf6df6d2e1c289af0d7ce03954a60c1dfcee5e4b3da51eb43ddd14faf59" +
- "082005d0c8b104561f66c002ff426be60be769282fc5685cfd1968df1941" +
- "73667e48e9ad681d35757f1199f1d93377bbad093c8cc3efa2bcb6ecb703" +
- "694422772d15aaa58cab9e9ab277ed510f684114cc4a44ccadb3eb1c9a76" +
- "d8619a9b7743106df6fb6f927ac49b22ae5bb9a9a4d231e340a2cd0e3282" +
- "53f6d75df694826f60e4b3e758398793eaf73ef5d4b56cd1471e16400f40" +
- "4a947e9737f4f874fe09a29ad799f4525156e3abbf0585c3c3c0a3744c86" +
- "5d56db3d2ecba6bcbb1adcc8bf5f3b2a2d46d3eba18cda55201598a8112f" +
- "d8f14e205f0e615f081b8ff6c5aa6669da776bfc7c34d5af4d0b26d0d819" +
- "f6aacc53cf3c6653138b9a962acee9d6ea01d280c35bb1f05d1509238ccf" +
- "004c5013167f804d1780d9f4ef9d45742fccac346b0472bde24ff5db9ae0" +
- "16455a3c02256358fcd8e6a9aae94f8a37a1a3da58a889bbe3d295e16544" +
- "2e580f59bdd31c92ffcab40c49c1cdbb4db1dd4882b66edc10fcb1704203" +
- "c518c1d8d4c268588ce13fc38e0210aeb47d11d2603d4b3de5c6ff5e969b" +
- "9d5904abb282b699bd04a6e9f1cb323679e30400d725aab128a032745dc0" +
- "be05a46b02b34b93bff02523cd8498c021fc35a488f164a70ef1ceb873d9" +
- "14a681d3a3a34cc76bfd5a547e2630d7741a284511bae5897d9f7a197fc2" +
- "456af5c6cd7e1a93d3388c7a990b5feacd7749cf39fdecdc20adfdd540c6" +
- "9d330195db7cc0d4555ea5f5356a3647e2265399f153c34ed1e217c5dafd" +
- "c2c5dd3d566c332c7ddacb0d76ecd3a0ad505a4165443aa81b0f43cabfb4" +
- "62942fe74a77c22b8f68a8b1a6d712d1e9b86e6a750005a3796ba1545396" +
- "13170906d228dabf572ab969c762f8b296054f23d5d4a37bff64bf9cc46f" +
- "43b491b41101256018376d487fe8097f1653a7a9e99e1ef2492600598fb0" +
- "bbb7df8270be8b9106126d6f491f8b342a96ab95df6133e883d3db4c6a99" +
- "402aeb58d371263a32dcf76d33c8904395b9cf0016fdfc15608eb43e20b0" +
- "99cbe7455f7a76f69bba058ef96f83ae752587485657f89c7f26fde7fbeb" +
- "a82ede581ee92821dc13b8202930aa58bd4f1c86f68926baca0d06fee642" +
- "ea8c652d226af91a9638a0244f1a03c7ce56969b87cd5c1f86110d192e0b" +
- "98dd979d74acca6c1956b1127d9a1f456053d17974081ed8ced0faa4293a" +
- "319e5b25ba285c1151214f52c283e39c35af51c4572c8e395b7856697bfe" +
- "dfc4145ab4ed0bdbe43ba509c06a196ae6bf30d7582550cb546c63b51833" +
- "cb0dfff7196d83f6a1c6d6d712cce2ec1989fd9ff5a0a22ac5022b49d566" +
- "58f196703e4809e7624fe7cfa6c13b378f5aac7e66e657ed7eaa942d1a00" +
- "544a947199f24d736b8976ec2cfb563433c49ba131bd08b63636854219d4" +
- "c45100c98e3092773ef492dd9210bfd8f54cfe2cddafcf5c05468d90e620" +
- "0c2ef99d17fa6992cc45eff3072b7cfd51cabb07ea3019582c245b3ff758" +
- "0302e88edc2c13fc43646ba34de37338568baa66ecff3accfebad88d143a" +
- "fd1c3b09ae39c501e3f116af33b0b720d6c2baf5acd7f31220788b2f9017" +
- "3ed7a51f400054e174d3b692273fcab263eb87bc38b1f486e707d399fe8d" +
- "5a3f0a7ed4f5e443d477d1ab30bc0b312b7d85754cb886e9",
- },
- {
- key: "f7e7affceb80a0127d9ce2f27693f447be80efc695d2e3ee9ca37c3f1b4120f4",
- tag: "41c32ced08a16bb35ac8c23868f58ac9",
- in: "5a3607fb98eaea52e4d642e98aa35719bfce5b7d7902950995f4a87c3dc6" +
- "ad6238aadc71b7884318c2b93cd24139eed13d68773f901307a90189e272" +
- "6471e4bf9e786b2e4cf144764f33c3ac3e66521f845f6f0688f09eaa227f" +
- "e71033b0f74295f6ddb91fe741323f2b54f420cb9b774d4291b06219f1fb" +
- "4410b55900425c5e6fcabec76a5c2424d637a1641db6f0f6cad564a36a91" +
- "0f49894bfd598e91f38ceea65e8253c1284f210cf7b50a96e664e562f3cc" +
- "01c4fc490fa6d4679fd63fbb3ed8995a8a05166b573e92d22ef4370c6aac" +
- "74ae94c94177e5f71143c6f340efceefda679ae76f6ed7f26eaa4848a8de" +
- "8c40894316efbb06400f9695b18ba279e8947c032a84a40ca647d9ace457" +
- "6dd0082494d6bd7be4e7928e749c78110af8774a5d43e9c9479964e2fddc" +
- "ee51146460eac734311225d08c60706e40f298a7cb97f369ef599be097ac" +
- "3bf1c275497bbd68968a235fdf8a61bc7cfeef0fe451bb04e662ca39f34e" +
- "a8e3acdd0befe9762f9eeb275c0cdd43c80fc91131d1e0e790020975ab65" +
- "afbea81f303ebd86760821efb4cad7cc01fd6d6fd194ac5ffe7703d890d0" +
- "169e21b444cdbaf691fc741a5d99bd47357c37785755fa72582ca4754a03" +
- "b4def86ded39aa6d9eb3f38801077e6d17e3cee3fb57ae83f30c79c3cf29" +
- "0e2739c6b7323612cec3a561ebeadb4faa642f150323aaa9d270658c907c" +
- "4c1610a5e1834730c08be3379cf1abc50c30e2bf01ce903927c27d85e135" +
- "3db9e216dda8860c45925e2bb791abe5c8281ee6d16607bdca87f60662dc" +
- "bd6e20224e7f009a86db66fadd8e37e0a59559328385090c6953cd20bb61" +
- "f28a734fb056714f5159977f18e5c5f11de75f7a00ba807e47a29e4da32d" +
- "5c67ec76ce4d7b669b5e6ee17e1df7c673dd8a7c87fce665cda8adb9547d" +
- "1dccbdbe7be44846b4b121b0bfa65e4ed530789510d79bc4477e50178060" +
- "f2668ac8956f39ef422ecb0e4cf90b8ce508552eedeeefa6c7d1bccc077e" +
- "8088bd7e0e6aaf0bda9f11c412c270ee2ad6912f9808f9344a4bb137bdac" +
- "b5b9372b00b0de026a8f5d1fb13972e1290b5005689f7636c43aee2fd443" +
- "93d390371ae573f0e064b2d7df552b9adf04bf173d71c621795b9fb503dc" +
- "5e918536c6ad25ce4a76f70e6b752b6d44be321187269a19bcf33ec899ca" +
- "40e88b4eb23217095a85057bf95d8a54812cae4a7d32e0c2966a21376110" +
- "74c6c8c3dd45a553c43c675d23308709f91be0b235d0222aa5e1e1ce08f9" +
- "c6b45ceb5b47bcd7d7b2d4380bcdbd6eced452d93e6d8cbe18123277889c" +
- "7f86b15fb991364a501fbf5d8244f2e3332ea0ab49e833c6f765017a4006" +
- "cc7cd1a0365945a8d8873cb21832b210c83e451c01ac949de2fb0f7a420e" +
- "405bf64eb251c6f022181595d68174b91e503187d3b3f49b60c23e44ea40" +
- "ca20311305b413047bb22e89672758b74d6bd1a06decf09e9556421087a4" +
- "0c1d2c44c5fb13d4d9625581ac4ccef1a1b5eeb5689aac5c0291aebda276" +
- "50daf9d4396a64d02c6d58bcbd609d9a0017880ae0cbaf02ad0f1fc8d1b3" +
- "ec987ffe13102d77352690c9b761bf13ea0b3a8ebad4a0823817fcaab4d0" +
- "9b0bf03486620761dc77a6ba007ba07153b17425c4026597473e78863cbf" +
- "430c0e5e9b04a83ad11506b61b8d9be3aeb06b5114e0d53d4724863eba12" +
- "4f3b974bdb0d02743520409910621cd730c97ca984fe2921c38055f83ee8" +
- "c4611db92e52d8ea51d89203e89df7586c574df15f3a96ed5a10bf04cb27" +
- "f9656b5b11cf35fd21360b029ab26e9a741c6b3e6357aa1a41de2cac6e85" +
- "f9a49e3441e60a60e74f434e1b8cd4454b11962e5507ebf904e9d6c52a7d" +
- "9722300517c434758fbd6191f4550108b143eb16c0b60094fdc29327492c" +
- "18a3f36737e506fda2ae48cd48691533f525acfffb619d356bf8347a8bbb" +
- "4babdc2ac866e497f192e65a694d620687cfb4f631fbd6ae5d20ac2e3a12" +
- "4d85f9391a240b616d829ac2adceedf8f3451ee77e4835639b13c622ef8c" +
- "48a181fc7598eacb419fa438d4046aa971942c86b36eb8e16eab67105783" +
- "d27fc56f5b66f35451b2a407d4648a87ae70807e45bccf14983b3abcb198" +
- "d661d562dfcb00ffc569ca967171746e4e36f839946bc7d2ea9a0eda85b5" +
- "a5594f6a9c1b179f7230eaa7797a6aaf8628d67fd538050cf47aa654778c" +
- "11dbdc149458c1ec2233c7ca5cb172356424eb79479b6a3eed1deb9f3278" +
- "5282a1034ba165032b0d30733912e7cd775cdb7e0f2616b05d521dc407a2" +
- "ae7dfcf46fbae30547b56f14dbb0ead11b3666666c45d345cd5dbfa200ae" +
- "24d5d0b747cdc29dfe7d9029a3e8c94d205c0b78b56d5e18613b3169bd44" +
- "1b3c31513528fe102f9bac588c400f29c515d59bbcb0725a62c2e5bfb32b" +
- "5cf291d737e67f923080f52d8a79f2324e45a3bd051bd51bac2816c501af" +
- "873b27f253ef9b92ba4d7a422e2fb26a35c1e99eca605acc10d2a60369d0" +
- "1f52bca5850299a522b3aa126f470675fa2ec84793a31e9ac0d11beab08e" +
- "2c66d989a1e1b89db8d11439ad0d0e79617eafe0160e88384f936c15eb15" +
- "ece4ff00e1ba80b0f9fb7a7d6138bdf0bf48d5d2ad494deae0ccf448c4bd" +
- "60f0788d3f2b76de8ad1456f7572bd0ffd27bc2836d704d95e9c0df34571" +
- "9dab267dd805577fafda03b834dd225ad9714d2bd182b4103faa5975180f" +
- "90d5d6cac1825a19b9d4c87cc825512ae9dbeb33d2759c990905050f960c" +
- "db3eb364c15b593524c882902b2a1d7fe40ea3f54fb0202fd8821463c7e3" +
- "4b02a1209ba0048a9805f0468a13e03d18009318ecd92042959be263a51a" +
- "407f1e660632c4247419659a4e073a8e9cd4a226763a7daea464d5427270" +
- "7efd053cb4efc0504602c4f63e7d247b55db2ce1c07138f585d16cec97a3" +
- "0731d5aec2166cb4de41695feb76280cbae1af8a2e67c2d5a3ac5487ffe8" +
- "640f308ace6137e83576b79d586b663122221c20aba7a6bf60f73958f436" +
- "59f087f850ba6e2d7fd862249c5fa6b20e3e43d4f2aa10d4c9cebfcbdf02" +
- "6b8d103e4f89b93dd8af172f421001c8b162bd6d0b847a58ac108b6d6cc4" +
- "9c7a9ba069deee",
- },
- {
- key: "e3d21f9674f72ae65661aebe726a8a6496dd3cc4b3319f797e75ccbc98125caa",
- tag: "3c95668130de728d24f7bca0c91588bc",
- in: "baaea2b4b4cbe9dbc4fa193c376271f40a9e216836dc35ac8012476e9abd" +
- "43dac6b9ce67dc6815904e6c84a5730cea0f9b4c6900a04ae2f7344fd846" +
- "58a99513ffb268c6899dfe98d605c11e7dc77de77b0d30986f3051754503" +
- "7c26be7b719aa9ca1140cfdf4c586b7fe726a8bc403249396a11cfee0a6a" +
- "f6c5e72259785cfd13c2897384fe527100170001ea19106aed38f7d5d9a7" +
- "ad43f0b41451e19989192a46b4f9734a774b6304cb74feb7d83822044a24" +
- "2e51d55c0b8318e0439493bd1a57cc13f6079166cabc46877d003dcd39b2" +
- "c0b90f6b32fc77acf04a6c125e11b35d91e2b18401cd53df4aff804e3c67" +
- "a8bb3894b27c6e9b0070b53a85aafab0c0a253f9cfd4d3cd3be52428385b" +
- "24a3f9f71660ca2c38474d14a0309e2f400e2c21af6e379099283ff241d7" +
- "51da5a96a8dcbfdc43b913b29cc8cf8020eebb4a67f5bed31f2e383f8656" +
- "8c815ff172382b425e95902e80f5fc219eccb51b656d37b56660f749e5b1" +
- "4976a23648680a472d02ba71476e0afb29a0e084984f4eac3befbf8dd802" +
- "2b7dca4dadd18bbe58e49c49ce48a06a71557a9a620c51e2623f818e4d62" +
- "c2564c7ba04595cc109685869b183faeff2ac7a65049fc57cb10fb01951e" +
- "a525332782d691f9759ec2ecd68bebb9c7aece5d522a08ce7830be520db4" +
- "c9d60a2e490eaa0c91e37b256a97f84b39fe3c77953748c3b86fd84e9547" +
- "a298c049cb28b8c85d59548b8dce635d59487c9de615802d16a8adc4c0e7" +
- "80f35b9f10588a431b39b499dca929ab9d225f26e5721820627fe62427fe" +
- "06d5773a50878b6effe840dc55bd3ea0c35168f6b6a972d57e8f88c5993d" +
- "1ae33e0b7e9459c123753b518c184de7aaf429df078c9a18a29af77c727b" +
- "796f5c1a501fa8105ee873c4e78c907142eb19690638a182fddb413adb06" +
- "d66db19c7f6f46dac582bd72a6347b4427a576eb769d233febaf7be8f768" +
- "337273c12253924f15653f9f3602b783703a81454a1dd7a8772a9ab1eeb8" +
- "51be33e0c6c0708f3cc2012cabe8e2f0c38e35372abe27bc148fc4e1054d" +
- "9d151f80aec0232a3a92dd77928a3678ebd7d09ba7b4e1d83227257292c0" +
- "b8bc4a76de36bff6c9deb383029afaf4f37d5b935dc080a18665545e4acc" +
- "195da0b9545d8902408886204b64f8548b32d012e0cdc520c17d9fb3be97" +
- "800c2e2b945cb09a75a0a49e5d4d81c4194d91e839333b2b9b9e34d588e4" +
- "e20cc1e911ca0a1429fa70ff063f0090fd842f89dfc5cc44affcce4e1e1b" +
- "8b11c612f66b074c03ac2a055fd8f51ac9ed4f2e624589ff5730721d077a" +
- "fb4c19e43abf8cf3ffa698362be8be51e92c2c91a4a56be64d9ac6d3fbaf" +
- "5536a24c7fd0adaf74ca84c508e5e8c8bf7d4254e0c44158bd26acdf3f64" +
- "e78438b3aaff89ac9986cef1e3a88d5bf2016340367a1cacd01ec167ec6d" +
- "185d93a2a220d718b43ce1d429d2cb598605660b030e51e8d75fdbdd5b8f" +
- "8677675e196a40a88285b18b24c5d2d594bab3d457e6f9e503e38cd470a6" +
- "9ff8037c9a0a0f110a434335d954fa856a3721e0edcfb14287c3dd9639ba" +
- "4db32b7da0670dd0a872e468e3819741d0d4ecf0a4f7a011bbae1493c01e" +
- "642757491189f8664be3ec6437c4f3c76abfb0276e44a4d28871d3487c2c" +
- "ce2f230452cb06184bb8620919659a7ba0a3d5c12ec25678b03403715ee4" +
- "acb6a53d281036d8f3a085143cf5ecc3a0c6c92129caa7ac1f645c7bb95e" +
- "4f63da38dc319e2ccff4a9006f9b9b1a38c4c39f6dc686bb82d43fb9fce4" +
- "0c767d3ff22f52c5f9900130c65bb6a9cc7408a777d49b70946665f4a733" +
- "5099376b276a43dc9a6382bb2d40425f6481b1846148434c672b84dd7a20" +
- "33deb5140d43ba39e04ffe83659b6deb48629e1abf51e68748deffb756a3" +
- "ed9e0807506b248a024cd509f539f4161366547c62c72933584e851599b6" +
- "82ec16f1d79e9c6a01cff6f51ba7f46b67cdca09f3ab8496322b990a6116" +
- "8d7574854a1cb1cb8f30a303dbd13a095df56dbb940dd16ce79879cd2d73" +
- "80a419842fa1b34da668286de4c1ff5917b7aaa64713c349dc8f855d04ae" +
- "de9a3a4d0739dfc36510b1e7bb1695418164285c44631b4b1a7c5798ecb2" +
- "d976c1a3679a827bf0e8c662567e402bcc1354222036ad5959a6f0b8508c" +
- "6a8c7d4a63e7dde154d778fc80a011592771d55801c7e1297b00b77f80d6" +
- "314ebd1f5b3057398d1943599897cfabb65e7568d8fbdfcbecfd4b8a83ca" +
- "0a7bed08ab9a656424831e0d7718c15727af7c83b2ef5eb5684aa044eca2" +
- "ba896811246766248b20a325094a4b4159f9cde1ee349be6dc3c9a190453" +
- "0349212a9537f65ae333c288753cd2bef6c5beb2f4164168d965a2c0fb9c" +
- "c8c73d9e776e23d53ddcfb83bb7dfe2a1b8c781280f449d6f310faf8b53e" +
- "89e6a611d6d3f42f2aaed5259730d149b3e7dabdc9f865bc1555374738c8" +
- "456abe112e9628fb31efc2ecdc972da05987aafce728ccaed246cfcdf518" +
- "3fe5dae528bbfb99d33194167e0f84d462d3d0da83e92227cf57922c7956" +
- "4fe44648d87c69ad708e797972c44c4a5183fd5d1150a1182e3d39c3cd16" +
- "3920f1d7ed83992bc4116d9351ae1c6c4827d1374242e374310409f32d5f" +
- "0f38c78b6489c568b791c70394d29ea2516dcb10e51bdad862ce3339d5e6" +
- "14fe14f150961809c36e0a2c8eb872e9f7a1c0956fbc9194cb63ff9993e5" +
- "d0dcf62c0f49e81dbe99f3656c4dea57b766ae9a11254f9970618f1b33c8" +
- "f339f440de240170f7a21f03ff2da42102b323ce2b9b7d0de5aae324d1ba" +
- "c87b1e4c5279a566bf659778f8b03882aded57377a0f1b063af2897060e4" +
- "23be7cefd4aa9a28479c16773944d254fc21d3e1acdf508b7972372b5991" +
- "3b8b088e93471a7d54c6ae4c52ba465ef07f19f269677fc2f64d3fb3d7f1" +
- "9069d6c7001d4b002ed6683c59bd5651a450503b68a4a00820b8c17e3263" +
- "18f32c21dfbcb2a02a104edaeff67ec09533aaf3d1a7fb41aa5d506ccdbb" +
- "e6e35fa0a263c0aad3acc91182addf8c5bdfbd0626702694b8d652a63c65" +
- "8d6b2b7c75d015630de508195e1fca9573b61bc549ca017c4bd888194d44" +
- "3e031f36170215a301f922736a819f3ffda69117170d1933300366c5f2ae" +
- "1052446ef7c3b82c5868be158a881597132f51c91c80c24ebf621393dc45" +
- "05fe057364a76ae67494a8a5f67acb551cfe89f447df272ed9c1509fc330" +
- "2c3e16541452d4d68438f26858724012ad3b72c094b9f166c6bedb8336a3" +
- "41e032988f39cf53535789b320b5424d07b6bf5f8792e3aceb0e868765b8" +
- "611d7905089949e0c273e2410c72a146cd63981f420405bd883e5390e985" +
- "8214a8db714e8400a21d0636d7e5d9671a3582ab9ff032170b8dd6b9d5a2" +
- "144d065228fa54aea9a22654df67f3f62c5fc59d68914d8b219829b536cd" +
- "2ae937ecccdb6031d94cb3",
- },
- {
- key: "84373472e362a356bd5c9b50f55c588d067b939009944f02564f136c62dac36b",
- tag: "12dd5297cfcec53deae1dd5f9325d894",
- in: "860d9b2954c3daf18fd67eb8bd9e6e3de2e4988ad9b04b1987219204dee2" +
- "388db1c59a935de27bce29e7cd3ebdf038785efb35eabd4c3785a62b1d9c" +
- "3ffa25e2273cfe5eb10b4ec6152cd8f21dea415421b452efc7cc4ea6bf1a" +
- "b85fa6614e7f6d650125424865386ff8ab53247a63ff023b2d0753a9e5bd" +
- "458d6ab0156fd3cf2d5002f902f927a847e8c4a8426b0a5191f5e237d590" +
- "2659ce9be9024750d1d618a6b8dd57efb6c2bbac2930858f1132639391aa" +
- "9e8a620a2a7d64bb7e943c77753401b5b619d95ef857df25a52b4eb97372" +
- "a05416706b2644e2687bf1d42c0cf06e5eef8a1fc7e178440bfebb85c44a" +
- "4837f69e43a1789728a999c5e04291576e757510f22bca11583a4e93688b" +
- "442f2b2dab8d5ea9441ff09b8287862ca538ad979297cc75510a3d9ef36a" +
- "662b4b7c373f184202befa5bf3f315642e6210763d033b7e2c59731cb356" +
- "045e9470bf2f83cd62f11b3e904b0c0b1be99bcb805150ba7ef12b8df3ca" +
- "bfc5055640687d710ab88e0fa8034b26112ebfd044a4b290b1c6f6d18c31" +
- "ba9880b1cf2d81b5d02f00d6d351da5dbf47b6a5cb7b53eaf6de52c8a68d" +
- "053602ccffa37ccb44a7683ab4f8a58c4bbc9e140e4e6f3cc10a5c07ebd6" +
- "070818db983f9f415168606011efab6b8d7b4e61e8eadd8bfd8d028b89bf" +
- "b0a16996252d7b4ee4f9ab50fc9d6e482ecf99beeabc38d70efbb9a0d4b7" +
- "9a1c5d2835adf8e25111352eabd24d562644efc97637f695e4792f2049c6" +
- "00f4d889ceb951cfe289adf159865d013046985d7fe2598014bf2dbbc528" +
- "b4166fc2180e724ded8e7ea1c8d66338ec50d955d5594a0a7b4655338b70" +
- "e8978485a722df814fdc6fd2436dbc060121fcb575672b2a5e454c1209bc" +
- "2bb21a99d39dcb3c697306dbc2104d60fd8051c43ea2fce268987d0ec249" +
- "a5c02f91d3b0dfee181b3cf8ef1ba9665daf7ea1f1d3b216e378943b78b6" +
- "bb41e5dba095748bc776f8df6383033a1f5504955da3f42153b1c7ea83e2" +
- "f90b990ea0c5bd3906b5c4060b19f447ec7762916b8766e5a23bc4d39cdf" +
- "8e27752df8129b60ccee1731e47383b589d4fcad865eed4041a186df206e" +
- "9fb69ab6ea092e36f186a6fea8d77bd7f3ab0fa0e29404d617317c75c832" +
- "854427848237cfc18486c95f7213b9d53f324da036e8d298133b5003984a" +
- "b9d71836f9f1b059db90005a9067c261bd85aaeed4d623df2220eb52b73d" +
- "d683abcdee5cebd411996f853752f638bd28df6d78bec2ed3e00d7beea06" +
- "2b81c19682ffb2f6abe3a3623a2e0570650c1384f1818d76fbefe3a7ef3f" +
- "46138160ef897f9934e00e066e215230e719c23905dc60d7fa4d666fa52f" +
- "e7737db15126d3262c3a4c385cdb23ff3b56c131e43b241f4a6062a1a248" +
- "de9f13eb82c11f7b6a22c28904a1eb6513cdb11179067b13c7b5f83a58c1" +
- "4f2753f19fdb356f124f52923249d6e4a2c8dadc8bb0fc91e360155a14c5" +
- "c194334b9f0a566d51fad98592b59c1cc4b40eeddb34e64f337f83874884" +
- "0583f853398c343dabc29b9444be1e316309fb8d81304d654b3d4bc4cff3" +
- "55fc31278fe22e649324ef10acd247c0b72397edf96a1c16bbbef0640296" +
- "4d219575fd23c36efc1fb8f8a34b510ba9bdfb3b478e236777ef7c6c47f5" +
- "5a2bd0383d8eed3759456ffcffb15e61985b08c022658a5ffc875821bdf8" +
- "83f69f096dcc72a96888c3af76db57a54be701759670bf05cc9015f5bf1a" +
- "745cf755a25b1403a870875701427f820c4b29eccc260f30113629ba03e2" +
- "785014bdcbf34d0c67aa6aca20d2dece811788686d5a45820d2980bf7d69" +
- "d5c820a09bad7bd95166f63dcfbe8652565c285e60e2704955d69b3037d8" +
- "7f5e6567d95b8891276d5cf7c59047d10a02ae4a28794405e2524ec2d595" +
- "1b36ad1b9d5265fa098a033b88aa66cd9eaf01eea49c7dc4cc51c486f624" +
- "507a2be23f152f43709b2cfecee44945ca506950e90e70164b77e12e1c13" +
- "0b4d1021c2afa20038f190096276cd22e89b6e7dd10fd58fa033c9d42536" +
- "98de3f4908203be8dbf259112f840c76726d982b4a837cae7139e27182b6" +
- "1b4dfbcc50e42d5ab8532edfbd30f668879824e9ebc34b63ff1526cda81a" +
- "e38352a774d79f73219500e57f0159a32326195d8895d965071834876a45" +
- "c1a3c0bc4b1638535f7d40011cd5b23343fc27fa318c1aa3f9d8c43351c6" +
- "6148dc2175e0e620813266da3000954dfa22048f305244629d512e852376" +
- "6248a897a3ec3e2983aaa8a0f025f18feea57a5153a59b02604ebfcc7a9f" +
- "b03e62443df88ead9dee955e23bcf6528c278a353f254c9484a67a7b263d" +
- "a301923a4efb6866aeaaafd428e6da48781365bc49e90cd16b2388220d08" +
- "bb9f79d14012b5a8299a651917b6a829488753b6ca449a14e8dd8c5fd5ef" +
- "657d627b8e7773475b802655dc033694f24376e3b01e519d1aa8365d0e55" +
- "92d0a4adbf555639b6d75d7ee59a7d12c6c11317b7927f11bbe75ed90508" +
- "b0698420e231206704d22dd1f1740edbdcaf19a47d66ace4eecbcefb77b0" +
- "85cfcfaced4d2d6048ce76434eb79990f0898adb4af2c377b581ebab3f3a" +
- "150f40dcae002d4caa60050591c0de4ba83bfd59a08670beaa4641aa9829" +
- "bdbb720d6eb8b2f3e864a98676a67271a82cffdca2b3590a0b5f97efa5d4" +
- "ba062b4798707159782bedc75e5363d5f5d55ec2bef70db22955adf401fa" +
- "c3b7af937816eb25d54d9f2a92e5a2a04bd8b8d7568204fd289f5ed2e033" +
- "a76209d288e11e8a4dbb06b9029e90cb186446746853f02d738e06bba538" +
- "894e03e2658ab3d7f9ac861d2cffdf12396004d1cd15f18812d3803ab9e0" +
- "6f41c9b374d6a0678bb82ce06d9e3b9dbc8d2e90b8f64d0d040f3fa8a3fa" +
- "8be71d2b3183cceae1bcbfa2353689d842f7d7052e5699dcc70ab2b58761" +
- "7041e5aa1e2f41911d525505f061d3ca45152f5a7a1fab50c674e4597a52" +
- "b46aafb4ba57413879cad1308321843abb7c39696fc2f2e225878bb1191e" +
- "e151cc76f1a1b8d491c1672fecbf710db82dcd32554361967fc839c8e5d4" +
- "e488856e1b9382eb3fc3bdc3b6886a3cd79761b02bafa080a745ef6afa26" +
- "822f1d10d5e8eefb842837d82c9986e78fc3390caa142b7643de8f613e5a" +
- "890a57f5883409549537f8139534f4ca1b60f33e42be25433f1d82add530" +
- "6a4cfce258c0d4f1f3c9148ffb5c4b626d51f78ac20bff0393b7fdb4b9cd" +
- "70fee7f69892c8a9ee089c6c5c7bee0a1b825e5b9517f2c82d6c149735fe" +
- "45a8839812c2deb2a355b6230697053092eca450b7b0d3242b2689efe364" +
- "09e820d91fa4932034d96495d9dd3baa4b385da815a7cb69438ff648b326" +
- "e7efe8d688e88570ba59df7c439faf72c95317a10c984c5ec0043407e9fc" +
- "9b46487810eac19d2bb40e0a654935f76e7d8861480c5f48419eb33084d4" +
- "0e1070e5ad542c94f58b49e67dd05b6637a2c67d41451b7e00ba30eff221" +
- "755d6d427ec634a2b95980d274a89579feccf1c7df3787a9435e588f2496" +
- "06a93b7ac41c8aaa84b91c95cad9463d4881de7353d95b13bbde4c9da90b" +
- "f1fe96257309a416407c64368b5564f022c4a493f2a39df1696f45801e42" +
- "a5",
- },
- {
- key: "2d0035a30d19b9cbc7a27561f3ab474c01115c4499b4adec660ea06ebaa1a14c",
- tag: "a2c77b55cb0c076d8ea83cfe0e64f293",
- in: "4e667580ba4f38f64e5cb5566bffb486dcae10cd17acb3754251e837767f" +
- "16429bba2b832f29ba538f97f3556548d163be25e69f88fff0743150623b" +
- "e0a1d82af9384ca335927a0e9cacc3dadbdf1e24fa5c81f2602d109e1400" +
- "33929e409b9a0fa4f2653944edcb8b3ef963ba7f8806196c73bff0ded670" +
- "c6def5d240c5f3daa121f8d5bec9b2a0b0f1d62d54b013dc742d6bd46325" +
- "460f692b76d4991f0796820ddebf150c7d33829795784dd2759b334d2706" +
- "70a7264941be5d99d460d078a9eedc3660cb3176ad302f9365f0bd698e46" +
- "9f3e63511abc81109995dba17be1abe8bcd28407c7fc8d02c14794bb033e" +
- "178a94f6dc73719d5bc235f980a16eccb4121ca83b13c4e165931ae4f192" +
- "4292f8cfdf1c3ed40feb71e13d919b48fa296dddb4d23114a3d86ec10f16" +
- "f314de4cef813ed24b49f4c7bc44cb8424df1f70e8d77366161c7cdd709e" +
- "97610aca3a24fb2202ffe15eaaa25d711cb5179212a2c6497a13e5d7c365" +
- "7bc502b3d2ebde2e57b714dd9bc21e73795f3d35d620613918c4c9aa0e89" +
- "031481c97a5a4c15ec6abe42d40498c33d71c823bf1d5bb5fee457e2fff0" +
- "bf777c80c6e3336ab3ce793440e74b336a8f7034f6ea2e4ff5ea4ea7c350" +
- "65cf2ccd2da1d6df29bde10f4cc0202b5e4cf7ed097da49b970a6db41e5e" +
- "98f3845b42f46663b1d1ff01da71389a8737ba8f51eac1ef357ba5ac9a80" +
- "dd2c7f9476111dcd651fc33f4c86dc8658656f3f02a8878bc38ff0d0a1af" +
- "2e31fb92eaef08c50195490818661feaf90e8b6f5daa1ebedb2cdbc8d5dc" +
- "16db3505f9611ac46bc37931e02c1fd6aad6e4b7e187d5e6f990fddc9563" +
- "2b33f55bf68b0db3890b11113ecc839a4fa4de25160e574289aabe4d8fb7" +
- "9cecf9d2fa75ac8d0195beefbdfe0815f8d7d9751c1280a29b547149ec7c" +
- "2295f5afa53cfb516158086bf203357eec2a5db71143f996c81555a47f92" +
- "209719a71570a5553f1ff9b4b41827dd74657b463f36623565f0c9f4d2ee" +
- "8735d6af56ceb3b3d0ec516b22f0ddafbc24647481f61ab169e2616c91c0" +
- "e1f6a35436598ed801670e1dba76226cbd0544959ebe70f836c8a7df575c" +
- "b907d780ed5aa0d6e4e8e0d2f457efe89a777374aa49d4961db96dbb787f" +
- "021d99231001360d532a70ee1fb94bd6f26524dd4b7556c6d40e08723d7f" +
- "9905aca66c4743f2bf8b34493bdabcfca617809a867bfe0a4f94c756a6a3" +
- "dcd04ffc0a3ac671a0afefe0d5d447efcec48c6368998760db6a572676d4" +
- "29b6d3d6e0c815650447748c4b27541c5447acfb8f7261b6378f3fc0fdd7" +
- "375eb9d458648c7fe9cd96344f11aca912cc5098e9ee39e0b6794cc1dc2d" +
- "f1b10f927102705efa20e667b63a91f935c17764650b287f5289d5790766" +
- "555f31985c5aad94c652ba41fa9c0195d15405f1fcce9e23054a42c8a252" +
- "da83bf6268782ba44edec5d8f94a20b1830cd1c5894cc6b9b52ad0b12a5e" +
- "cf3195a32a0b02483ae3b954ac6f3af1e0f334221279d03a72138f3a2cb2" +
- "1e706427c4d604674dab88d429f28a67be7a996126e077a1dcf8989d90d0" +
- "8b08f4abb9a546b3c64ecaa287bf3468c59add86365b885f52afe13ed8d2" +
- "69ea61832a7ecbb96ff3336f58a1eeaa6dde3611f3ff7c2cc8c9b745b0e8" +
- "b5919914245a49ac192cd77d10deb9a249623f696065a532c20eef9e9b0f" +
- "e706579566a9eeb14d4e8251a7750e29eaa60f034c1a7a1d51aa03a45fff" +
- "89acf41080deec5506128b06f003fa46bc4021a82fad6a8052a49744ed69" +
- "45bd9331b5ae80d873cd042bff079b2b9d8af8065a22c449c32a56dbbe7a" +
- "80d0f3e30b9167532506915883dce0aa9cb749e4368c595c5bd33b57e36d" +
- "98cc9bf91cbfa47331d69b5cbe9c92bc66c0fc9ca8717bfc108e1f710333" +
- "14dba02a28b9aa05890cb01ae9175806c3c4215bd446f6cc96ec5d08982b" +
- "4f83cd1646160e1d306b3cdec02d251f0901b03e8c3c35464eaa5082586b" +
- "b55482db97599d513ed8d7a82e32fae302684b7ede058474c1fac7893444" +
- "16fec93fb982accd162dd956ba2f31a894e9366eca00e6e997fbbf9a2980" +
- "8b83a139f6432147a717381bb8baa2205715f735c1e0db273cdda6897c9f" +
- "39bf0d7eb7caf93f657ef4d3fecea28baf69cf36d3cf347081df3114455e" +
- "b4fe3e49ad3c3f14435e0b39b6c0d16db0fbcfd7ba8da8760d5952c03667" +
- "251e7a4c3008cfb0904225e55c23b884bb09d26631650460c4240bd5a165" +
- "b531ee76ba5749b3bc60adad35de519321c1672b47bc35fb59f7792a3495" +
- "11b2bb3504ba4a28717823a27a1f99ce6970290b26efcf1e7a0399b10eb1" +
- "0c1299c09b80f4520d00e7908d004d5b6a72a411759cfa9523f6b2912234" +
- "481b1d8fe4c2365961c0528bd593d42bebb398b5836ae6ca013fe440adbb" +
- "0090e8ea274f4d8bcae483e3663051a328f7c12870b40e4973a9797a2336" +
- "3d3c53e1b0d1a9159bfb26158f44734b3c34b571be641bba2db937d4ae1e" +
- "edc807b95b1c2a7d44804885536316ad38aedf0d83b1519661f2bb5283cb" +
- "9c50dd61c3753433e988189f26962d1f4befd444257d0b6d5b819d5fd572" +
- "22c9fdff032e07a4d8686d451e71de4748965309c0a2d7c422ab7cf3d96a" +
- "8c0a1b0afb229debd1c9421cb828b9f2be96bb9d6b5be7ef8134bd9ccf81" +
- "51620937d720d83dbdddbfaba8ecd2eab6f1974090efde0ca963e9fdd691" +
- "ed0cc5e074c5780779222552fa46ddcd951763a32aa3a044ff4a73cbab41" +
- "dabb3c2c03fcda68303477f0dc26f35bdb5c9bde721fba1a2db732a89629" +
- "a8de3cfebc3918df1a9d5053d09da5b7316e3285bf62156ca28cb64d343e" +
- "72445fd66757bf4ab374fe7932a65f3d7fb6e42cb12e5b67ddf8530383a4" +
- "6c1ee7ec8883e454a467df1aa7e468a6e7035515f473901efca5d46ff358" +
- "70e0cc2575bbd7f8866c8e73cb157903a1694ff3051424f28de826984dcd" +
- "065dc3658df144ae3a6d37b88c367e3cf7c58169dfdedda4a2821ce22188" +
- "40472ff72f0dd1a6b0100555ff188b80f835259a634405e3dad61fc299f9" +
- "307e27503b2cb7714bf3b636cc64b61d2e374119c8ef8adb21f1516c7fe2" +
- "38c807818065bf312003c12e02525d69d9629a99e4ac66ad2e792f302cd2" +
- "a6f5f702dd28040738a084a7052f2c3ed0924c33b7a5d357b7c9a29cebd8" +
- "621a4bfb7bb34676ff210d59f7f9d4eafb7c5c490c9ea48402af5bb072c4" +
- "731bdebcbed4e8e08a67931b6d7342d4ef7bc4a75ca1dfbd32ed6027d8fc" +
- "b71e3f55565c02e06daa8c579b69774889181291c470576a99e11f2c5acf" +
- "77e091ef65ed243d4287176f7f6ac7aba6908c9ff1fa43b894a499b642ad" +
- "c01b2fa1c4b58801411941bb448f1f7a04794d2cfe5db1be61f7b86d6eca" +
- "c547ee51d4c9050f9e9f318dae958c150acc21c878f0c7df6065294eb1d9" +
- "a278c920838a0db752b080a32e67ac312fa76b589a385f31847196076ed8" +
- "1021fcc375bfcc8e1361878e2693860eb21ff0595e4eaaf7897f2b79367f" +
- "7c4f711279bf0c93a97dcb1cd8d87e444ad5f4cb5c1de44e37868c6743f1" +
- "cd72cec376726f26c8bd4836f9a9f9c68042f95ca6f9d7cde493e531c553" +
- "8bf7ace6dd768db69ac7b41ce93e8ca27ff20a83ff2148ec5b89e05d8b8f" +
- "5d78d0fe16b96f6eb8d3b20126a186085c6825df81aa16b3dbf57eabc360" +
- "71299ccdda60e250c652408d9cd1da94d73c728440ae08fddb901aec0fac" +
- "1050a778b10f94f84883bee158bc53b1c001807c43a3151fbf581b18dda2" +
- "527430872834e5c380575c54b7aa50f817cf3249fb943d46933cad32092e" +
- "bfc575bd31cc744b7405580a5f2eabe27a02eec31e0d7306750adbbb9f08" +
- "c78cb2d4c738b2274c7310cbf8dd0e59138b6a91b8253ae9512fe3d7367e" +
- "a965ac44d54a7ed664e5e5c3c6c2d942eac388cd32beffb38f",
- },
- {
- key: "2f29d71d73f7af98f96b34e939e1a21e2789ec6271b878bbebd14d7942d30080",
- tag: "ec02f4953a9a63ab6f2bfc3501e4fab8",
- in: "0e0950987f3508239063e26a13727fefcdfd2cea6a903615c64bf12d9ed3" +
- "887f9b2cf7ccaa196ccc7756b09471475b9daefd4261e69abd23b9faf9c5" +
- "1fd5d5788bb39d3c068fa6807d30f6201d3f6dfd31715d08b1733440cde1" +
- "049608d23c4e45c5ed61f863350232f85827e7c292dc5f1eced1cbc912e3" +
- "f5c420bd945911d3881ede5153d3b2cc85371fff98d2caf97cad6ef59001" +
- "4017f9690cab08989851c2647e77e81401714a93ed9f938b79f8f54e3133" +
- "fc2cdef259df2ba0d48f37bf9e43792e3a777214cf4aab6dde6deeb543a8" +
- "813b71b5974136c1220d6218a252881f0f5677ff5b6aba127f19a5f3c5aa" +
- "c988543d7839a90a3f947c4e4d5c6ae1ab48dbd40456d1aa65339a4c15eb" +
- "520e8ff9f965ac4c37735937cf09942e7958f8a6cddee41707423f715903" +
- "ffe0d15af8c3140d3a736d23be7485fceb9f07c6509f2c506eda4ec9d30c" +
- "cc133708f48d8828e332808c84a745d337296d871b9794de1c5d06534aaf" +
- "65587526a84e2521f8b332645e0e72564bb308ecf99b7bc69608474389d1" +
- "686ffab8c49b7f04dadc28d2ecdd0f508dad2135843304e378b3bc7a4f25" +
- "7fa4316be956e0a021edb8045f39fa9f002087f067199bd6001acaadd261" +
- "4bf6aefd3f098f92a959685f24bb2206c347359d9c6adc6847117bb434ac" +
- "6c40ec618f6ae8b75a5e2e4d44c332b7b06c8b4d521493b9b0bde8894209" +
- "717a24b320214297b62dec741cea018ea681c9b56702068528b3726953e8" +
- "c5e4ccd5029e4183e772d9834a56a88d45bf87603dfda40e03f7e894766a" +
- "7623ab4dcc0dfc3086d17566945069173935916f772e2a5f8e1547348f28" +
- "782400fc069ac0e2b94242e9e0f1ba2d0e76898f9b986540e61ea64d7f69" +
- "1006b86ce61565da75eb16a8b4c5865ca4eebdde2190e354734bda94fe7e" +
- "12ff47dcb5d5e6ad93cfadcc491cb350b09ffe391a157e14b65e3a211b5d" +
- "4e447c3ff95571dbab33a83126d68dfddf9383b4359d4103ca64af1e6963" +
- "d09e17eb944aa71e76711dca33168586bfc44ebe9fdc55497d83f238c66d" +
- "bcb16063bc85635f0f1a6280563bca49ef971db96a41b6ac5e0642643262" +
- "61eb4662f3d6ad4cac826db895de22c9b8aa35e6464a7f44e1ae7238e355" +
- "068d68754ffcca76c50b7ce7ef9bfebac9eeab32c87d059cc7ef2adb5d57" +
- "c7419adb394eef48441952253e8391e555730e29789d6293c3696f441449" +
- "0aebe2bbe541e191a6652ffbec1192f0f9395b7ea370aefc1f1cc8438035" +
- "d7681f12f1e11d6e334da188b10c302fc0f4bcf1de448090510a8f1d5683" +
- "0c943a3c388b33a038c26741a4cf3487313f755fe7a28e25e44b5383c5f4" +
- "cd6ef34d7dd73462226281899dc3f2e69809a0150f694673f31addc89888" +
- "072a7d4ecd63d6b90540f9522ec05829a7f17d48728345ad808fb0203883" +
- "3cbd018d612992a88df944b8e34a70920b3f26cda2e8bb16c3aa38b12b33" +
- "b395c9ba5e809f60ff05f087112151af1b5987403cff8bb2dce79093f431" +
- "2c744f911a6f3091e4f9ef9375c4dce4c241d2f6024a1797321851ca316c" +
- "4e460fc060e7839deaff8ab5e8bf682c0f21ab6952eb793cffe690db911f" +
- "50b11f56ea352942c43bfff51d4360882754faeb7cf28b6b32bf7fc9ca71" +
- "fbfe1d72be05b8bac9ba513d731e2c9d13d6f2f10eb926edaaf0e3996656" +
- "da8718a8e103c59326529e91ebac6ed52657c9690ccbf81028cd9fb189ec" +
- "4de94fc0771e53302c8d9082835a68780cccd772660a110a1b40c57bef3a" +
- "c1d69428aea549ed17663a96895a66a3bb5ff6ff61dc64908df49b760caf" +
- "a5aff05e2766a418dbaa1e7d189a9edd55a04fee8c9d6e506d299abc36a9" +
- "d67be035fea5d220f41d081af67615fe627c4dd04bd8659c7fa4f57f35d0" +
- "db40d9684aa178d7483ed5d86f04eaea412e0ea05a4698377dbff4fc3a39" +
- "1f6ce0cb833d3118d6c69319b511cce65fdc74928e270da0c537f8201eff" +
- "77416155d4a39c7ad38c22cdbf7d2b7ff7d85383c178a835ec604c3f9ee3" +
- "7399f7dd826e34f1a35ab75da44ba56f86097ddc0f3658ef5bd65a24f4de" +
- "4255d0b03411a9d7f0ddc29e33cb865da23393471aa94e6c9e72e789206d" +
- "3ba118aecd39727068f528f01b25fae2280d70033e4ee46b41b864bb922e" +
- "001d8bf46d6fbaa5a594e926f45eb3a4d2f074506d7834b606f43c89699a" +
- "6db00b374658d9333700894d440a712a1f25f5538f9e7c8ee57ae7e612df" +
- "13292c8ba9dbede4fb77cc6c8944aaef59ea6ad3b36db398f4bb0f82d40b" +
- "44879835f224d6e05992b1b8a68dd58c3dbda2fd73786492ee48c7a25f87" +
- "264b766930fe9427487504fad17f8d230934f044e49ba219f26ead728856" +
- "cb30eecc33a3946d3b1b781061f2458c7c46f6d96f3e06f369f97be91835" +
- "f23b38347d1e381ad5be4419275772c2abd549522a0203c1ee9c96faefe1" +
- "df413c4b7b2624417890e0716854b7092b3b3b368cb674035d3e6bab2357" +
- "e7c262b606f7141b6dad2f6145ebc1deb7597814719784f3c17848a90ffb" +
- "cb0289e2f3cc7da12442b837c4e47f468bca3eb4e944a31c48562c2f144e" +
- "9e920ab5e4cf90a14ccadbae29af13db38cda911e3c8f6f525e6722809b5" +
- "31a4de1926ab12f643d25af87eb8610df59eded6ec278242247dc69a4213" +
- "13f7c2b26ae7a917c1bdaf66c56876e9104d40b59e6ca1431ddb77fc89f3" +
- "14b46a154cf127688564a4f9e120d7b5816cd24a6e095dc8ab8b43bc3639" +
- "329719f0e0f723e2f5136d82638e2249e648ebca67cf0306741e9e8d45cb" +
- "903bca85485c4007397c88a1ce07266f4f611b96b7e0ace3074247a7dfb1" +
- "cdbbdd66e25e172fd2bda74abde7f3b4cb5cc7ee7859f053b2f04f9de03b" +
- "a8e96264117f502087c3ddbee8d850bf3618b4de90f7b3e562dfa57e4426" +
- "5357236e35e71d1669226d63bca50b1b944ac07a1f794e73e80985689b25" +
- "f18fc709367d63b8639d71865cee667536040be827145c08cf3e57a66678" +
- "4c81115706a146eccadc7aa1a9f074b47e95bcba7db8108a13279077bef2" +
- "64699fb87e5abf5b05ff3879d7c7c5169c7cae817c13f0859d4e9c05db0f" +
- "74c045ecc30a51e515feea627da387ff780719395b5b9ad93179b16fad10" +
- "5856049169dcebd43a7f39c549762405f807378e854b1654a1179d895ef0" +
- "85aafc72c7fe1e0e1cd3abf8e20935e331145bbcece4f17ad24ebb6c64ea" +
- "73bd98a7494c134859206c9422f7c4a057db0ae0770c4bcb08c1a6b9ca4b" +
- "7dd8c1cdb3e4977c7ce6c1e79b9d6ad98e27d2759b53cee73ec037a8b686" +
- "f1ff78eb8421f41c74ce9c62a90d38b75159ec925f232e0db71362f31e29" +
- "4336f5580a34b26c5a01ee3454cba227c7f400f6889a319d7121dcea27b9" +
- "584f33ac796d48a9a24cc5b6799ee12f10725fbc10d7cf83e4b87d9c444b" +
- "f43e2f5ee49d8f3b531ebb58fed4234cb8bcab1b8b18bf50956506baae8b" +
- "c1b7492250f3adf64294310387f1d4bcac12652895d4f2dce26f380733ce" +
- "0b5820e9fcd8512a1585a49940a32fc8875ac3c9542a4270602e5e97e720" +
- "90ed71b51badb775340429fdbe45b887fb9ee61cf9e091c06092cf0a2129" +
- "b26572574c46910cb458bca7c63eddd29d89753d57e568323e380065794d" +
- "3fa1ffb874543f5b0ddc702b087e91e22604d9600d37fa0dd90d7acb2458" +
- "4cd408a4e66bb781dde5f39efda6a8fc26be0d08ffdf851e422ab1500c28" +
- "bf6b4c85bdfa94e8aef5cda22870c39ad49c3c6acdbb3b0d58cd05424c65" +
- "20740b5c2bce4336545eda12716317df58e6fb764fcb3004f5248c5ccd84" +
- "f63abdc0dd2a64e447c0de4da4a1082a729d8ebe14810d396933085cde18" +
- "318278481fdb9a748b637cacb491f5234bfe16b53a35da6677336baeedb7" +
- "4a28c19a412e7812dace251446d40ec07afd63854c3dffbd5c0f6a9a3cac" +
- "ee3bab07fba94800fd1fa0fe44f5f2ecb2b4a188cd02b8a2df0728347c50" +
- "7d0cc58fcd5d54dffdbda11dd1bcc59758396ed8db77498fbe13238d3d8a" +
- "0040194dfe66811542ddaa658094a9580d4e4b4e29",
- },
- {
- key: "1285f117bd90b70ef078ae62f37d2218419e894b7d334759ddb2d88833b287b5",
- tag: "429b2b39195a10357043c9601590a277",
- in: "00ef065a1adb4ce7108b497813ccc748933fa8442689a7cb8dc7c1ffdbf6" +
- "c09adfe05ca2cc5ec3acb7493f3497ee8f9cd9bb8a4b332c18e33f78114a" +
- "c8f9a72ddb9f13494e934ad711818909831013ba195b53f5e9e5b4689399" +
- "6d0b669f3860958a32b85a21009d47fddbc8697b7c9b92dc75d5060eb4fb" +
- "40aed7a1dbe69dbbeb6296f5467ea2426cd17d323671fa408855bc53e5c2" +
- "d111203ae38cecac7719c0bd7f21f6bd6a1588187b3b513983627b80ac0b" +
- "300b7fa038af1cc8512403ac2cea6e406595202ec3e74014d94cf8780ed0" +
- "33c570e887ca7fb35ee4768202aa52427d02c24e63f7f2cede95ca9909e9" +
- "dfa86246a27db757750667c198c9aff4ce348f7ac51864b36ef5695df713" +
- "d17b8f561a972d0136bd9ee9aa16079c2ab5d29ac9ab472255ade05dc49c" +
- "b966e0c1c04258ef9ec59ded01f402d9fdcd9a2020a2038a8c78892ca218" +
- "30136069485527069132959dab2b81c73ca590fde2a7ecff761d95a54d63" +
- "a2664aa5a6deec163e46b5225bc98976a4f363063b0f42e29f792d138af8" +
- "eae68d3854b5c1985d5cd1c9f49f529b0b4d2c936887b5b92cdebacef992" +
- "c35e0b7bbd52114aff8c6b261852e28e451b02099814f809b0289cba0586" +
- "04a363e3f969aad3d982f645ec4c549f943fb360fb8fa0d5a597bf89842f" +
- "8ced6014a5b2590ef71524a7ad50fe0ef0e2f81b6e26b99f9ebbc8036549" +
- "f7eacbf6ab884710c6406ff59788e03ede35c30d4781ad5af171e0623e8f" +
- "cf5344d71165f0475e256e9159040f702b359a2963116ed135dd6c1d111d" +
- "2a1e33e15c178ca4f02c5fb15593c50cf9a8a492f01e04778dbb81d26c99" +
- "0c58cf50a9bcf4fe38fbfc0fc0685d8bd422a773c7bce649f7a86c59118e" +
- "f5f857b2c72508cd1ef05e1a0c0b7ab4687fdd57437092eb49bf41a9ae8b" +
- "bd98272ea2f8ee2515ff267fa6ae892c266a7effe61ed54984924aefc461" +
- "6cf483dec024ad666bc797beaa429a742d1b8806f67d451b6d3a85b4d474" +
- "003cfe9e9dd906df47da5559c41f15afabecc3e6af279cca0f2a200eb2e8" +
- "31437e034d457fc880f60f5ae635690bce82bf6d1ad6b4f5344ec042bf25" +
- "7d010273c861e3ac516e9ee2bab3a255f570baa32298467bf704bf6d9076" +
- "a4c0b08a528a05cd1fcbdf51f3885fbaba7891a144fc058919903b269b4a" +
- "29f43926eda32c38853b814a7d528156c223748d674d8f7f5448350f011b" +
- "bfab1511001b8014e20fee37ccd4a0456f638c197c86dc116b34f955c0b7" +
- "dee10bac5ea0c2fec8a780ac05098b51b902ca6afff4db3c6fb4f761df79" +
- "b2039dc5f16d9402442a6fcf6c4297769e6c36824d908beba8e584ea0b3a" +
- "91b9017baeefac651d0307bd89f517789236c0693c65a5a20f244d39684c" +
- "eb810cd2ffd3c78fe9285d2eb9f55d133b86113efb8dffcbc6d258e84c38" +
- "2dd8f4d7d63b65672516d9bfcc3310a79ce244b60d380128d529487f99b7" +
- "d532d5f5c28fad8b9a071fd2fab8fd98f6d7ed9dadbd2fc4396476eba6e2" +
- "1a1b1cc594a31fbd3418d98e4aa736cab285a2786fbbd4650e49f9b080ed" +
- "3fda34941c28d25545395e1408fc3e60730d0696061f821a4d24123cadf2" +
- "3af3d37ba7ce1ba3cde1368d468f136df82c02f9be9210022192aa02117a" +
- "ef5ff70bcfeffd47bc37b920826a4d3db001f956939abc0df520f3ec1613" +
- "ba1c4b3385cad97e42bfd15a3150711fe86ba4562f17780cee1cdf198615" +
- "ca06270db84986f33e1d53d552b0da82397c496a23c7a78ca7641a908e71" +
- "89249cc657c0431f1e09ae0213f28a27e6267e9d17b5bba0ea4f3c21f266" +
- "fe538e215ec62f85517ae6bd87799ac5ce68453f09cbbc50d6e2a168f0cf" +
- "7166ad50cb65b6c76406c326573c00e04a3186251c6181933828c58f4198" +
- "f8208c4484805639b0d428fd05b57e4356239638f458a84000c7a7a8de62" +
- "ec25b54d1e39d2579ec9c512fec475f243576f35efc02a1cd6b0478e2dc8" +
- "be5f17aa4e3849cd42e76fbffe6e7d6f912d6edf80f718f94a7e48e1fc10" +
- "6cac29627d9d4b82f05a30cd7c739f7f3ef7ea368d22612f189da450e274" +
- "de7b61c6361521e684d639be5af4cb11fefa5fce6f8a5065c90873e504c1" +
- "2c940571ea7bd7e9221129b83039d2edb069e8b5bb68567d8fcae34c6ee0" +
- "cb94474d8b056cc3c7403873f2fe6db3b567a44e702e4f4813b2a264231b" +
- "0a998207b41916715ef94e5eec281589d0a711f8e74be32bc60f43d693de" +
- "77f21d5f7eef892abe87725f3d2b01d9ddb6dee15f40735a8fb67766dbcd" +
- "020a93b8eef4361dc3a891d521551f65dbe6e3f68c60819b0a540b0991c6" +
- "4449d207cf5b1c198c17ad6caf3adc628d09fa0baae7a696d84e1879577c" +
- "ffe9b3f62669d4ea5ebab6364f08c66d170ee4a94d61fb77d60b33dd6b60" +
- "650f034c5c9879243d5c16f853dd7a89885a9047a341b076912d47872b3b" +
- "3de49edf7451b435698ac4e182d16c339be83e18531a34aebad36c5c7c93" +
- "aaf121cf99ff92d3844d40740fe001eeca9ee71300d826bc3cfc87a29d39" +
- "ea108a3cf259657ec4b967fbb534e7513ef3a96bffb35abc5ce0e890696e" +
- "54fab515af3d2c0be6e003747504e486c0ec6e30fa4ca79d6596ae0425f3" +
- "396e40fd37432e52c74f812250dad603b3502f97ada48a26e39fd4d44584" +
- "6591bfa5ffb3770d95d3dbd49e9c3a38c6305796b8f7d79bd0845170925d" +
- "575774445299bdf9d3f8ad3dc2dc5cfd3ef0293b84d6e11370851af05ebf" +
- "b3510a22edd930797dcb76b759a9b5a77ed8dd5130e79ff5ac44b01901bb" +
- "79603cecf674202bc5d84076ff41b3c806454ce80cb9e5fa9db77294d20e" +
- "6d3008ae3017aba712862ecd4b32daafef1b8cc8b19ee8f8bc3835e2372b" +
- "5cec66222ad5ea9df753c033508ec43c8b5995e88c36c13ea3465c8bc462" +
- "ae0a659d9767db34499e9d01fb1588410257d6f588b3fdb766a66bce28b5" +
- "e0880f8cf988a2e5eb5bf80cd7d83192b7392fbb2e3a07d51aea2b6bfac0" +
- "d74d304f56d5af3598a0712cb09c04c5dc14194eca8e1b9b29f88344c0ea" +
- "55638c0f8ebb70b6242b797fe2525fa1bde76293dbc0a66ab4715e6f9b11" +
- "f7ecd8f35a20ee4ff3552caf01bb307e257ec0576023d624d6094d43d25a" +
- "aadfce939a6808f8baacb2109c3de50a1cfada9e384cdba3e97d2c9025a3" +
- "2377bb195fce68c5569d2d1267e1bc68fcd925ddb4acf567fb29ea80517a" +
- "7e4056fb014cdee597333ac2408157ff60cfa1afdc363a11fd4883308cab" +
- "d9a8fe56c2b41c95eaef854f20bf5941ed23156d86de3bd413465a3bc74d" +
- "5acffcd15722879849c261c1bbe987f89a1f00b3069453841b7da667d566" +
- "e41fd894d94de44c23fed08d9bdffb723aa8449bf236261240d865efd7b1" +
- "74a4460e5004ff77f4196d1d421227dff7c78f1726df7b5eebddb4bb5f57" +
- "5ade25296dda2e71ab87ea2b44ef2ce8742a7ad5c1e7a40e097eb336561e" +
- "865515f7ee0efbe01d5a928f208f7c9f2f58974d1c11af0e737c673dc446" +
- "1795da9757010cefc6e7f2784658717938735ed8cbcbd7981a1bb8f31cab" +
- "b901c87a3218dd1195c59f64d0bc3ce8b72580fe38e6dbf1181e0090e5c6" +
- "d162df9f31cc52fa6a8ac61897e9b4b3cb0ca2bfb38a38d9b78e46d775d5" +
- "7645d2d6da16bda8edd8675e2ba121f7f85400cf7cacb9ffcdfae583fb93" +
- "753d07985a00afc3a4e26c9939a5116d9b61196502f5d774ab4c7fb6cfa6" +
- "01bcfddcfabfcd28055e858d7d3c19feb6bd7c02565add3a3af61bfba8b6" +
- "f4b52c072a8613e878368318383143059a98a85ba521f781a8983c2486ba" +
- "b83f5b91fce02acee0be8d0dda7489975f0506c8f363b5adc48ba971adeb" +
- "4e1c830b5f264ed42da36d2b5ce2fdab1e63333b1061ec5a44ec1b6e99da" +
- "0f25e7f7250e788fe3f1b8e64467d3d709aeb7360720f854afe38e190cc0" +
- "925c6cbd77fbfccc07d8beeb0ce68e47442fadaf13b53c30a03ce317cf79" +
- "dc9155ddf96814583695f15c970fd0b6cea0b04b1825eb26e65ea9351bf2" +
- "f7a841ddaa8c9f8e885b7c30b9985bac23d3ce777b",
- },
- {
- key: "491ebd0dddefc9f0117176772f9bab61b92a1f1de13796176091c56d1e53dfbe",
- tag: "fbd3f884a3dc2a8be06ce03883282e1e",
- in: "953b9a40789b206fb507ec2c5e9c88ca1baf25ad24c11a62f664db1da8bf" +
- "dbe9b54f8e93b0bfb4adb12f8873096b8960fd91eb92a8ddb53232ac9141" +
- "57caced33424cff943a8db129049af7e7b733afbec6637d8ee4f39d063e2" +
- "be241cca6a339e48d72372efabceac57220692c40856532d95529adfae87" +
- "a71c72f30244126d01a875375ad8836ef8db929bc81027935042a05c346f" +
- "bc94dcc057db015e55c56064d2b11154596b813ee64b73bcac05d2688bf6" +
- "f1fbb0cf3f8307b3df44c3e2dd1d226a4d0e9dc5f7482bada9611970f887" +
- "f656dcb19ce1f8c5c86f4cbd1e4f49b18f170ecfd184028e769e79d7424f" +
- "d01cb315897c21111f53f4d41c3b71402eea695272cb5b4e5f33abb9df50" +
- "cbdaa55ed629d3ed7d93b43e550295502db1f2ed884afc320518e88be4c6" +
- "b62a13f8d3636ba091d07dbc6c20c7e7fda016c05b2fadcfc9ea32f4ee2c" +
- "4893de78ad8a1771aacf6efdbd8fb1f6ee9b0572ced3edc6313185b5d398" +
- "88ce77950aa4c5201a256e3ae3e74f05b70faada14124b35b105a70e7769" +
- "7184576b69708eaabd36e0ba885fc6bafd5738a67307a1181792333cddfd" +
- "a4ef19c88497c82fccff05a8f9f732fc7505f0467a14e135288ee018aef3" +
- "d0412f6b0760573d8ee4ab455d2789b4d22a42eebdf60616fe403627cfca" +
- "fea672bd0a49e8e7b80e7b7b8feebce3381f2fc16819a8996a99ea230c3a" +
- "84b510cf2e0d914610d646a2f45a14268ec1d6fca03d0aea5c9ae1c8d519" +
- "b0e8b0f6fb8ad176b5d6aa620b253cc492b5e5645353fbd9b6c02bea48f0" +
- "286e2c669782b5ffefa4d8f3f1037151026d9cca78e7808dfbe61df29e82" +
- "951d7154f3c97606cd1e99300012578ea6a776dcef0811338b56606b51a6" +
- "9893fe68f762af6c9c26066b1d503e64877d8cd988b443af66a36af8bdfa" +
- "41b4dfb3721d1d81895884755b9c52527030afdfaecd66d4638fab1d1786" +
- "3d5517ef7ee7d081b5555d24991810f1edde30930fd392f817cfe632b4ca" +
- "6fb0460c36bde4a5620b9c369bf51c7d870c43998b8171a553d2f643fe8a" +
- "58aabfce8cf7363ea978ff4d53f58284db822ca95b80306ec02a64d26a29" +
- "c98520f1924c70d161682c54d08a2c48f54bb72980a8cf5babd0aaf0fd72" +
- "7d5b1b9d9b731dc49bad228fe83f7347750e277a4fbd526983c206e075d6" +
- "a03d68957b3e925a71bc1ea7304c77660d112a5d19fd21a785d4a8d7f2eb" +
- "dc4183376d8125341eb28b2df5be0b4e04bbf95c47d2fe2aed939619cb97" +
- "79548b752f57b723cf8295dfce69c9b7486b75a4e900f91926636f3fc78f" +
- "7b7720a5151abdf5868fecf1e1a1d830cd6a4c5e3cd739da4432cf1fe2af" +
- "a1090d6a1eeb32e7236ecfddb9d07b97220ab8e23edcc93d91abc11b0c30" +
- "460d2027869d1c2487070cf60b85ad0b8bc5df566f6fdb0e58fd044da530" +
- "6d277e564ca6cbfa820ca73fb6201b240a5a94c4ecd11d466cdc44046a66" +
- "32478221bfa69b3a2cebd16baa302a573c90895d7f4cab453b11e3a4d8bb" +
- "b5a9bf264781ce5b9796e3c47d0fa57f46b923889af4d073270a360dae8d" +
- "51d85ea916f14787c6500d2d906ccaaa92d20d93edd09139f79bfeb5fcd9" +
- "8c1cdbcbe9f2587e9c9094e3c4a32ab9ba56f400b929e80c0551f953896b" +
- "e8eda6ecf22e6d4a541957dec21d6a9cf388ff0ba58169ab934902892a58" +
- "86e1126b16118e965a271495ffa339c49466209ed3875b568a4290b7b949" +
- "69d0465744a3c2a75c599c3a04ab1a3fd09125fe8f45724b2f48c7822b9f" +
- "ef95af4b758ae66a8b6646df7a0a1aabe2a24c052fd6d30561cae0389263" +
- "e3388c4c1effe431a04356c334aac64f36593544885c4b7295b57dc39638" +
- "b665b22dcbf7dd6da867615de38c6a575cc66391135d47f8e1f0c73c6129" +
- "17ada4099723933a758d83311b384364263cad5fe14bdd7c825d9601c400" +
- "3537a5aca7f9da4710c132ce8b0f1464cee625633ef57f507739a0ab1cd2" +
- "21ae634d4d0b3ff07e9ecb1baaef0a82a97279d46543a0464855cd62c07d" +
- "5e890265612906a9eac88bec07b1dea5f67054c31ae40f8c673296cc5df7" +
- "f0dd8cc9e643b44fd90dc2d1e870ad8acdbe165237642fd04c00965837cf" +
- "bd2344ae830887a5719a3c16dc8ec08bd9131d055bfb959b64ff4cb638a1" +
- "002a4fe02e369871cc4e3ffda17dd85343e679fab43e11970e60198b424b" +
- "676ab17fb0dee10cc9c2e92b32b68d5b05b7a559176f822850c0557ed98b" +
- "7454916e32af549a0027db95f02b88cfc5e7e05f28f53757dd97cc0f0594" +
- "212f8801e58043cb17b040413c226dfce2104a172d218caa4353890de17d" +
- "be1f53af6ceda24b8781801516cc51de9ca459e469b3c322be13d8c9541f" +
- "755c518ca41a0ed42e44b9f87faa2a968b0292216e9f3d3e8987282103e5" +
- "016fe9f7681496e1e8d663eb2d8bc30b41d735465527f19e336a98d2dc54" +
- "d7c020bfab30fe6c62cbae7d09f84af69bc2c51a1839ffba15015d381ba0" +
- "a44a3758771c4f18d13827f518f30bb74f4bff29a87d4b9e949f1063f63f" +
- "662721cfd64ffe1dab3761852387f78fa83fb48ae2c75fc567475b673da6" +
- "fa8f53770b6e5a3c9fad951ec099c6bc1e72d1c489e1ae620e7f12ddc29f" +
- "ed65f29c65cef75014b999d739e2e6e015f928a30f2fee3f2e59bf65b54d" +
- "89948bf2bfde98b076e5460643952befd02fc1b0f472a8b75195c53ea296" +
- "6403b9028db529cd04b97231bac3068855fa211f4d976a88bc27a0088f04" +
- "576e2487ac0467992066ef7667ca8429faee92db38003728e5c219c751f6" +
- "6f011b5d679fdd957f4575a0cfb6b54693a9624f2c7e66c578f5f0367005" +
- "c66addd1e3ab7ea1ac404e357cbdab9438b9b4f80b3a6761b864b006f1df" +
- "689ae4c0434b06b686d5353d3e421b57381ea24fdcf6199195ccdb3d5cf4" +
- "623a6bb1f9eba9b22fa15395f65f8093b5f90455061c1cbf8128b44a31e3" +
- "910862a59e187aa7f4d22e0317ae6c177cef24eebc44171f70c25efac73b" +
- "38ada0cba0b74f72d1c171277a734819c1111ebe46d5db20a6ff20e2c1a9" +
- "a57edae95a3c1f80ddf2b12c86d3df0078a7bf68695b16ccf92053c727a4" +
- "80586b8d87d0d1772e456fde0c20a7927f351a641bff5f22f9ee2217b6a2" +
- "d0983c8102d7d5356dea60a19e105ce366b9d000987c8c33396569f97c56" +
- "2d0fc0bc5859779aa10efd1f8df0909c307a9110083cc6d9748456c9bddf" +
- "16dccee52b7974867cec718bb0b76b3353379a621257094277a30148ac38" +
- "e5cf67ed7cc9c1bae12dbdeb99d7d880ce98e17f0dc93c5330d1824a3c9e" +
- "ffd86f89e15b59a4bee5a48d4f674766896e187abaa39917b83f8d2f3265" +
- "bbe7aac44c9f8d92f775fe6493e85ab44e6e28f79f28eff156c21e1abdae" +
- "d10a291b88c4020b1ae8be001080870847a852d073e82bfc751028ac62d5" +
- "6aeac1b18f2cff1c0c7d336bf08f8cd5099d9d3b28f9e16077e9caabab49" +
- "f2d234616a7522a6bde1a3b3c608df4cc74a6c633d4c8068138abda8d26b" +
- "4ca70f95d152888fb32bdee5dfad8ff4a5b002a0a327c873656db8d6fdd8" +
- "ed882e47ce8e47c729e1292db9122ce2e9fa275f9bb986eb7e0a1dccb7cf" +
- "abd0449c92fd35e2aedc4aa89caf53bcd28170cae85e93f93988e723a896" +
- "10cefb4edb6fa545835fba3107e21dceb272c5a32da26fa77df070f41d7c" +
- "ad1d68b836199ff0f1221e36b9b976b5e69bed54b5bfec67fe9cbb383484" +
- "696265204797634594bc335150daea92dbc1004f613b4c27bf5c699debf9" +
- "4365041b5a894701da68a93bcb61f4e546c553fe61f14ab0322b45915da6" +
- "ecacaa093b0071f2516ca8c3fef2f1e3c403993d734403c47bfe5f4379e9" +
- "cb5b613fde3c0d880cecef4101aad8b8b1c60a92ac5185f6c243fdf1711b" +
- "0b56f0fd8e5ed6cc0f99da888e4f156455a0f0eb365b8964347eedd15d80" +
- "2f297977af667ed1376dfcc610f5152421b97afaaf16f9db57a435328595" +
- "b9aa00b5ed9ff106c66970fafef379f4d2f98f2c5984ea05aad64651fbf7" +
- "7968c8cbc4e959859b85302a88a3c2faed37765f3f6ced59d8feb6c72e71" +
- "f9d4497d98bccf95fcb650f29131e1df1bf06a5443f8af844aa1a7b5a68e" +
- "bb250c7de3a65ae9b1086cf83f832050e55030d0f67c6a54ea2a1dbe18e2" +
- "8a96c9e0dea2966997bfc5c5afd4244e3c8477c4f5e8bee8fc8ca9a5cde4" +
- "d9c5a2c7f3d2e811b1de7ce4279229319e432674c609b4c8b70dc6172e9e" +
- "653fe1969bbc2cb3685e64fd81d96d33",
- },
- {
- key: "b41db44465a0f0d70093f0303bbd7776017bca8461c92116595ae89f1da1e95f",
- tag: "d8a111a09db22b841fa28367ce35438b",
- in: "b074b0984fb83749586881e8ec2c5ce9e086cfb2aad17b42b2429d4cf43a" +
- "0400fd15352d182e6c51e9338da892f886f460d40bd178d81c52e9ab9c1c" +
- "bdd812594e6fe7a9bb7fb729c11328d3288604097600a0c151fa3d9e4268" +
- "de75866558e9f47d8dd331994bf69f826fd4a6cb475ae5e18365f59a477a" +
- "dde7fbcf7e40b4e3dee020a115830b86f0faae561751e9b596c07491c42d" +
- "e02fc979e69071113953729d7b99f1867116d058a90f1b8c0f9ba12c6322" +
- "4ebd1b563a87734f5d6e2d4e6715d5f0213e33316500cc4b23784f78a9bf" +
- "13fdf99bfe149cf47aeaaeb9df1cee140c3c1264fe89bcde8acda6bde16c" +
- "e3d770ba51950b67ad2c5232ae0cff048ddfda8540cf18e673582dc96987" +
- "4b127f655e7d4e08859f2c6b95403cd5b4e2c21f72bb872e49e592306286" +
- "48ba1b16fc9637709636b198f9a297aec364d4c3bc869dcad32b1830e434" +
- "b556b429136f0012a0a0b6fb3797bc8668014b010ea51674ef8865348dcc" +
- "197672047fcf72e6b6910a0e32a4f110d85e28db0e338d9cfdec715a8800" +
- "b4f007a7951d09e41620815848c89f8768344c50bd522c46f64ac6c98e53" +
- "92176651961c7a70b62f3d1819bfda674e2ecd3167415edc4b97419e8ae4" +
- "9974b56cd8d52e1d05b82610b59606a750b34844ca33bfc9b21fb970738d" +
- "b66f48928df79cf67730a30b0b612f8c15c22892120548ab460a6b9bb3ac" +
- "e30554c86c9681c797821a1b1ce91d0e87fe90ad4097c974cfbdfd5c4c24" +
- "a5f808f388e1b1473e858f48a387614501c8c39d6973ded69b1764663cd5" +
- "166be02b596a49e392d637e3d8afc91323f7450318b79d5488c040e346cf" +
- "0cee512044514b570aa66bb98d639a9ee23a7cebe28474592623d082873b" +
- "73efb3eaa4721fc4761e15a390497cb13cce181107e8b1a0186b9e47a5a4" +
- "b67a5be3cd88a43d341ef63f10af6970aaf56035db938655020809033a92" +
- "8d4fe6d2f5424fbde2fe82adfd991d388edf293cb4e3eb68d876f225a5f1" +
- "58208bcb1aaefcbc28d6763d267406aa8d6ecb413d18cff7a318ba031ba6" +
- "0ac4560748c248de64eec56dd4540124b38581604f502d94a2004f9eb1d6" +
- "edb009e16af6c6d3ccbea79b10743da98aee7ace407a90c6cfdde694f36b" +
- "e0271e722618a457be68619b980754795f4ac95ebf4f1820b85ca8e3fbff" +
- "a2430f8e01ab422d7140751f7741f2c921400dac404b04e049736738a87b" +
- "6f49bd54b1b447b922c473831a65f224ab84fc96e4551a0333bc6187e15c" +
- "c0f0ad628068bcd7c043bd1e3036ec01e7fdc3d157476149917baafaced0" +
- "15d09fafb92181a0ec65b00c9c13631e65de184377416e04d3d93b847e0e" +
- "286c1d88245d4d550d30d4fbfcb416ff26a39a94275631c2deafc7cb6780" +
- "f149e4d0e9c4515b708fcd62be5252485407a6ceeb9247de34e0266ef384" +
- "976f6d31284c97468b3b03e951d87a5a00836ea303a266147a79ff3431b4" +
- "b382e86c74d92661e0f65e266b7d569c03994b667a8137f3080eda2ff542" +
- "0f0b52b427558dc26932a22a615c9e6b1834a251c6b68fdfc0bbe0e8781e" +
- "36adf669f2d78bd23509ef7e086634e526258e8d11a1e0be0a678ac09c7b" +
- "b4e3c5758504011e701dc85997fe2a3e40c7af83f032bdbe7adc10ef1e4a" +
- "666946c2bf31dd8e3a383211c9684d5302f89dafcf77976d5a02c14e2462" +
- "09d2d99918e82402cb0eacaa12032ad8316315af1b3d3bd5058f7c935d35" +
- "ef0d4e71373958fd5e4140a9a586d89c53e4144c00148a4706a524896eb0" +
- "5b1479a0de5d3f57be46b3f5fa4e49bffe027c81a33e37abc01a4cafe08b" +
- "8e21fa86b42be52d75d6407e6cdf399de7aedb9b61a6917b2677b211c979" +
- "33536664c637a57ce2234e3319fe8b4a77d7285ae6347464dfd0aab3e6f1" +
- "178e0029686770d3b0dd541490b097f001e95f27efe8eb16e4747937d643" +
- "cdefd49e586ecad541270cedc3064bdb7c79f086bf1fa8c666304d977a15" +
- "54ae268881e17d8bc3fe51fa9969f7e560e3d3e050424febec0998b35f2a" +
- "7378b2c3e384cbfc80c4987734d76c78224cb81cc5376f88f0ceda28aa50" +
- "44e956537c3ee209071d84a66173384e0aa466d989759fb1f2f17fe627a0" +
- "ffeaae7c5a3884b237f5151278a07117c2e833f1815c7e0e0b1611f25058" +
- "ca338d21deb1a571faf1d0486667cb7c58e2814c3722d24fb77ce1b7e018" +
- "2ae5746442b5ad00208b17c0a68bab4df8a8f36edead4fbe79b4c9220dd6" +
- "acea6d23c7caaf6ce7cabeeca677a1c764d610ea6c7e994d6a9c88f57fda" +
- "ef160b251e7595578ea2cc1441d480c14b8b6945e76a001891b1f214979b" +
- "c52ec15e9480d706a40cb6e3b259ee99a9e84e63a738f1b52cf71c8ecb04" +
- "fc833c2c680bfed587aa1541e5ffe8bbd7b21302bbf745011e559f94f952" +
- "8b7fad8a37f6d855306a5be22725859cc950bcc334179d49564af3b9c78c" +
- "e1de59a9cb45086a33856ba7195c17cef573950155bea73ed16645768bf0" +
- "a5cefce78ba3ff98a54a8e8afc5dfcb0d422bd811ba9b7770a663b081dbb" +
- "40aefffbeabca955a9638830f0c5d70663cbf5b26067cd061c4a3f5cf8fa" +
- "4b6678d82d9a2aa33f8538b7499a3466f6b0ae2a1daf280ab91a6c220684" +
- "12705245f353b4b83db50bedd3bf99d42bde6363fd6212cb745467acb007" +
- "b678128f6580629a06171f7f3af272f8900b801af3bf47439167871e7b0c" +
- "33f198333992a6c52c32be46071738cfbf245937d48f816ebb88ff0e726a" +
- "dc41de4c771ff0bd320a4c0b1fcccd9fd6c42ec9c5185943c70e9a4b7c26" +
- "a980afe104bb1f99576671a254704c7d4233eaf9915e1d56c103ba9f6e8a" +
- "46aff466933bf58c9842796ae9cd21f7ac6aa96ef42ca54e390203bac354" +
- "b7c1de7d1887c48255201335f819020e2782a2ee8af92ceb206b651ae92b" +
- "3f4fdefed05e08974aee0a353d104b1be9a5e75c7f958f1981271b0a6928" +
- "05a7a2f28a0448d86102b4fadf9ab4ec2f98e31e64fcfdf2b524780b3342" +
- "7a2a3100c2032fc93199f3ea7a9e8063fe73282dcb1fafaa9496c7da868f" +
- "dcf33bbb761df0bfc6fef30fadd2b6efef4fd3216a8aee48a2ef28102491" +
- "cf7278b567c272d1064a277eb193b3f6f01df641ddb729f72454943cbd3b" +
- "671ec077f9e3548f5f57d063c653ebee4f228a78f8a128d26f7f4b44160a" +
- "07e942bab87b2d043c77ecdf10c1a419e0a1c4162a99c21d4abae0558b8f" +
- "4dc0b7f1ca3892a6babf71f2f70aaca26bb813ac884ee5d71abd273ff1c4" +
- "add230a771b678afbb12a1ca7fbcb2c0f5589c9ce67fe8f78a8db87825b3" +
- "09ca34f48ac35aa7ac69c2fb2423807650fcf47ee5529e9d79dd2628718e" +
- "230ffe5b83f9d5bdfd9c5d211282e71cbcacf972995bf1b13d21419f7fa2" +
- "8829ed1dcc459da35883b9269a474f7fceff01d44ab78caf1ef7d8117f50" +
- "cc83eb624062b149a6ed06ddd1cd1feafccdee7122353e7b3eb82978ca69" +
- "247fde52d2d6cfe7324f04af5259e1b5c2460889da4541b431ba342a1c25" +
- "3a1b1b65fce7120829e5466e7ad2fe4e0f773c7c13954a9c92d906c91aa1" +
- "de211f40916596bfa8245344e257e5907a2c49ebcc864cfbe28663e700d8" +
- "472c50355313d5cf088e9e8a19cdd85bcfc483520498c6386050e53a3ff8" +
- "1e2b77b55b116a853d71f60d621265166cd7e95ff5cb4466226d7cef68ff" +
- "d0a35b61e76a43cdcfa8da7fff9558e2f89b981ec6be632b126303ca1fe8" +
- "53d5c628d967d39317b60ac904d6a882beb0746f6925a86693aff4deaac2" +
- "e5b64b611de86767d55a6e11221605508b1c5cc828251539b1b6f65c2c04" +
- "8e65be5422c1b11194eb687d906c559068c0a810713b23b30d8b17f10df7" +
- "0962c5e7e782aff7bb95adfe4cba9d90b0ebc975fa56822025100b5cb8b3" +
- "8bdc8928c1a2a8034dd66e2a763696d7ce6cef4dd586b83f7d01749d37fc" +
- "4fe8d7abd324d4ff1efdbdbfeb0a2fbb8b266fc2bce8e5e5b95d0089e7c5" +
- "d7de4db837d1822ac8db8198889d6bfe778d0b19e842f12b5afd740aaecd" +
- "e36e2cefc2cf0b082aa0c4f75684d024b8d828d8f2911fe1aae270251f62" +
- "4f49584e40bb193577c9d8e04eb16c094653cdf9a15fe9210f724c7a7c73" +
- "74cfd1a74abb5ceae88ea54f7e7569f8eb674529cbec965ed05bb62f1968" +
- "8fdaa97297268bfeefd06eb21f700cc56f9bf7f6cecbbbe7278ada8399fb" +
- "960371a2d5cdb852b11c9fa17650e614c5297bf46cb7889d52bcf49d2560" +
- "720852822b75bb16524d88273cb366b84b88282da91875562e5a1fe73973" +
- "afe90e5cdd3f5381612d3ba7bfa058d023a9326e403ec474d8938313fb32" +
- "bdb5bf899b900c3818c43c8a0af6a061bd26e847ed75983402ee8a9cf4ef" +
- "85bba5545a0d329ba81495157eda0286f1917de512fe448251697dea406d" +
- "a510adcb05",
- },
- {
- key: "b78d5b3019688e6ef5980c17d28d7f543ca5b8f9f360f805ee459717ca0d85a1",
- tag: "f01babc4901e957d0c2032a7279321e1",
- in: "ba7d35b2ef8af1118bce1e78018c9314b0c8c320591e103d23f715acb05e" +
- "dc98fbc618de06627661df5842dbba9f604c2d20d664e5db06e949b11d49" +
- "665088dbafdb0d39d20beaca7d723f8dcdc57e9c5583d303b6cdfdbecf95" +
- "7d8daf2f1c72b2a6fa27e3d18841f4841abafd334c110cd2b74efb6191db" +
- "ab9b8fc8427ee17664082f31db98d30bf15dda967e20730a9ef525abe9f3" +
- "f620e559ed22bf74d347c9869f0311f33da7f1a3dc858b3a8aa73a35989d" +
- "b055a4a2c269c95e352259c57de8b94d8de48984ecde426d3ef60ec1c7b4" +
- "41cc950f7764f55bd0cf52d069b9ad446d1f765f35d02ec104ffcc00bf1e" +
- "dc1b951ef953acd19984ff1b41041bea0e9f5326a7c9ed97e6aab42174ee" +
- "971ea1dbe2fd1c1f67f977ab215962b0195417170f6b7748fd57262424d6" +
- "cf7c235b34425f4047191232722932213b3eb73904cadd6a2e9c7571d7c6" +
- "6c2f705b5039ff75e5e71c5aa738bf4177653e6eb0b49303a4bc0e641e91" +
- "2691f217296a3325431d578d615afddf47784e4618a2ca40ccecb05d621d" +
- "a52f272b8cf84f7fd8177c83af1580d25a764cc06436d67171cb5d1e3b39" +
- "367b46d9a59d849d87ab6bfcf3fb9bac2b1ebfcd1cef4459e74b0e1b7080" +
- "dabd2dea79f75581a55de63c4b23ff67d986ad060102933fc6cce8d614c9" +
- "c86dc84068828dd9e21ffc5665c809d83b09432fd315dfce5d7a4ebd8143" +
- "181953e3f8716e47b0b30cc1f753e31a7d509f2dbd4177b6da310cf3cd02" +
- "5db270adf98e96259a5ae1b81f5be4d5c76f502a612ca73c76b91e0ca695" +
- "aa921f9489948619482c2956205ae71fffc3aba4476ff754e4878e36c763" +
- "2c935c076857c5b90cd63ea4764efbcee53e2ddc9bdce54b1cbbcf0e7544" +
- "d023e7c2b79419ad92221a1f76abe31a8236e370d38e2493cc9ca2aaa811" +
- "30fc713d11f500fd071d6eba6861e8b0859b372e62fe60b627a96c377f66" +
- "236aedf307e1d148a61bdad072b93d7d2a73367c595b1e048f7023e72729" +
- "1ec508326f5424a5bbf4e010d0240b71fa9137e6642ab40c5e4fff79877d" +
- "b3253c663a221b49b3e77ea307c7b9f3f72a0f3a54d0112c45c64a0c0034" +
- "baf2b55ae36ea6f811bbb480cee663136474dacac174c73b1e8be817916c" +
- "fd4eb1876582bb3a36cfbabad91776aa676305ddf568a86e3a5eb687fa81" +
- "67771fca7b5ca00e974b3cc3e322b4bd9bcee2a87d0ae7976da5e04fa18c" +
- "219fa988d4f6fce62f194b05c26ed3ae1b066cd9751a2d916d53426a454d" +
- "58f9c3b2fb49374e5791b412fdee1b6029144f1ca787f56fece4f64f4fac" +
- "bfe4cfd8ba7c807a83cf44008fe5126a283ab2631a87acd8e2a3bd10979c" +
- "4b07a84a49b0687a45a4798ded0b5e9b2acce30e714d78395bfa8f33ca91" +
- "e68b2138bd67d8a694cd87c88dcefcd101a3b408d7a9095cc6a4b38898ec" +
- "c8b375f5a67deaaf73eb7e99b10314ca6bba824658bee85dd731d9a1475f" +
- "976b7c0aed4b67b088f0db5ca5091273217f724969dff6cf184181377c45" +
- "5722beb23fd9d097a82ea2d8d527ba6284acc20cb30f2e52af28800c61fd" +
- "1faf9f4f619550e0162a1a63758e202533889b27420fe7d0eac9a47a6e11" +
- "1d80054412340e0426cdddbb3c7b9b823b8db3ef58230fad7a3ac21a7805" +
- "d30878d4ea78dda95c951b7a5dc552e9434c35e03e1dd88652d3714f8fbe" +
- "a39936cc0717c2e0335371f2a751204f5d9386baaec853f019325edfd1b0" +
- "719d1fdac3fbd774a64bf957fc54039501f66df94b5b9b82c2076c597065" +
- "dfcfe58b2e215a3734066aeb685ef97759c704b5f32dd672ba59b74806cf" +
- "ad5daeeb98d16f7332ff0ca713d541c84e4aef0750bab7477ea707e2e497" +
- "e12882dbc0765106070ec6a722d08fe5c84a677817b28fa3a41a6117f2f5" +
- "465c2a2f0eb2b8be4f36e676b4115008bade3573c86cfb1370c03b6b0dc4" +
- "bbbb0ada4dedac10a593655068a26febc2bf10d869cac84e046c9c846ce7" +
- "927431f606f07b92abdfd81260199ae05ed01dfa07088c56a6a8de9c6d51" +
- "d61d6a6d3f9904c216ea8329467a006a3d2495a768a39ef99a21827d2def" +
- "909bb743fed7209f7fe59ff1c1e710095b05f166c6173deef5c6ec4105c5" +
- "fc3b87c8269c786bebd999af4acbf12d20453b125f338aee87e9509ee405" +
- "9c9e568e336304d7be9ffe81d1700555b0800242d9b7450d7256f2b17f6e" +
- "d46a39f67bb2980572ce73169e352070dbafd4c7fa5a6be78cf9b72981c0" +
- "a01f1e1e30ee3736c59828b791d2373799854497a28a44bbe0e074925723" +
- "4986696fbb06ef9ea83fbd49c45a583ce12ff10258ba06127c67b0f66dd1" +
- "09f1366d8036853973d8884f93de54fb2a12949eefc020717eff47898cef" +
- "306b5de068411f1e113ffdfe2556e0faedc3e27d95a45b8afc15ba0eeeff" +
- "eb86da7b4324e20af80c62bf0ceb4aee1515f5912f71c6bf2febf20123e3" +
- "dd3a82dc1e58a108f1039942dcdacdeb1f0ad0b2ef34488d98d6a52311ae" +
- "acbd03c12f6e775e375d5979c7c295bb049f2cfd3580e3da3841ddd8e6af" +
- "4de5e6512ca79cebcab9280554524881da37984d340e8f0163fe10a02ed0" +
- "88682560bc6d3c4dbcf1a542ffb3dcc2ed16a2eb96896e8269697ffeb50b" +
- "73f2cc354092e782a0072fc12e1eaff117c2cc8a5a1ad8b47802ac9e23fb" +
- "91a0cef9e4027595e0885464e61563093ee2b1dc5f22dfd04af7de6a70d5" +
- "977d3751a4b3cc0c71a71c59c0534cb1f8c0eeddcf1c0e1b3e5ad0d083b6" +
- "6e8b998ddf9ae9d3b365c851d42e995b9afdf8d66b2ac40bf514ce32e456" +
- "0880afd38c42c08926067eb243c4b1184e667ba756c14ace5f525eb48df7" +
- "ebb429d0a23d159664f8021d27dc7167081de331c7114c9c6456e1ffdb42" +
- "2172a81c06d8deca995e158c48df27261a83f83e0127f5e056a139be9b76" +
- "e25dadf534d3d1ed6ebc0b5d77d51e5b90ff86f30d4023066115bc11b33c" +
- "c827b1103098826d0bf8777176b2da6f1e5b580e407ccf7e614fdf4f5b53" +
- "3ef6d30b20c1bee61eab90e983b1a97173a62720ffd27abb8976a948d532" +
- "d06596c23b0ef31c79831bead8f8e99ad209af3658cac0cb3c3f9c88379b" +
- "9bc871d8e84171d53400902da1243f664afeaff60bd96ba2639a7644676c" +
- "a79f43130af12ba2c877d67f7ec030a4217a72f5368af7c9f24e643db6ac" +
- "97a04adaf57dbc53762d8dfa1afd49667c4041adcb5ec303e191b786273b" +
- "bb065cd9f16a3a4a399c6a7aab9c1a6604998264e8b3dbd13d8f2228b13b" +
- "2c2b9fec5055d8e9f2df1d9a25e4bfe2029776389877bbef7e2c7621f06b" +
- "c0b7fc0786e2b2d042483ccd4a59d2872a6c5ac73e217123e5c8401580a8" +
- "d967e0895aaa28f4d25ce68c90b4394d8113bc423e9fae46ac47bc2ac191" +
- "fb97b80b5a85feb2bb54f84c493235c1408662fe253c6786fcf6fdb8be87" +
- "dc66a72cc847f94dfb5214af5905b7039a7363a1b23a07853daa26862783" +
- "ba08a80846fbb93ce98700a4f9961115128dd67bd7d19e0c588fdf6196c1" +
- "1cb0154002ae862f11421f5dc3a57b6c0870b452272be556a1d14eab1af0" +
- "a91ff5b89de6bbeed6e03bc64f5efddf9e54da71c594bc5ef78e0192cfde" +
- "da36e4ad1a6b0b51110c1b24d20dea1f19e18cb1184d80189f842d4f07ac" +
- "834744dd009aa3771b1e5502fe4b65a403a4bb319e1880ff6ba852e90a8f" +
- "4fcb52cf374c88408428cdb1255291b04ed58c992310955198d61fa1fd9d" +
- "762d48f2f65a287773efc67d549981c291b427889d3e3dfc0cc6cd68415c" +
- "dbed81b516786dacf431472a7dfc99688d15bb6c1b85b1a2015a106e5de8" +
- "cb9eec4c80b17d00fdcf4a9c64de4643a95dade8fa9f1bc5c839037d86c1" +
- "3800a244188e3b18561a74912ed72f99f2365f0126732d037dd54a3ab77f" +
- "9a9f6a1c1469ea92eb707482066bd4990dec4d7614ccb4ea6dd4deb8bee2" +
- "2c4dc0b9b4d4cc70a500d2c8a5ac3ef88a38439b7dc254a6d920cfd317a8" +
- "4d7747148c65b6730709e43369d4c995b03c58b9df444f77f216944e70f6" +
- "6446554d8d513b8f7f28ef0a2d7ad5ca2f6110304196953247a7ac184f68" +
- "61fba896c2d5a59007ec2b2c8e263957e54cdc1f3b4a145228823fdf0960" +
- "c33a28f59b03ee4be21001d2f56fd49ed14db33b2c4eec2c3f41b250a624" +
- "99a9b6602c1e838526a54cdcd058af1c252d56009d4c7769deace53bdb66" +
- "543f5a081cdde775e61efa70956fe2a7a6019a164c6e413ded314bc928b4" +
- "aebccb946ffdf3eb33e187bf421febe26112b3262a526de65678cd1fa03b" +
- "83513705108fe0bb87aa99aceb28af3641c46a2c4427cc1063de01aedaea" +
- "fba68155d4de494a27ff6b7fcc8f5c5c3f7d3a115c397a1a295bc55aec8f" +
- "7f150cbce2a8aa4706d54ec863877bb966ad441c57e612a1b5d438b98d9e" +
- "fcdfe6d4f66e885f96407e038015cf974ae5a3540692b054d2ddfde59b28" +
- "ede7e2f581eeb56c5b88e2779aea60c1d8ca6107b0cdda1ac93e6c7520da" +
- "edc66afeed12f980e20e1e1c327d15ade4bb90de30b011a9cb33855ca3ca" +
- "e2",
- },
- {
- key: "2b0b0fd3347e73c2fa3a9234e2787e690a11aec97a1c6d555ff7b4047b36f372",
- tag: "81b1a6633f849ab0aa7baafa58a5d9b8",
- in: "427f3a7a5f1142ffa68e83df5f917e07b2bc454f3adce068a8ae9e0908e1" +
- "3e0099aaa9074697593c6d8c2528fedddeca05e3888be1a0a201c389a72d" +
- "20cb661017544d95a431e70e7c6580d8fb46ea4495bc59db6ae2cd69510a" +
- "02426c50de1b6110120f759960605aca718d4d0a497e003e1ea2b8ae9a53" +
- "df3c1eb4f704eb32f8f05eb08cecba0fd4a94f0daa3b0984c30a38f94b7a" +
- "10cde723182d30588bc40f1f9d38a3bab4800fdd5148e34e396144763696" +
- "c9b3e9b8adfdb337123d54237c7413f98bb2056152b256e37a27bb947c67" +
- "240fa3ce8da62ab367db540bcdd9eb873d6c71c75a08fe99b5c11ec8e6af" +
- "f926d2adfcf073479de394d4aac5fdc6241824d944b8773db604c59afc01" +
- "495ee755905e5616f256c8a64321d743a1c9368d46418826d99b762e2f6b" +
- "f998d37a995969cdc1de85f0ce3987c6550459f5e5bfd9173bfcb9e0112a" +
- "d91f092de446beba14fb3b8ce3fb2f9c941815b2cb5a3b406e2d887b7912" +
- "bba07c8dc7caab9836827da93ca71fa5ada810da1e5e9b09738524564d8c" +
- "923746d19c78dc9107b9f20f653e05d7f2eb6bd90cf5eb30fdd7b587eb46" +
- "74a1064c70ef0af2e75373044d32b78d96eb1db3112342d38dca0e47b96e" +
- "9307fcdd711b1c66355186369a28481cb47ef6bf6651c2ff7ee4665247cb" +
- "12b573933d3b626d1c6264c88bd77873c2e73e73ee649216bf0b6d6615ab" +
- "245c43569d0b8096596f25ceca8667661de1cd60dd575697370ebd63f7e9" +
- "5333e8a2cdb829b75ea83d72cd246d50358f7c094c8a515805fda03165d5" +
- "21391617c9f9a2ea562b419632df611a67912d2b369e5e505dbd5c719253" +
- "16d66cd608cc4a9583a8eaa4661b7279870345fac3031631c1a220551527" +
- "5be7d8d89b71960e687aace3a0e8f206e475053d6fbf97717b154c75406f" +
- "2caa97d1ab66048f1c99281c188a2f37b8bfc736c25840a9130ef2031c05" +
- "6acd9dc10592eddf94f5bac85319b10ae46cc136a0738aa803837287ed7e" +
- "dafe08d1fcf31d5e63763e39a5e1f4d7d0edab368d44e63fdb33c28905ff" +
- "d6be406a024c017081b4f2d70860776e9d2556cd008fa5017b58733da13c" +
- "634938407a118827a80baa28d4e605db59430f65862b90cd8356baa287b8" +
- "4e6d9199fd80abb9fa697e2c2c4c760128e4ec0438388cf407e2a2fe0f57" +
- "908187ed8efd4c5cb83cc91dbe6a11444eede85099149ca82921bc28bdd6" +
- "b9999594a41d97307f8854b1bf77b697e8cdd4daead2aa49fbc571aa44c0" +
- "bc84a57cb5fd85f06847ad897ceaf449eec45bddd4e4eb1e1e119d15d5e7" +
- "90957e686acbdda1bbe47ea935ebc4b8c2e3cf9b7157cc6dc03bcb19508d" +
- "a9e19cb76d166da55559ec7e0995d9b50c6c45932d5b46eee400c56d9dee" +
- "618977dcf6f76e3e86bc5207493afbc2aae9f569ec9277f33d9f61c03d59" +
- "dd6d8250ee8cb3e54e5e941afb74f0735c41d52ef967610c9f55b2b52868" +
- "4b549a99ae3392a7237bb52ff5f8d97327e2837268e767bed0bea51f76bf" +
- "88bf0286bf22b881f93f1d54fab5cd4e3c148c96c39e7aeef375de249df0" +
- "4d89d1bd97a7afb2be0cbfd3380cb861d31e4ad1ea8627721e4518b9db3c" +
- "cda20273ec23549c4adc3c027e3ac9558de2010a0263c1225a77dac8be60" +
- "d498b913f91391d8b2656ffddb06e748cb454dc2b7226745f11030a6b9ae" +
- "09ac8ac428d9c6500801fb540650c94610ab70465b1210c6db2064dc84dd" +
- "7f52573f8f40c281470e85176c85ec6de3c718663d30ad6b3dfc1a3a9606" +
- "1936744357ca62fb8bb066aa1fcac6d7a2adf0a635cd546bef39fbd3ee0a" +
- "8802ab0466ec9b049b5892a9befa4377cd199a887c34569b6f90852139a7" +
- "86babc0049ee2b527aa96b988237a52eae8b4b49d2ee15ee5294118cee62" +
- "3c3e11cecb836b21af88555f10be2eff8379beb615b7b3d6c01d545cacf6" +
- "61be8ebbf7a3c58ac5e0e7b17997659a2bf15f2b2e3d680d142fd29d23a7" +
- "aea9890f3ff7c337fce49ecedaf38573edfae07810ba9806723e576d687e" +
- "a11700b8ccb96a6559259c367cef4e3999a05a373ab00a5672ce8b3d1dec" +
- "a414187f383e449d10021b73c1f7e39ce01516b7af96193f9993036049fc" +
- "72ac059ef36b2bcfbe13acf140d41592880fb8294ebffb98eb428ce9e65e" +
- "1094521bcf8ecd71b84c7064539a7a1aac1ad2a8a22558fb3febe8a44b87" +
- "72fc00c735773d4ce2868a0b478ee574b4f2e2ceb189221d36780b66212c" +
- "dd8fd3627cf2faaa23a3d0b3cd7779b4d2b7f5b01eb8f1d78f5b6549c32a" +
- "cc27945b5209f2dc82979324aebb5a80ab8a3b02129d358a7a98003e701c" +
- "788a64de89726da470010eda8fdcf3da58b020fadc8970fafb08a29bef20" +
- "2bd0707e994015258b08958fc2af4c86c3a570443fe6e1d786d7617b0c66" +
- "29a6d9a97740c487622b5b8186c529d7f8af04d9f0a9f883043f08103ca4" +
- "d70057ee76639f3b1046d86928d54cd79fb5bb7b46defdf15d2f8578568f" +
- "1d7b73e475e798ec6812586700e038ed4791b23ac9439d679a1a4bc04cea" +
- "e328330c24b065c9cdcdcedfbaf58e5299779e6f48783d29ec3b1643bc8f" +
- "1095c724dea75770583b15797fc666f787510d91e65a8e2090cc1ed2013f" +
- "e63ab17bc7640ee817487f4eac8326e9c4698cb4df05d01bae8c0d00fc00" +
- "08919484d5e386c8f60b8ac097c93c025d74faa56e8cb688d1f0c554fc95" +
- "aae30873e09aae39b2b53b1fd330b8546e82d9e09bbb80132d794c46263f" +
- "4fd7b45fda61f86576dec52c49f2373e4dca31f276d033e155bbcdda82af" +
- "8f823948498f4949bf23a08f4c8ca5fcc8598b89c7691a13e5aba3299ee0" +
- "0b479b031463a11b97a9d0ed3189d60a6b6c2390fa5c27ce27e28384e4fb" +
- "04291b476f01689292ace4db14abcb22a1a37556675c3497ac08098dfd94" +
- "d682401cabec239377dff592c91aca7eb86634e9d5a2848161dc9f8c0c3a" +
- "f7b6a728371fac9be057107b32634478476a34cbc8b95f83e5b7c08d28f6" +
- "fb793e557513ca4c5342b124ad7808c7de9ecd2ac22d35d6d3c9ce2f8418" +
- "7f16103879ed1f4827d1537f7a92b5bbd7cd12d1ecc13b91b2257ad073b7" +
- "a9b1ea8f56b781bea1bddf19b3d7b5973f1065fb72105bb4aeecca5b7513" +
- "ffd44d62bf41751e58490f171eb9e9eb6d57ffebedd4f77dd32f4016b769" +
- "fed08dd96929e8efb39774d3c694b0d30c58610541dcfab3c1cd34970195" +
- "7bf50204acd498da7e83947815e40f42338204392563a7b9039c8583a4dc" +
- "faba5eaf2d0c27ada3b357b4fccd1595b9de09c607ebf20c537eb5b214b8" +
- "e358cd97992fa5487bc1572c8459c583116a71e87c45c0ba2ca801931a47" +
- "a18ef0785ebbe420790a30278d2d0d42a0225d211900618438d1a0b2d5be" +
- "d14f8b4be850dc8cb08d775a011683a69ee1970bb114d8d5017de492f672" +
- "09062d9ba3616e256d24078536f30489e4dacd6429ed37aab9b73c53fdd8" +
- "a8a7aff1b914b9d82d75a46d0ccf85f48d3ce9a8d3f959b596ae9994ac3e" +
- "3b4af137d0c8e07ece1b21fd8aa05522ba98f85a7ab24ed8c1e265fadf4e" +
- "9a18c5ab5684d8ba8d3382ad53b415c73ebfaba35abeebaf973b6f18e0d8" +
- "7f019420eb34e09bbb12afc5b149f1e9e9b6ae36ebde429d437ada1a2d52" +
- "b998f7c75ef731132aafc3bb106a2ad3ae11223a355804d4869ebaa47166" +
- "2df261d95d48ac6eb17c1781e81c0027ccf8f05c39e1eda7793cb16622be" +
- "ce7a1ad5d2f72f8bf4bdb2f4f4dcadac3db3bf727f0d447adddad4500360" +
- "09ee011bf4155e5e46c74b00d72e8e6a88de9a81a5a4685651b90e874dfe" +
- "eba41698c98370fd9e99619ce59ebb8342417d03fc724f9c910ae36ac5e5" +
- "b46c424141073199aaac34232a8e17ebbfdd80eb75e82290de92968f3893" +
- "0ab53dc83ac433833576e86fbabfb9d7cd792c7e062811f4cb017710f841" +
- "1e0fb65ea4b3cd68b0af132cb08330aa13579196ec632091476f268b44ba" +
- "8f2e64b482427dfc535d40d3f58b4dee99053b35a3fed1cb245c711fa16f" +
- "c141974c8db04f4c525205dad6ca23ccaebde585cd3bc91f5874452ed473" +
- "08de95cb6164102744f90b3007e511e091653c97d364fe0cbd7f4cd3249c" +
- "1f5c452becd722ccc8c6b4e371e2631337dff78efd903a8fc195a90ca5a2" +
- "aa4513bc63cd43794ff06c5337329055c43d4fb547e63d6e4d14fbe37b52" +
- "1411caf2f1b0df51a68f677db59aa227c725cf494ccb7f8cacc5a06ac5bd" +
- "f135a2603175a5fd5e5af615fd2e7cea61934e6d938b9e672290aaccd99a" +
- "7e26dc55efe928e56ae6354168264e61668a61f842a581cd0c4b39e0e429" +
- "04631c01320857b4d7e260a39c7fbed0593875b495a76aa782b51fee4f88" +
- "84ca8ddb8dda560b695323cdde78f82dd85757cadea12ef7cf205138c7ba" +
- "db6a7361a8d7868c7aefa7aaf15f212f5f5ab090fd40113e5e3ad1ab04f9" +
- "b7f68a12ad0c6db642d4efb3d9f54070cc80d05842272991bcdae54cd484" +
- "9a017d2879fd2f6d6ebce27469dda28ad5c345c7f3c9738038667cc9a5bf" +
- "97f8f3bc",
- },
- {
- key: "aa3a83a6843cec16ab9a02db3725654cb177e55ec9c0c4abd03ada0fbafca99a",
- tag: "719dbe5a028d634398ce98e6702a164b",
- in: "643883153c215352a4ff2bb2d6c857bafa6444f910653cacd2bbdb50ffdb" +
- "cae23cc297a66e3afefbd85ab885e8ccf8d8f4930e403662fb4db5121aca" +
- "82dfcc3069bd5f90be4f5bfd3c10f8038272021f155e5de0a381d1716abe" +
- "0b64b6d0f73c30baf6ddfe0e6a700483cad0fa14f637afb2f72361e84915" +
- "78ba117e1c03f01fd61aa8f31da6464f3d0c529524d12dc53b68f4d4b326" +
- "db7fc45c63f75244002b8f9a185556f8aab85948647818f1486d32c73614" +
- "b8c4763e2645bdb457721ff3901327588da01622a37ccbbd0374fec6fd1b" +
- "cce62157e64c4cde22c3a5f14c54cd6db63db0bd77e14579989f1dd46461" +
- "4c8691ef26406984b3f794bb7b612e8b160374be11586ec91e3dbb3d2ccc" +
- "dbfd9c4b52f0069df27f04853e7cc8b2e382323345b82ce19473c30296cc" +
- "453f479af9a09ec759597337221e37e395b5ef958d91767eeb2df37069a4" +
- "f3a530399961b6bf01a88ce9dfcc21c573e899b7951723d76d3993666b7e" +
- "24dc2570afe738cbe215272ccedb9d752e1a2da00d76adb4bc0bd05b52c3" +
- "fa08445671c7c99981a1b535582e9b3228ce61662a1d90a9c79afbdcfcd4" +
- "74def2b7880cac6533ba0a73fa0ba595e81fd9a72ec26965acc0f4159ba5" +
- "08cd42553c23540bc582e6e9ac996a95a63309f3fa012eac14128818a377" +
- "4d39936338827bbaafad7316e500a89ed0df7af81be99e2f6aae6bb62568" +
- "1dfa7e100ebca5c8d70f67be3c1e534f25446738d990ee821c195c98d19c" +
- "fd901e7722b4e388da90b95ac0b5b5dc5d052ad6b54f6ea34a824bcf0cd8" +
- "7f1fc9a07e8f5b8aa0793e3c9c1022109a7c7ae97ee2a2867fd0cf0f8971" +
- "34b3d150d3b24fcf8323de929b73cca01244df02510393f0b3905caa0268" +
- "7fe35f64391e7d4b30be1cc98319716528ca4f35bb75d7e55cf7749968c5" +
- "37136eddb149a9f91c456fde51937c0f35e7e524647311077e6fbe7f3c12" +
- "37b9584fcf3b0f78744c7b2d3b452823aca06d144e4463eb5b01014201cc" +
- "bfed1adf3414427072135d48e705b1b36ab602cae69428e7c19d39cbb4e0" +
- "ca26a871d607ed4daa158b5c58a0a9f4aa935c18a66bdeff42f3dc44166b" +
- "a299d71a2141877f23213b11c52d068b5afadc1fad76387cf1e76571e334" +
- "0b066ade8da02fe3b0bdc575b1d9ec5d5f5a5f78599f14b62db0bef7ccc6" +
- "1711482dfa4787957d42a58fdc2f99525c32962b06492229399980601bd2" +
- "ee252306b1464914424de9aa414a0a6e5dadf8ffbf789e6d18a761035d3e" +
- "f2ff0753becbd2dd19fc1c28f9acebec86f934f20b608a9ef735ac91f6b7" +
- "83d9327cce7f4870d39bbbfb0100838dee83e6baf2b40cfc98415dd174ed" +
- "72e393ad0459e8035dce7eb18eb3af2f39d2712846b9e1852cd61d06dfc3" +
- "5e34fb761b67e2a711ceb4a82557371ed32ca8db2e4cd7fea0b6bd026177" +
- "4057b9abc45dae6869cab1097459473a389a80a4523e5de696554f8b0bec" +
- "0ca605e6acfaa00386fb5a48e0f5893860a29f35e680be979cf3bf81ee7e" +
- "ed88262dc80af042b8cfe6359cf8b475560bb704728034e2bd67e590bd76" +
- "1632e516e3292b564c7265d7a6dc15c75ba6f6a447b1c98c25315ac7de59" +
- "9edc4993e4dc7d1dbfcea7e50ebd0b226e096500216c42de3abe352e5b09" +
- "a3c9754aa35d00883906599c90a80284d172a90abbeaf7e156fe2166ada1" +
- "794420fe55b1a166d752d0eb7f04e822d021c615e84777101e7c9f9dd12e" +
- "565b7d093fe978f85e6142c1ca26798b45f4b8d23ecff6be836e810e314f" +
- "ebd2ea66f2ac95bad84b39b7a6bac41448f237b45e9ec579235ba2bf5fa1" +
- "f00286379ec107c743f06ae0d11b57a2f5b32e3bc5f1697aae812d7ca303" +
- "b196a8a43259257f7697bae67adc7f121be561b2d0725982532ffc06cb22" +
- "839d9066dce0e4d683d9348899089f6732de62751ca77f1c439e43054468" +
- "2c531b9c61977bc221b66030f7571dfb3ddfb91d9838529dbc99612f650a" +
- "d72bb78de061192068941a81d6ac341101aeb745b61bd7a87a35a2714d50" +
- "c3eb2c3ea148fb9ebed948307f8b491aec277ac01903ba36e6ad54f89fe4" +
- "280a17f8e7ae639e75aec16d56576f03c2a1efe4af995eb825ccaa6efe0f" +
- "d6d878299a351591d791c286cac5cb049834580d47a9bb7720d0603e3141" +
- "ad7c1ec2dd23d3002e15d73c1828a7f08062848b1b6fcf816bd954743547" +
- "6f0d6f882125bd03095eb1b1a846d535730e258fc279f7095de7c2d3fcca" +
- "a4640a2e2d5ce0974c1e073c60bb78171c1c88ae62c7213a95d36ea9ab17" +
- "59093813b85d17ff106e69100bd739ede9656388bf47cc52730766a8a186" +
- "9dcc623e09e43cfba1f83ae1d9f16789064ec73504c29686760ea02c6634" +
- "a929ca10c6d334b1751494c6d143671ce8e1e7dcc9bcda25af895a193032" +
- "ce27c1016ccc4d85507fd2265ebf280d3419f54f66ba2a161c068491578f" +
- "be056f02f97be745db443e25ed2647c5348f278f4ad8bf5b2a2c2d56e795" +
- "532e25585984a3a94f435ef2742a0413abed7230ff2e9724187c91f73a7a" +
- "726ebf36bc8d0d959418dd586452664990889358c56720c1001c004ff768" +
- "54b9850890ce1b31735fd9f4a3640622ef0b25c659e8a937daa0df7a21f1" +
- "77be13dfdb8f729da1f48e39a05f592d8c98da416b022fd8edab8e6132eb" +
- "a80c00501f5cc1e0243b6b096c8dbe7f8c6ffa2f8bcc7f309fb80b489b92" +
- "c4878fabad42d91876e10ee64ccd415124461cdc7d86c7bb6bcd9133f3c0" +
- "dfa8f629ddb43ab914c0ac5ecddf4398052229876fd838b9ae72523946cb" +
- "bba0906a6b3ef26672c78cb24cbf691a5ec869d9fc912009d840772b7da0" +
- "c7f47856037c7608705cd533918c207a744f75fdfac618a6981778e09332" +
- "5c7d22170da85bdc61044b4c397919d601a30746cefefa798c58f02cb827" +
- "0d130c813cbeb67b77fe67da37a1b04bf3f1e9ee95b104939220fb8a0394" +
- "86ab8954b2a1468016f546406d1946d531966eadce8af3e02a1f59043ff6" +
- "e1efc237dbf4dfd482c876531d131c9b120af8b8fd9662cef1a47a32da40" +
- "da96c57dc4efad707a4e86d0b84262d850b451bda48e630c482ef7ede5bd" +
- "c55147f69e2ff8d49262d9fe66368d1e38ecdb5c1d4e4042effff0670e69" +
- "04e47d7d3047a971d65372126ff5d0426d82b12b253bb4b55005e7a22de5" +
- "6fa54f1dfcce30b1e4b4f12b1e3c0de27cea30ce79b08c8c1aceb1ffa285" +
- "c317d203a9f2e01d542874fc8035b7670f3648eec79561d6ff2fc20d114f" +
- "ba4fbed462f1cd975ee78763c41663849b44cb2827ee875e500b445193e1" +
- "4556bcccfaba833bb4ea331d24a6a3bd8ec09906c7b75598b44ce1820a49" +
- "fca4a0c1501e6c67515d4fa7f88f6aa3cd7fbc6802131a7b14b219e154db" +
- "9ed241133e10ace40e4d963f904dd9f3bdaaade99f19de1ddfe8af2b3cc4" +
- "0a48374dd8eb559782bea5410f8f9a1cd128523c0157b6baad9ea331c273" +
- "311492fa65c032d0d3b513d23b13b86201840d51759021e4133f873f2781" +
- "8f54f34ba73b4f33107d49c8de1533856ec37bb440f3c67d42148765610c" +
- "3296bce932c839fd866bec3762a38406ac2b39d0d93730d0c88cb8f765dc" +
- "d8ee71263fc96068b538da06fc49e25dbeaa10a5111a9af8e8f8d78e6ed1" +
- "3752ad021d9f2c6b5ff18a859fee9651d23a7237bd5a5c29029db3882c47" +
- "0470de59fd19fb3bfbd25d116f2f13ef5c534bf3a84284ae03e3cf9cf01d" +
- "9e984af9a2e63de54e030857b1a071267cc33d22843b28b64b66e4e02803" +
- "c6ab5635291aefa69cfeb3958c09d0b37176842b902da26caae3f0d305e7" +
- "c6ab550414e862e1d13d9bb9dc6122cb90ddb1a7bc6d31c55f146659baa9" +
- "6cca4ea283e5e1639967889543ecb6849e355b6c0227572097221dd46c1d" +
- "f8600b230e9644ba611ba45cd83fa4ac7df647b3be57387b6db12682018a" +
- "de9be50a8ea7d5f7c743bf0c6382964bb385b3c207c0cdd63279c16130b3" +
- "73ba974125291673344b35c8ef9a33be5a8a394e28dc1448f54d46af675a" +
- "edc88ce85a11ad7e50058df4f3f2364abd243683d58a2b13fcb0dc0eed21" +
- "380b666eb87f4be75e7f2842bae916c15af3e9658c55408537b2301faa6e" +
- "42af4d94e3eda6a41d6d302be281e2a9299e9d0fb1f20cf4ca978e66bdd7" +
- "4c8bea0f15c84d6513cdea787dacbd4bb529ed03528284cb12f6ecd841d3" +
- "c58c3a57c6bc19b65d6d10692f4e1ad63b091137c8acacc6bc1496953f81" +
- "2972bf6362cf883bb75a2d10614029596bf9f35e92addbb50315b30161b7" +
- "de8867a1393d9583887a292cadceb54078c9c846ec30882e6ff987494060" +
- "721d3c761940b91a126e8d1e0118617bdae01a7f9c1aa96bdd6c78ca06f2" +
- "6c8d85664a8705334f4997c724ef98fe265985593d5a9c30798714e6de1e" +
- "bd04b648be47a6b5d986a3103e738a5cd114b19b7ba99d2e2eec6181bf3d" +
- "ff0fec8c54ae6118be8702c3e775d493a6fafb509712a43ee66c3f4b75b0" +
- "194c88937cffa5fa17b284d2556f2b0eebf876e05f92c065515198bd5e83" +
- "00d0db432cb256a4a0f9963a05694ffce3ecbd182209e0b7bb50120f6be4" +
- "eeb9d268b17790ee14a2c887dc5753e0086630b3123734053aa37595aa8f" +
- "31968ddae4991af4ab970c1e3cfa1146a2efd9dc42abd6af14777b8a0455" +
- "3865691cbac4b4417b3fa13c154d581b498f3b8cb77adf0e42dc2f2fb521" +
- "732447de97271e542c6cf8cad3ba0148cc3ba1f2983ead836a25a2c022d0" +
- "43ba18fcd009d518d07b53344a5bc4d626b3b38405a114471f75dc70e015" +
- "d11e8f6f57d087fa72909785573008b1",
- },
- {
- key: "1793bfda9c8666f0839b4b983776735a927bdaa3da99b13c9f3d1cc57d4d6b03",
- tag: "bc89cfec34ab2f4f2d5308b8c1a5e70a",
- in: "a09f661aa125471417d88912f0a4a14115df9a3a19c1de184878291acb0e" +
- "89ee1f9d8213f62df442f8969a9a5a7c402fea09bdbe236fb832544e1f93" +
- "9cdd4873802b2bb8fc35ba06b7ff96da6dc7efddfeeda84116bc525a7fc5" +
- "2d84d2e63cbac00b122dc64f2d15b36595259d81a1d2a09f204c54072751" +
- "dd812259df1104bb2d2ee58baee917c5d0aa2649c8a1503114501e6ed6fe" +
- "239847d3d88dccd63d5f842426b600079c6bf06e80a2813b2208181163b8" +
- "61dca07fa4d88254e84dac1c78c38397a016b5ad55a6b58878f99036db56" +
- "89871ab3c321f6ed5895f218f8fd976c348b3f1269fcdf4d38c9492b4721" +
- "6c45f499f5705830b33114d721f9731acf6c69fca681b74c2d82c92e145b" +
- "7bab77110821d3a12cc818d7595a5c60c4b5e5219376c38a4dd52d435d41" +
- "562802ff65ba2bba5c331c333d5adf194d29b2cd9ebb55927bb4ec17681a" +
- "3f5574ad34fb4e964f2c756f6dbbb7a6876a21579a515263444de7a30a33" +
- "15005458bc137ccfdff18a3892fc9f58f1de10d4de20bbcf860f5f036d8e" +
- "8a188f18e5cf7ea3cd260710e7491befcb131d49a28dfb1ef688fd021a1e" +
- "e4420d32fbfb03b47f5e85c37d91e49a1b0db85d966eb5434c4197433eb4" +
- "9d56f2ff999c9a72230447032dc949202468261b48b6ac212e3f651d6c63" +
- "03a06c90bb2d3a755ed91ba73bcdc28e1c5b0936e51e0a9f69c3ebabd3db" +
- "add7abab6d8f6a44daeb3126429a01815f57444fb7022a4a510f8b564ae2" +
- "dd9779b3a273fef15859a33e233724846c30d89fb78a595b6ff6c834812c" +
- "00a991e405806aafd0c26a788895ad00a5e43c5426197aa8247207077548" +
- "ee67db4cd6f878431a2e36e952d84b5fb89d681f553198e2c066310ea6ac" +
- "3a31f5b1792620616f6c41d486fb844eeacc7fd36971abf416e8d6d50985" +
- "c83cc92ea46ac37da8f0026aba30c945d8bb15080d2d95e4081bad626199" +
- "3f95f57ed3252822a7caa035ae22a36c35e280cbbc82d729346cacdb1794" +
- "ae9a9bb2793fd1d5c47121b135c2836063367339c5151b4e35278e97f62a" +
- "fdd2f231d4b47812d083a829ebb9c374ff2ae8479cc4b76d55f9cef3ec6c" +
- "4894f53e8caaeb0d8cd072960cedaf758e48e3640590d4f728626e0a08ee" +
- "ebf719c96bf8ed4d0c283be09c0ae67b609e22d3b9aa6b03642854909de0" +
- "5ed52b39673867bf586a632ab8072de15c637cc212cba8387515c9c9c433" +
- "abd7ba6b02abd09da06a34694ad34f88515b65c0c9c247fdf9819fb05a1a" +
- "ea4728c1182f8a08a64b7581cd0fb2131265edcb3d4874b009aede0e87ed" +
- "463a2e4392aefd55e008eb7ba931788262f56e53193122a3555d4c08133b" +
- "66020154b15643fa7f4f5e9f17621d350ede3dc70be02c59e40fea74dbbd" +
- "7919d1a8d4e22ef07c916fa65e7d4b89fb11a7c24ddc4ca5f43344c753b6" +
- "1331c3fa4558738ba7832b5b2a275bc9b7989b6e6888865793329806cd3b" +
- "f0ba57c941d4428623e062f4ac05e7cd79ad5446f8838f2b247b66bddadf" +
- "540845a1bb304a04b7edbbff579c8d37e2f6718f8690abd5231822c7e565" +
- "69365ce532449a41ae963ec23a2a75e88307dc6b59cbb3fab913e43ed74d" +
- "841ca9f6e4ef96dfd9f04e29e89361aece439c0b2e1943b30410a63d495c" +
- "522ac3ec1b04ec4cb345f7f86969957ad750e5bd7dbf1d6a22eed02f70b8" +
- "1cb5b2b020c0694d7f63044f9de0c3de1ede52009c858992d01ebb92ff19" +
- "a9e0fbea18942fbafb77746c8e9e687dd58ccc569e767528bde43b62c7c1" +
- "270a5721f1212de2b29a7aae2d6ba6cd173d7fbc78aec4356ce2e8ba9164" +
- "d97dec061dd0c3a0e3c520a7611ac99739049dd5825537c70b7ef660046c" +
- "1785546cd99aa400da848eb7c3c91247415c8e245d0f14c30d482c5849ae" +
- "aaeab2568288229b08267818dae8f76fc674c684c99eb5faf88a0783813d" +
- "f7298e0b50cb233f78471e5ca9cc3b04927c26a3871cf253798cc49aa717" +
- "d8f18a1ddcbdc26497d188f15f86ec494dcf8f942c3e07e572385c6fa0ef" +
- "40c0b625f1737543074a747a369482a0b342a08b3eccac9f9209be31aefe" +
- "5a7794974f71ac0bc9a58026397ea3dd4f5e40511d58d2a3b45925c194ef" +
- "13987037d736dd48b509d003a86471d5f161e0e5dd168b4f1ce32f703b89" +
- "15004d8dfc708a5bb02b2e6fb67424b2cbcb31ddaa0114c4016b0917382d" +
- "aad11815ff5b6e37d5af48daa5ef67cee3439283712bc51b5adf2356cb2a" +
- "5181b8941fd78945c7c9d61497683e44fee456ad345e12b4258f15945d45" +
- "b6ca4369ee792d849112d583fdb39cd4d333ee057355f0abc8d1eea4640c" +
- "128cc1617982db0394233dbd416102eec1874081247d2982bbf9fed1b1b3" +
- "8f4da923d68c8975c698f189a4d7840fd7aca9dceb7d91c076f85e1c546f" +
- "4d5de4f60c91348455aaea30cac134c844dad93d583c139dd52b3be6346c" +
- "4d2e6864125c5a2d0aed8f67930e1ebf8700ca88aacc914ea76ff17148f0" +
- "777738cc126e75a2c81110faf02fefc47c91edbab7814599000ce55fe20e" +
- "f313566e9b62457acf2f22e1141e220bd9d4747417d03e703d4e39282803" +
- "386327fc65dd597f723ee28185c78d9195fc70a75706c36287ab9c6e00e8" +
- "5cecbbd6043c6af8d30df6cdd8777be0686853b7c8a55a5b1e03e4431d39" +
- "1725ff99875a85cae6926998723b36d13ad458220712209bfc5e8d2ca5d4" +
- "4ea044d5ba846b4035e7ac7e9885f55d3f85c0c1b3d09fe929a74450f5d2" +
- "9c9672e42d3f59be4ca9d864a4322cc454c2578493bd498a51bbe960e657" +
- "3e5dd02c4a3a386d4f29e4578a39e9184024cd28d0e86ecac893b8e271bf" +
- "ce3f944d130817378c74d471bd20a4086f2429ed66c5c99969fd8da358ff" +
- "5c3be72bf356ae49a385aa0a631b588ddb63628fd162673e915cfc4de56e" +
- "ae6ff7101df3b33125c9bab95928f6e61c60039b6cc07a66f9c733251447" +
- "ef9c1ffefa2158a8ddf89dc08686a4cf9b86ea09914e79842d72a3236afc" +
- "98a3afa0a1cac5590ab6a923e35a2ab8db6410a9d33cb84d1c48a054377e" +
- "549774b25f50fbb343ecd5db095155cce9fb0c77d09752f62d4bbf16a770" +
- "30452a75f6bdf73f7807d8f3a6bae16ad06b22175fee60549c22548de9c1" +
- "3df35ef4e7bf7b66491a62b93c2c3fb0c5edc51f60f5704b56af30f1079d" +
- "7c385b99f958ef8209e030e381d1ee8d67d3cb84f32e030e8ea2c1d0c77f" +
- "d6b242a9f48707557c8682a08e1127f51221a55c733ab1edd00a9c2912cb" +
- "36dde85f73b524e1a4f4da6414c5e4c18d9537722b2becc8a91bcc63f2b0" +
- "9f32409c53c2beee0de6726dabcd6bf33118a5c23fb9c5c1810476efe658" +
- "4bb6109c516b45e16b2f79f96755680374d82b91f2c519639a1815fd485b" +
- "a3c00b46fbefeafcf25554ec5a6a5ae2da07c85b8a0f9fcde50263d9ed85" +
- "038b2f7aadb9de765655bd201235218bfc74bcad6a9ddf4506167a649afa" +
- "df400b85752d68a92b7a97f26b334dd77fce824862046b286a7c8e0adc36" +
- "f713a252a673d4d995b268badf4bec8b8eefe85c25b823b6728582d35c4a" +
- "60041114dab72b0623b99e2758f6a1e97365279bfba0eb1fc8952ca4f2c6" +
- "fbffd9f5fd7dcad1125b18a796981b5ead0b6431141315898ace96f0d38f" +
- "865698df8822ca7b65644b6b1f0a0f0d2e5850d4c93ec48ca3eba1b919e2" +
- "4413a46d595ffa427715e499db3b7b9ab53c64abec7302bc737a5bd124bc" +
- "da756abbca132f7f67e6989e09bfb23b497da31bf156bb9c69ae54588df1" +
- "7420e8fe989f0472c8893b2bfe57cdae265a8cc7aeb39624167a567a6fbe" +
- "bb1aa30c3dcfd14f2808a070994085e6e1fa79021e77c399f90ab1f995a7" +
- "baff672cb693bd39b798b4c890b7d0a57978d6b9bcdc5bf3f4d205f8f24b" +
- "2b43d3ae300a96971c9182be297618b9adceebedba1ab0f324b01d23d7e6" +
- "35f009db3dbbc643c2d787567594bc639bfd78c4f3e6d948caf06f013423" +
- "eb3c764666b58f886d5d28137c053c2a28535efcea400147e92ac6753574" +
- "3b47f9cb48852abed1d057647d5b1c6f334eab1a813401fccd3dae332738" +
- "776bb223e359f3c459b5c573ba64fa945bdd66c5ac0fcbd53b67032a7b80" +
- "25f551e8d1fd2a4291bdb7941cbabe3a09765dc263e2bbb6db7077cc8fe6" +
- "790d4bed5e36bd976d1e37dfdba36aafcdaa10c5f3ed51ba973379bcb8fd" +
- "203d8b7282abbd271ecf947e54486e8653b7712c9df996a8ad035f41f29c" +
- "ab81509f922c67dacb03f25f8f120cb1365ab3c1c286849c2722448ba9bc" +
- "ff42a6b8a7a52f2c79b2bfcbdd22ef8a5651c18879a9575dac35f57d8107" +
- "d6bece37b15d7dfff480c01f4461ef11f22228792accda4f7936d29d4c56" +
- "cbba103b6d3e6db86e39e5f1bb9e9fd955df65b8a6e44a148620f02b5b90" +
- "b2be9e5bb526d0ec75b1e723e94da933a356d7ca42d0ce8349699f730b8e" +
- "59bac24a6b633759c88041d29399ce60a2ca2261c7eec1acb9a56e0e65bd" +
- "e37653ce2cf7eb83a4d019c755bdc5d685b6394ecddb9006823182dd8138" +
- "a1bf79a32d07a8e5e8ab221995c714e571b40bb255b79e328ab883542c16" +
- "4899fffa16eb3296f310e302512352a864fd809beaab4169113027c6ccca" +
- "99a92c6ce35c30f9449a3add70f10db1ed08078e8e6cbaafef630aab7e9f" +
- "c8adb09c18e33fe1af3620d1e4d069ac11325e23cc18e5519a1ed249caf8" +
- "ddba871c701f1287cc160019766988f63e089bd9bf1af7e6f5b9002e3b6c" +
- "264d69a8bac16914ab55c418d3a8e974677cdcbea36c912e90386a839a37" +
- "77b878e680c07c7cc99f42a7dd71924babf7fb0627d1f2cc60d9d390d1e1" +
- "50d47386be6eefec9ddbb83b28fa7e2fd28cc3867cbe42d13b00545af8a0" +
- "48cc07016ec79808b180e0b258c564739185da754f2e",
- },
- {
- key: "0d41cb4ac25217feb20e86fc2490e8d2ea2e8225c051252a9395cc4f56e1ae5a",
- tag: "42df9f9a59d6dc05c98fd9e9577f7176",
- in: "01caba7a19cdb09dc0ec6c522c61c628eacf17ef15485aa5710fed723875" +
- "2e4e8e93dd4bbc414e4c5620bab596876dfbea33987e568ddabf7814b318" +
- "8210a5f8d70041351e4d8410840642a29cc8d901c25fa67cc8f9664ea5e1" +
- "9e433eaff7c722d0258ae112b7aca47120aa8af4420d4412a10732551db2" +
- "cd3e0af6e5855d5eea61035af15a4d0d898d04033809e995706eba750a7c" +
- "ac07aaa0dc71477d3020f778d0347f1a8e37c18540deb9ae967e734c0264" +
- "df0e1f52b0b5334805579ea744c8784c3ae0c3ff8217cd3f53cb747f6996" +
- "f3d2147699799e649061b205f97f7992e147fb20f21ff862c6c512e95534" +
- "f03075e8e52f162e0d70d7a259e3618474427f400f44f75198edebae6e40" +
- "a2173257d114e1bb5a13cf419c821eb124d90e89a938d91f4d2e70dfd1ab" +
- "60446f1b602614930a329e98a0c30f107d342281db25b8f8259933e14d20" +
- "8bbd991e42969e8b0600272f9bd408483cddfc4cb8dfe7bc19be1989c7fa" +
- "129d38e1078d094b82e0a845040ddd69f220dc4aa2b236c44101d7da7779" +
- "9827a7b037561b51e50fa033a045571c7267af93b96192df3bf6180c9a30" +
- "7e8c8f2b1d6b9391767369625015da02730ad6070df4595eb8099bd8e484" +
- "59214310cb62c3a91a4fa8ac3b3d7b2017d4254fb465f0a248e1bf45819b" +
- "4f0360f37c9a79d405e2bb72e5c25a1b4df192cfd524d61e1e8b274f2fe0" +
- "634c73f0653c7c9e9062c9d081f22a8b0327897eed7c6e870f2815bbac8f" +
- "585c1bd868759a98dcb5c3db2f6c53244b9cc494a56f28a9ba673167cea8" +
- "b799f37049ee7b0772972b3a6603f0b80eddb58ef03f916106814d72f000" +
- "250b3573c97c5c105910d79b2f85ad9d56002a76a1f43d9d1c244ef56d3e" +
- "032a9bab95fe3bd5dd830ad7d7e341f28b58c0440658f7fc2ca98f157708" +
- "1c647e91432cb0739d9acdbf973ceb9b0047634d695279e8837b04dc5357" +
- "f013fde3c55c9c53bf1d817ec59a1b18ed0ac0081ed9bbb3bcd1a5d3634f" +
- "50f7506f79dc6a4ebfa640bf65682fe9aeca68088e276937669250064de1" +
- "c19ad6d5c697f862114d0f81d2cc52be831ed20d3aab1e41fe6f476b5392" +
- "af4799392464c51394c2d1a8325ee2e84f1635d295ee663490e538eb338c" +
- "7126a8e731ad5c0becf144c7a9cae5c6493350b589385de29e1a0ad6716c" +
- "346ec4f0a31ca5ea35c59ab6b099f65d7f0b3d00925a1da1b5777c029aea" +
- "9679e895d7100645dc83f81d82a6174beab2357f7888ea640900cf3ee67a" +
- "e0724a123919d78e70e05288f67e5e69ffa6f345be8a96e58bbe260184b5" +
- "ec5c0c1354cfd516ebdb8d420029137d41b029641959cc07fa7b4e16b39d" +
- "17f36b2367057410a42e0550e9ec1dcd2df4604d52d4f9dd1140d57af08d" +
- "50e1527dad793b6d649324de799754f755818bf10e6d1ab614958dbb24ac" +
- "8e2c01270a90ec3df4379c3f509b5ef721b0fd4f91a1bdb8127ae4dc74d0" +
- "75f6cd8bb28319d6f8e8d8ff64fb4a42d646e9365156c6bc72cc46e9cd1c" +
- "f9e735549e3df9a8e6b5fe541948b126190117db71fd1d61ad84be0f725f" +
- "20b99eb141b240326d399976c4f2ce5823d94649a9580e1e8820bf49184d" +
- "fc34378a60bea89b12aca69cb996c17847b7fb517cf2d51f16d78e3875ce" +
- "aa33be15f6a154004f0e1134c6652c815c705efc34bcf35bd7743d28f0a2" +
- "77d82dea4709dab41fbfb4e0cbc118c17aa00808872f0edc6437c357cd31" +
- "74a02aee61890464e03e9458853189431bf5df6a0ad5d69951e24be7f266" +
- "5bb3c904aa03f799fe7edc7bc6779d621cab7e520b5994f81505d0f01e55" +
- "96e14b4c1efdf3e8aadee866c5337c1e50066b3acc039c84567b29b7d957" +
- "683cadfb04fb35402acaba631e46ca83dbdd8adf28e377ec147e4d555a21" +
- "e6d779d7c5a3078ab72702234d36ca65f68bd01221c9411f68f32e16ef04" +
- "99a20c2d945fa31b79d9965853d38ada9d48eead9084d868c6bad974b0f4" +
- "0956aa0fcbce6dac905858e46c4b62c0ee576b8db7d484a524e951f4c179" +
- "decfc7d6f619e86dee808f246dd71c7e0b51d28bc958110d122fa2717148" +
- "77823242711632f6e1c7c15248655ced8e451a107707cec8c84929beece4" +
- "efe5503d3c1763d0ab7f139f043e26027d5e52a00d5414dd98a324a8fc2a" +
- "06a1345cbde747f41099c3377b86bbdc5a17c8f6e5b773a761f78573832e" +
- "4359b143810361dedc79142fffc49ddc0b32f225d50d360ceec3920fb0ba" +
- "0693b644ee07fbd1ce829e223a02794b197614061c4bfa46112d105c2b7b" +
- "4efea448501d146dece44f6640d674d5749db498b32969de6e165e705a18" +
- "2aa1f3d8e16892b0120337640d52c9bee35e5b4b17f03eaeb31205c8ecbe" +
- "1ae1b110023016e40ee87370a65c5c20bfb00f100d3c6c1de6e4a1c90162" +
- "f25bddbf300ed637330206788a4ff96903f971c9618493ad074412af625c" +
- "ff9e0f8f183bbd5e96c1f28307e6cae8b50cc0eb1a3a8154e44e9de947af" +
- "002e4d1098d6b0ee3f2e71a10d03eb444729c42461283f37be8af2ce81ba" +
- "bac246a05c2c94efacc43f0cf9ff3df38ab6fc1648c796ae7026ea95752e" +
- "b70873a6da59da10d8b5316126431c4a17289466e95dc739c061d7a4b13a" +
- "450809479eef421bddcdade77a6df133410328c754af8999a09b1a5c056b" +
- "ecbb6fc2c339586ab92100f46d2fa1fa689994b36aa70703d76bf7738adc" +
- "f0589fdfa6bd215339ad69ed983f62efce0add5a63fe7dfe4bfa006ff16e" +
- "0cc06d39199ad60adcae12b75ca98d764502a783373da3a41281e03c2037" +
- "e1b3ca7f7eb60e2b67427e97ec72d36670db7662c6daa505701fd279f116" +
- "ac0ef569471f204e1531c25a4ac3ce19b6f68a8994b6f89b5abf034a6507" +
- "32c7fad4206eb4eaa7cd9a710d866bf3c3f13c16faa268ae0cf4f69be909" +
- "bb9b79aab80dd25101d4cc813a48d3f38d870f10ac0b6768005aa0e69e87" +
- "dfc0424deef06414c9ba6f498c93c41c692a7a6221fb5595b390a32c70e0" +
- "2cd64471c797ee8a143725849c1e054ee2043dcfc0b4cb1c00be21a14be9" +
- "2d9a07f1b4e975d4c86b8a5c1387e6c42bf393e078fe86d24612d497e14b" +
- "874485a3cc922b5b6d91295d7b79ab8bfa1c7f64b51e761d19bb9da82a5a" +
- "a34aa469699036b6b2c55e2b84f84942f10585027ab07e2e0e562e0fc3dd" +
- "36047850ded84be4416e22aa41c7a2f7d4a4d8e3dd420d746a1d8d56d87e" +
- "5133a1b4380bd9a89500fd6d7e68a1ec02eb9e79e4a13edfdde1273466e4" +
- "6b0e6a75f59ff6175716629da52463ad21de27f40fa2e25a566eec4b2696" +
- "4af3a717dfb0170a73144c0bd9b00bed67ad8c0a146eb5a055812d071209" +
- "c9d530cd4f50a41488c2238898dea8bb36b0f1496d3ea8c4ff8e263b367f" +
- "64977679e697d88e5295bd97ac16a0420850d1ead9621e25a3f58925c266" +
- "ef5246488b1c15a8fe0d8ec4291864faa5a67b2388b7786f47b6d27e8fe8" +
- "46f85f85163e54155ef95cea4901e712a44404a4d3f27f28dd961ce36b84" +
- "f3856770f07f20a2ebd34d77405beab04ddfc09770167d7d6340f494dc6b" +
- "7e4c3df896bd974730193b1e862b58d4a5938e6e4ae8897dba8812924379" +
- "e54f51a71364d39f76e24fdf2c6c704479ce85b456558ca6947b8fd76f03" +
- "78273f0a7bcd1d860ef1defe4eea8fdb81c73eda028d82fdcb2248582ac4" +
- "59eb7698a811e6c5823be886410f6b8577ff2e8252343b6ea890016ae846" +
- "01c5894cfb988121059fd9c8fbc1596da470a149404fc67baa15383d38cb" +
- "d17ac107b4ff3c1ca4c76b7930de02b240e7547d39f4978e0cc1fa37f8c1" +
- "012b677f07bb4df4486196e9b0beb823a3827585475b878e3f6f0a2d3836" +
- "2c7d34f9f3c91ed46c39cec95c2a0b6f0279a03a00ed5035b0725c393849" +
- "cdb1ed3c0ecbcf3c2ce108017f468e1c3d469c03e8231d4195344ced70cf" +
- "daa667252cc1554dce8d0c54eb4cf4da62367d77d7dcc02f81e788ce9f8d" +
- "d306ba1b48192359cfe92bdbea9980f87ea0677d7d2082205a436cf514e6" +
- "fde5eadd21b13dc836ce33b5dfb6118bcac79ae00fbb16d61f00a923b145" +
- "f9caa9f3a2c7f0104f8b052e390987e57c8dc80cd5f0358afb0111af1fc4" +
- "e31f92bd832ad35fd2e0bdf768272de52ce0b152f74d43a8973ad516b3ea" +
- "f5937ec8a236ebc86adeba610de0cf7168453111f3c983b64df07678cae0" +
- "a75466ae15adfb127328e716448cdbd2c1b73424cc29d93df11a765441e0" +
- "0eeed72228e1099bd20569d9d0e9e5a0b3c11d0002e2896631186483db61" +
- "c1a0cb407951f9b1ea6d3ebc79b37afb5a7037e957985e4955979b91fb85" +
- "61ca7d5e8b9cdd5b7ce0130a880d9241027b011fea7696b0c695d4949ca2" +
- "d0cf22d44b9fee073ecaef66d4981e172e03ea71a6edc7144393bfea5071" +
- "2afac137f091bae2f5700bfb073a6d57fddcba674a899d7349044a10aadb" +
- "2e7f547887dd2f765f394de5dc9ef5dbf1eab4d869be8cb68aad8e2614ac" +
- "37bbf21ccd5a832ee09fdd07ce50a580a2af36256b1046e646fe3dff6d20" +
- "0c5110f1ad1311bc39b8114cd11ecdb87f94df43d4f6468932fc0ed892d0" +
- "3d8f3db3f8323ebb29776ab7d260493a36700bcda668abd62126a8189e91" +
- "df2d2970ef688d4e8172fc942e69ba63941a36b79ac546fff38f5f7d1176" +
- "57612a662ea38134e1090c3e903c9adacdeefd3ac2a0467e9f5125058c19" +
- "7b2260d2afad2b0e627a9ae52cd579ee27168065658089e1b83a2d8cdb47" +
- "e08966e4ec0018e78c4d267f9575b8fea2a42de5c2d25356fe4b8c9cb1ac" +
- "daf0d1af4bf58b9704cd4bc08471e3b9a0e45a5693433ede2eb1374bce44" +
- "1f1811cdc7612d7bb61f4f34aea0a44757bbcc12a55c1ba41a7901eb004e" +
- "689587a38e5b4df4574ddcc7b2eda97f6e480d7d39f45247ea3b03c90a93" +
- "0dd168b65d52a59ce9c2cb4e860cc6aaa0ee02a58d0c8ba990194bce80fe" +
- "8c34ba5693fb0943ec2cbfc919e534cc47c04f502b6c217c2f860d1d482a" +
- "a016aa02adfc2bea3171fc4e27e2a262fd37b824099aa227fccca508f778" +
- "b8c6ec7aaff1d15f6497753f439daa9e52060fd6e9e056e6843d770fb057" +
- "6d9e2e782db4843c0c2c7f408a17376719a3c5cf9fa08f04f8a779885a16" +
- "5cf93ce404be",
- },
- {
- key: "ddbd5d6c5ebd61fa72b453dd849dc302c98a0f3e300f4768bf1dc698a3827dd2",
- tag: "af608b71a353e63c64911558baa122f3",
- in: "c67e2524b0de16483158a0232078fadcf611e4fbdb9e642e397b21222423" +
- "cc2ed42ed34ffcb178448919ee337eff9d7d691f622e70fd3317cfd271df" +
- "fe6a9d9b7e07db0d20813e2331164a654386db2ab06ae2983bf2460eaaa6" +
- "3aa0171fb87afb82e85b40d95c8993b2039d32e9d38473dd13f41fb1ff1e" +
- "261752ab004b221a4472b9b1a0e139f0c999f826a26a7e7df362b0611aac" +
- "fa83c55cca2f7c0138d2c30313c2f6eb357278328ea6ebd6a5077947e18a" +
- "a97c34b9dde3b6f2de4b83778ffcebc8c9cb58756691d5e2a3d15a759a2e" +
- "5050b6da937a6f5551aec069a08027d60dd870d175d2a5b5f0b4f3143904" +
- "7445c368a5c866370e9426abbc1a1c5a272b96731c4128aedeee93e8e00b" +
- "b450601a6d31ea279b9450e738b4a47c0dc22d2d8ed5d44257f6318e0c59" +
- "b951fb6b57746062ab95cd73c23ef0a5c000a7d14c18bfff172e59b6f6de" +
- "aa61b81009e803eb05e24fb0b706870e18889a9180ac16a042d12dfff9d9" +
- "1b88130f045d2342fd5ddc5f443681c31090459f262d1a65654c55251fc7" +
- "d5a67bd2e62940ccd606f3e50700e4d1e992a3fdf0388b9ce3df9de6dda1" +
- "5c1cd6b70622ac062dcb7ed7058872c00ff3df94032853927126cf6fa4cd" +
- "c468d91c9b52dcbc272fd7ba920dcd3ea1e048af9c3286dba74d988ce9ce" +
- "77174e25a87935352721dc23b60a9549322fadbe6a00dd1197dfa25b33fd" +
- "9e5713afcfd0fae6dbcf27147fa58d995580d7e0a903c895752fe9819f5b" +
- "b002ed752719552d0f3575312f2e618173a8ae7c147ca64a709053e5d2e1" +
- "2f4d1ea337afa9ac4f9ba62760046ec1e48f4ed8f6df66786c9fd9f5bc7f" +
- "9ca2526e1327b042f4657c405757690e190c91f260dee2dd3d2e6616b721" +
- "e489c7c3cb828478a3d953b88f09904e7927cdf6dbd6a5419eeeb83c0be2" +
- "51934a80dfe61e09442f0761aa2d013e10aeec3a32df204571ce8984a430" +
- "9bbe30ccc91977790bf0305d2651ee450b749c3e7761534e45970e70a0a8" +
- "473cadbc88f096970c275f188c9d2644e237fd50c2e24c1eabbf7578e80e" +
- "6500762ac513fcd68cf6f8bb7a9d9eedadca059d9ecec07fe6fe7792b468" +
- "9311861728dd482f087c28374cf9c5ea20b2c8630029e8485fa6fe518c74" +
- "ef77d44eb7526ca764e50b5f34ed0f253a91fb2af6e59338e2af6e041e01" +
- "084e1efade1aebb7d1b698ccdb8b4248ac89cd40d9517d840960c08f5e86" +
- "88d8ba2b54889c1870d315498b70e0e9720f2c8c53a3377a8c0bd2d6a1c6" +
- "f17c6ff847eb14def6855dc3886b99039e528b421ccbf6064e39263f8f3d" +
- "340d5d20b1b14c264ac2310b5f3a0c6f0c1006d0d4f1a69af68d28ab447f" +
- "cd17387e1fc98f164982a6d05dd32d6b4f0f1b04e40c6c6e0fb4467dd6b1" +
- "0c5a9c92cc8c2bc97ef669b6d55cdd0aa8a15c46af954359165949012713" +
- "4ea9f74181d54a300d3172c9f01db73288ef6a709c763a4891666d0baf88" +
- "8531dcc77f0911412d096aef9033fa36b5c1ed283b8b5c109e45b5cde911" +
- "6f3da2533fa0ab81929bd5783271d5501a9e4fce2aff9eb5a70a4215b253" +
- "46885d7e4225fe34bb55b309a114a312693d60ccc61267359a8c2dd28141" +
- "226e7cfd99f0f12c69df57d75dd790dbabfe3145f7fd1a24fa58e03bc2e2" +
- "6ea19288af4929e5acc517d8f52a074745ff4644d94179eae6ba7d267292" +
- "bbd2053167a0da9be5e4b6cd0a4200fcac5182d9957dffbefa857e662b82" +
- "fc3a7cc32506e78030ed5c5d448d7f1b4fd854a735a0c50016bb85e6e716" +
- "0f87527bca0de235f4b7dacb75be84919c15a5b8cf6bec035795cb67061b" +
- "7855c2134c1b1bfa6affe04b7db239f73af6ea9c02bc9f7972b7f6400b6b" +
- "838f4653aefc42179c21765e3ca7a5e96b4402ff544d4bc2332756a23500" +
- "11241dc42ec6848afe127c00b9c333e69bb5a54ea5c7193e59ea22bd6d32" +
- "af4f56b1bd2d5982ef7d9c1b02d7668525e4e81b68a400f7afc2653f0f41" +
- "a03e11c7a02bd094830093481afbab96397245b9f37a568ea1c4ae248cdf" +
- "afc87f88b1fb5dc300d8e9039af4e6e701b458ed3f32d693f2e869b76bb5" +
- "1358cbbe5b5089013bf452734388a176cccfc1ae9b7cff603631ca48e129" +
- "b5c9573d4e379547272cce8aeeeb407d3fc57f782a0eb5fcbd41e6fb13be" +
- "7e4f1067cd407b42a6121b2969c384916ba2b32563e659f52aae09c8ce2e" +
- "3c500fbb7e58be74cc1592dcfacd9f0d4cea1a90a18658147c81cccf6fb3" +
- "078ed27f369e7646f551386a74e1b07074d93e0c1f298c761af46cdaae9f" +
- "f4be86808b66d0e228016d27a3a77c843365cb847fddccb0bbcfb3b9008a" +
- "1bacac59ffb0aa759a0568c72c556caf0ac1091431b574687c5fc7bd486e" +
- "963e0fc3bdc828d988734a21070747c955cf8dba2df1c3a0ba8146cd58b5" +
- "91b6d54712db67a9851b1607c8445bc97406eeb7488f5f85e547850d619c" +
- "407f97632ca1801f52c09c2b314b4ab0f8e7fb5851fd60852f4666913ca6" +
- "bc840c1ec8f8f06caefdbfbf02ce00f20b87b14ba9e651c80f40a31d0306" +
- "403f541776075fbf23733a6b19e3b44d04b455b29ef8effa70cce0c59331" +
- "7119abc07aa8c8d0246a760b0b36a3d87b244e83bae8a745b8277a531298" +
- "f5d0283498a509c89898ddf0f7a7455be1f8a6889c46d323f1dd18c3babe" +
- "1751a05f871f0639f50967afa46c19cb93d9c2a79c81e2436a7a62f225bc" +
- "37c90698640f5b43673e1dc276de05ff1e29acdb4ace5121659db5f23c49" +
- "57aae22f53e6f2cc935824fbd07c2ac87672eeeab895c3f06e09e178560e" +
- "2fcfa7097f10201dfb8b1ebac08ca806c1b3ba3aff9284846a1a3beada53" +
- "e9f7ade12eb89b5591f462b2543bb4090e081fee9fb53bbf821dc92d6b16" +
- "fe820ab2ee4b1f6c0b6a6f19edb0bf6479e257fc73bcd60dc2261d0a4752" +
- "e23a0be18abf355f3065177d8c3c14e21edc178d0abd1b39f703e6335131" +
- "ec90cba3d9846cee7354a06c320a3f61b8a269abc7138831614f57ca6c19" +
- "a4a621142889cd924bf4ffb82b57f871b854f3157e8874c22d43a5726900" +
- "bafbb8f2260a1eba3a462e23d4def2ccf68ebaae8e52739a1ce67c039eaf" +
- "9a6c3232fbb5a91d1e59a8dcd3798ba71345fbf83d09b83b41cc49d5ff5f" +
- "2e809d2b1d5fbc1e7001ea76b9b2d8f896eb6609e2e1c5c562d2a6e74960" +
- "2d67a0f6b43a201d5087509b8dc7b0440144e308c18ff8b96b607de2f20c" +
- "6ee99bb05367a8b25947011889f724965a2b5c52c9db1e0622df9343c548" +
- "d054699badeb15fc41055af0d79a2bfc1a5b4574634fa0dd9dd10a6213ed" +
- "b6991187dc560facdc27440456a0a209fd7f5ee4fb350ae71f869723e5eb" +
- "5338e3d1448bc993afca6957f4cc7b047a2c7c9593b7234725e66cc0eb23" +
- "3824eb4cb905701cc522ec210950b871397c6c0bb3d0b839f2eb1a120f70" +
- "36107246df4dfb2c24891bef0bd1dc131f2c9d7c295ee967e3184d963037" +
- "fcc9e0b8c7011c8e04b4e70038150d34caab4f8c0230418cd2d8a91146e4" +
- "4e11cf6707452ddc03d9b4e6380658135dfb48f62c0690ebad75167f4dd1" +
- "c0df3ed555b5081a7b82616d9e501757c83c2193d0f640236d59f9c97a4a" +
- "5c8bf532aea2cf5964ed2dbd8a70c01ca5c7677224cf2a37f3b24d8fe4ba" +
- "91cd3b5033715de227de51deed15afb8eda9d2b9615d197b8f98322d7096" +
- "79c5131eed48050fbe0145a9284e236605c25a4876e2adba42f4e35a8949" +
- "3d59bbf44b3338d9d2e65a7d7ec6c863cd47cae9e23181b07298078a5e9b" +
- "06a5c7e1059f474eb1a4247e8f02cdd4efdca67d22035b12abecf9b15982" +
- "de4932a28e797bc4de38442cff2cba263eeddba0ab14fc706dbca04eaca1" +
- "b4cc13000a10e35b32461424809b299798e4d8e66c92aa3181c5df16ab65" +
- "9611cb625e895a8021af8c60960227d6f2ebeacb17b13536a5ff139734ef" +
- "37cb67018ef9a410b856e6f6eddbe3f59b088d538c50a8f3f0912d06e47b" +
- "88d773069aa759cc614e1f53cf6e572c127123d1ab56b79ee753a921cb22" +
- "a60e4e6cae768c9966de4e2625484f2e990154da7fca84b6e6c0b59201e7" +
- "fb8a729cb20b4c774381e84f1bd6e304543d952dc76ef741b72f3a4ca7a6" +
- "ea7958b8b6337994ed82dcf988eb70f509610b9a279ab4d0f28cc2b2dd99" +
- "3b8637a6be0cb4b5f67c79654c6b15e1b61120374ba9b974a628c547f11e" +
- "52d72d39f8f9c5dbfc23a89f22d38984dd8d5c3ca72cd54e6adfe2b3d163" +
- "86afdb50967846a4c311351a51e5fd322757bdb061d44c8796a61fa4db36" +
- "793bc11984eac83bbcefb40d0bc7bab0ca81e7df3a7f58c6fe800396716d" +
- "832acaddff6d72c8e19dc9ea838294ead800deadb6bc18d3e399fa76c46c" +
- "5d88ee72a86a87399423b0578eb6e27d78156ea2abf6f08b5cbf747f2f74" +
- "5301b694bfba84bfe3c5527acd50660eea5105a2644c1aa92f954a604fb6" +
- "a1b3b2d0331497deafc3aaadc7040b9188a36cf607ee85a0655ae963fd32" +
- "91dd58f8bb50b4e46dcf7c2957639bffa6b12d895660dc0323b7a092f999" +
- "813380b820e1873c60d3e3038129c66d507862100a5d5842150869e7873d" +
- "6bb6ad022350ffa3813aca26c80ccae72692bed9c77c9d4da23178c57153" +
- "90b5f4505240a796ec9d10a7f280bd60a570b1b693453807707651fc0464" +
- "03e4768965a6f42f112152942134f0a38c84137c7a6e086ef1ab9ad20d24" +
- "3b93356b305c0996ab7d02c02c44cbaf8f7e60b8c0b8c9fece3f189b099d" +
- "dbd126b7357c1c4ea1c8bc1ad93db91ea9bf043a4320acb60b502bec37b8" +
- "6b2a5004b8225e549e613c6f83b97b7e4aeda1b013e0a442d7ce2f14e78e" +
- "a94bab700c9ac0abba945e28f39fdadff223c4498cb204f01ddfcb450a41" +
- "f32ae47f99a49114c6646a5cb103e9cd75f9d81dba417e48c4053e3b0295" +
- "2267cd30589b0f5d993a5485a6ead1ffab9f2f4294c5853ba76383a326a6" +
- "a42fb8b78948aa49f0f1f614bd0a3fbd2a58a3197daf2094605bd838285a" +
- "1260f1265dca74aadd95652632335fd17cafcb73b202c3f0e5da836c2dcf" +
- "2934f005935dca80154af43fa34c8ba440d1581b74ff17dfaca369dc9aa6" +
- "734c03916d78e1b952691cef918fe033d33f7f4323cf724ffb8cd6c219bd" +
- "046e9f268eb0601098e93daa59dde370e46269dd7c54891f71bee2829a53" +
- "df86a2c7fb1046cd7c98fa21cd83597be554997a70acebe0b6e60f1f7098" +
- "6f65adcae24385cb7102bdd3e01300ffd15d00f9764b3a5c51e35e5c9cdd" +
- "da84f4b656fe514ec4ff8dcd774373f8a9103cf36abefe875f7084b9bbd9" +
- "42e0c997ec2d860a4b622ff1a39a628582fd81f237d3d8f6843d26ac77cf" +
- "bd48003e8e8c591ff813a9a897e3149ff0297ff476299d717e54d885cdd4" +
- "4c3ba6ebf54bc7a1",
- },
- {
- key: "b15578da1020f662ada0ad4f33a180d9f8ad4991b3720bc42a22b52625c7414a",
- tag: "b0e4ad4a010afd6dd41ed82868cda555",
- in: "6d2afb7a9154064341bdbb533f11990d4987e7c90fbfc0167c1e58d6efff" +
- "6010f7ed569dac62ad37183b0d384519ebed0bf9c6e05a070b4858e6b846" +
- "547ab5e45619c866f83cce83dcdab6a8a6c36b115ac832de1c6d433b94fa" +
- "35803fa1a36f1ee114f8632402a027a74ac110394f32ec4006beb0057f09" +
- "a94dada8bd0d1ca9a14b1f2efb8f526d79d6438bbbaac0ca1a43935627e5" +
- "d129d52c06bf6413af07513bc579447eccc3a9406645c94dae59dab98d6a" +
- "f92fa90fd4efaaa4bec466806ed401d2083cda587139ad7e9ee2adbb1dfe" +
- "a88b59dd788b954a0f52c3854a3fffecb4bea83debbb2f5f8883e6415d3b" +
- "ac1b872df1afe185468adc59364c173082f1dd6da9d348f5f5ba2d216243" +
- "23de1f623eeec875bf31d12acec40dc0c1b9562826f3105cdad4c43cf45d" +
- "829aa8b14012c47847aef7a2a6e3935fd972235f5d3a7ce4ad3582785393" +
- "602e2e27329914021eff38ed2926c88acec1551f17a1b818fc1c3ed4b3b6" +
- "6825d55bea269d710123b52e12ca9520a069d9c6a21df3a0253b3a4a6a8c" +
- "dc226d667541548834da6bdbbdc165f39e40047d4b647c507d981be17b3a" +
- "836063436241a8bb46b11a2867b621413c42d838e4578b72cc1982e34bde" +
- "c303b5575ef4b8dd9fea8ed5bf69539413909d03461d3853b5fbf714a61c" +
- "769569f42b38fac4b849104e2f2ac1dad0e388646278789f83e0b0511571" +
- "019d3bfc5b03ca4cb5564e4e75e103ea1b6000be6588e27105d7cdc2d2f1" +
- "f680ad34ef823ac4bd4068146e9997834665aec7dcc7a82ff28d85d52dd6" +
- "9c18dd35f326bcf709f74df5981bb90ca8e765fef9f0698a19e12220b287" +
- "24a6d9e4f4c7ce93f8ca9a126689ad1df820072557ce3db246cdf41599dd" +
- "44ca841bece6c7869358005536e1189aa86b764e890ef90970d6e3831def" +
- "fa890bf8692381123924e7d9df804fd770a0a30ee97d5dcdca302833efe8" +
- "1d4b2505b17382f0b3429b38c41269ac95e36e9f5a1dbc6e6c8963741917" +
- "02a23198decb4efe6809fcbeb5d0c9098a4c300155dc841610e55c8a6e27" +
- "2a38a39de3d8ebf38a750af25836ffb1bb7822bb98886280f0cab6838c01" +
- "cec57961bdc2e1bf158248309ff9294adcb962252b1c24646d132a3be2c9" +
- "1ff82e8e101facbdb807826cc9d1840a90874ba08692e808c336c9d280ee" +
- "f36a43a75c746fb864f85711e802546ab5cc3f8f117904ba1a85d6e4b729" +
- "85122c5041891e16d55b93d6fc1b7fcfdc80ed3d72d55d64b8895bbf2f8e" +
- "d188684e7e89afdc1e6a7ab9bd1d3da95d68698df2cdcbb2e1a4ae70e2fd" +
- "dd4760f9e5cf4255eeb1e9e8009ab507395bacb8b2177e7c5757ad02baa9" +
- "a96db967d20a150d2dd7f3081d90675fe0c82f94aa3cfdf6ac5585583901" +
- "7a8e122170cc817f327a3c8ef44acd6e4fa81b73bcd0bcb5792eed470481" +
- "152e87f7a20c3f7c69d5a8199bf9bb7c7269b450dc37a9b22102acaa8438" +
- "134d6d733d231cee9522f7d02fbb37b5818ad3ca72df4752230ee11392ef" +
- "8f8219be55202bc3d476f5a9078b32fb63d42bed4cda5ef90cc62467bf5e" +
- "418ecd9d5d0cf1a33eb9a930e652ce96057fef40b65588aac67621d651a0" +
- "9003dbc3925912e385296cd3b2b386a44113308ddf2af52ca390487eb20c" +
- "716b76d78ad45129e7c285d918de7107ea8c3b0cfd9e73933b87c0b2b505" +
- "cb4c95794f2ee6d6d43e2e76026923a0bbfbc3bb22df9ad729452283ce62" +
- "dc9b26684fd45e07650581afd73713a708869a069c58b599ab478974f206" +
- "dbd3e4e563e346ff1881723c5fd440bdf9f70f761c6f746113397d7c04b6" +
- "b341d7e44de7de0aae79badaaef5ed372ef629dffd52926110683ab2d4da" +
- "a4be83eb86c8700703a660edd5a5029f66f1581da96fe1feefc970ab4086" +
- "a83ae02e959821967bd27b3b629652f5bc3db2b7f1af674f9f3fb3a788f7" +
- "88e6dc1722382971831a7ed72502f85b25888c1534d81c0a4f7351ecc40f" +
- "4e0412e05718403fae5746d313a78c80ac297f1391ad389070410e1330a1" +
- "b07d683d1c795bda74bde947f2cf0dc9638b5d0851cda27df030403816dd" +
- "3b70f042888c9c192656cc4b9fea10b81b5347900d9199c8f0f47d42f2ee" +
- "482b68acfa5ff47d9950c950a926a497d94c6a796e0b715416520bd6c59f" +
- "30217718d5f1d7bf7c24039f6467214ac8783cf011b25c37c67dfddde426" +
- "40afe97f94879f4586954737b86701b32d560f08caec3fc45184bc719c7c" +
- "5bf699074fde814acae32c189158c737665a8f94637068322f0c23ff8860" +
- "f1b1c1bd766440afee290aa6f7150c7adefa6d72a738cd2268da7c94788e" +
- "bb39002e9a328a51f3a92dc5c7cd9e4faed5702d3592ad16217c4978f84e" +
- "af0fd2c9e4c6f4dcdd9112c781eb41a9aacb0f7935bb5c92d41e67cfff6b" +
- "991ccefbd667ffeded1de325da50c33e28e2eef2f636c9726dc5bfe753ee" +
- "c7bb6e1f080c89451f81bc8c29dc9067ce83deed02769714fa9bb477aca5" +
- "c09089934674a0cc8e4b2c3136b2e4af8040cc601b90a4dec898dc922ca4" +
- "976ab5ae4ac5af93fa5b1854a76ac3bcc2090bdeaa49ec4f319cf7c7b674" +
- "6d8e617abb3361b28b27983dd1b139ec4f5af7e116439d7ecb16534817bf" +
- "264dbd8f59e80b443be12c17fa013c7f4d029504c9bb62b296c2326f4f49" +
- "cc3201b70ac3f62abb683c630179594a6d4cf30fd55b163bf8d01986bb6b" +
- "cb7050fd527f095c45661920268e56f760fee80a29c9d37b7fc23f608710" +
- "1e723038e64ee1b91c4849d69bd95fc9bc24fc4a234f4855f2a203e3f699" +
- "c32698585c83781677739f2c48697c93b3388dcc64aa61f01118495ded33" +
- "21ef9a1c949481f96005f8d5b277a7d6a0d906ec304cf4292df172e72d20" +
- "29ecdeb65f06267a605f376804bf7bc5b82d5c8facfe7e41dc10806d27e0" +
- "bcc5a341d80b3c1532407f75088716d732632cd88b0037f0d829bf385fec" +
- "b52a202956489f61f16b0f4781bf59068b33d7330571d0b4a6ed91830258" +
- "e1220b308784fa155be9bc821f5c0009a33802fa66dd66d1dde997dddd97" +
- "873ddf65927dc1be979af2b5f110eee627dc1e210326ac20544a757ac168" +
- "1823f3dd04b1ddc4bf96677a0a87633994e7af2ec99b7d5dfe44c6192be6" +
- "a6e69d17b074256da3947808fbf68c7506a7e2c99e6b64d1ffadbd6285d8" +
- "e7e032e24d42dde0594bf03fd550be05e5d66c91a660cd1ab7cb1f43fa9d" +
- "69885203a7aee35a28f117427d7ac02b742f53d13b818f8631081b1730d1" +
- "5b4e1e283cc8e5c4fc3b4652fce05fd8db821f99fcf93e6842816a549791" +
- "7f6c49cc53d733788b2fe3c687de58bfe6153c70d99380df1fd566a7c758" +
- "8052c62e73340d6a9eccd2ed26b763d518f3a0c4d6362212fbecebb4ffb7" +
- "dc94d29944fcc4ab37725b105aa7571f364146782356d8ef056a0be93a55" +
- "0c890df8fecc178776fe40703ad1bd2443d92c420be4306d99686592c030" +
- "fd3e2230c0b48d8db79002e8a832ef27edb53a45532955f1171203d38414" +
- "b4692e901e9f40f918528fc494430f86cf967452f456b01846ac6a383fc0" +
- "de2243c7d804e8643aabcb78e2653b145f400a999670217c8da43bbb9c11" +
- "e074176424be0c116c304a420120138e901eca4b12ce68fec460b23bc0c7" +
- "765a74fc66cbda0e503e7b1baf5883744e468c97c5f1c4b0acc4b87de9f1" +
- "4b537405dfb28195439d1ff848d9cd28a8d375038ebb540a9075b7b5074b" +
- "ebc18418a370f1d3ac5d68f5d239513002ad11bfc2b7ff53e2e41ccffc4b" +
- "0503acc4967c93ae8590a43439b5e7987d10cb8d1957bd9ef717ee3d12df" +
- "5d6736c1d8bd8da102337a94b7d14f830f6c403cbaf7925a8a2a7af1311c" +
- "57224967a38f6ca374013a9819c55fd2e2a5fac4f2490be5b059f4cd9c60" +
- "2d62f80789eb8d9ab893c7f44a4945e41886af218179dfa754bbb59aab68" +
- "13b71d2202eb8fc8a425625d21176a28a620e21bb0dad820c0b7051ce8d1" +
- "3a33f3af0958bb6cd89f9d6414ab00ddd1d2f9fdece9183d0c05fcdfd117" +
- "10d250e4b2029e6992a88293d0457e73e5b1b6a1aae182c69b9cb664992f" +
- "073595ef68117026ad7ea579a4043cda318931eee7b2946a34cdc7c9755f" +
- "80cc79a2bfe3ed9c79dc52faa5126b824868c965eeb37e9e4e6a49600f3a" +
- "cce93c0853b546edb310dcd16a5755f15b1098b2f59dbd2d90e2ea8360ba" +
- "f12108236e854465456598ae2f7bc380f008f2e3cd7c98c87643cafd7c36" +
- "d40e2597236428d46aa5b260f84b4212d5e26804086adcf00363ce4becb4" +
- "9b57eb2847b2f18ec82c99714ad4ddfe4ff3bcac1d0fcaa32660a1dccc68" +
- "5bed83254c8e2ea0ae3632a70cfbcbeadef922d78a006d43ac7ab1f8a609" +
- "c6e0ebc3ca6bb8430f1a562f41010db74b9febf931ca794fa08d1bc17780" +
- "532ae76f25c4ee679d788835dfa4e70ca154c9e2865c3750ffe7b837eed1" +
- "972be058fdf2bdb3eb301867bb132306c7aa237f6771d60bbc56cf31cb30" +
- "32a87204d454542de747418470025ab84935d3eaaca01dbbdae9ef6b5d3a" +
- "ca62ce9f871a3e1272b2b671582c096a349c00f32d742ddb17993994d8ae" +
- "fc178cbcf9abc03114ff2bf7db8f757c63d6898faccd822f5c2e9a7570fb" +
- "9cfff148570888be24ae42644c1a5bebb6f6287147a4bcc01c7675be9e4a" +
- "897519dd3132a7cc2e778f8c90d23dc8073f6fa108d7ef82d561794bd9d5" +
- "f1faa306334f338ac3ba99c853f79c24f7048fa906fde87d1ed28a7b11c0" +
- "66a3bb98f8d21055aaafdf7e069b77b60b3d5cbe7c5e4379c7651af955cd" +
- "82a19a09caf36becb6cd3fe9e12f40379941542709991066df21b7b12dfb" +
- "2416d83fcdc33bb583e3b42f24f53edf8dc7c579ad3be831c99f72bf9fb7" +
- "a35b6562e824e039e6bf1adc8f5ca53846de7bae11c4317e696d887df33c" +
- "525f0a9c01fc29f2c26c90b85fe82ed8bd50954cd4e9ac7c85c7f3efec75" +
- "da1da4ed173cb695cee295190527edb3cb06c5dbdabe0228cc60b6455153" +
- "76244f27aa56da2db10f2659090137ffb82c57233c833e0bbf22d6f647fb" +
- "97b3652d2888b3ab08010b8e8a6967d560b747757806736dc98b78226634" +
- "f1eecaa4a2e23ba36591acb5737d735c5bc7a2e36f1a46946927e061fdf7" +
- "7a3b68ef582c26b01f5aa9a438ecc26c6941221d1590c838072f9e471fe7" +
- "fd59dacb0d092d40d76ea2f7c6e954a132a015bd4cb31147f3ebe4518322" +
- "916438a62836ac85a4cf4492190a85bcc8edb37e38b99ea552d749c30f74" +
- "ca20c298165e8ed02d4671e0b41cac3a32a345b9349ad22c2a4bb2c16a4c" +
- "e0613ca0f0518759f7d2b33cfad2fae764f410d4d9ff8a76ae02a8107e7e" +
- "01d9cd0552676b85ba002f19c01ad5f416d1d08bb84fec7c3555b098dbce" +
- "48e1a5d847895e54db9c5b80cc22d5b87cd41a1a94be102bdd45a3cda5d1" +
- "181e10446d213d6b3fdc350d486d2011d705c5f16ccf7519065c47bad7d6" +
- "89c71e5fdf9d04bfb91eb1f07fa0f001009c1d4b1f6a116a570823a8580b",
- },
- {
- key: "392468efccff36dade31fc1c62eb38bb61394fe448def9d9d9beec2413ddb418",
- tag: "e1122e7c8e6965b90addbd46d8a548d6",
- in: "6a13d37f0ec933194c227351f4a19b507d93465b1f3e88dcb5f1ed1262fa" +
- "58ea99ff31e6fc85c39c04129fa69195b71b2060122fe618dd9430a63f97" +
- "54b52a80b3cd099f248f91a468bae211a27bdb47ba005d29881ea5143a82" +
- "967c4c30c9a4f0dba1a4975e6407fe296d40023a00efa06be763f2d73d46" +
- "a2901ae28b3d8ce18009a462e223b71476d7b954c138e177d15a390847de" +
- "96a7f7fd0598748e86b0f08e64d915e67c7e3cf936f3dcd60edebd36e2a1" +
- "d65b6ac29530c48ab3bd52d45b4f938a19b9b31e2911105a8561600d5377" +
- "905a67112ec28025aa680350ff85b808c5b4c98b7b9567d03f5ed3911ec9" +
- "365a8de4b15ca62adaa69e5ba710eb1756a346016c67a297d8624f9f1ab5" +
- "b3fbce98b141049f0ce26c85d2f8a9cc6ca8ab6c6e148be968931430dcc6" +
- "2bf58ea9698ef52a5d271cf48e6748ac9e04bc7ae7da205a1a7535478322" +
- "d820eca146cedf4b2f9aa9fcfd77ab56a7276977401dcc1f96baa1b607e0" +
- "256bd04ec324ec67a4313e2d5a53d3a3fb5332927929b20c63bde805f637" +
- "eb1050fee2a152a0405634f55c48a59fe370d54b2ab1671dae2c7fd92243" +
- "10627808e553127c74f724362b4a6ee49b697daae7df3ddc5d2ed9d6befd" +
- "77fb9f68fe3041f6ef13f46f34ab682ab8563e8996344f82b2ef006a8d54" +
- "3dd9c1db4979d7da97bda45e722065f8a238f0873217b783a9a629a12b3a" +
- "4de437445039997bd243efbf5e3b6059b9459d395290efb9081c632fb694" +
- "81000dc74c395cb507422df181aba20f776ce3fd8765ac485021992c98b1" +
- "67c68805662cb4356a0ee7ba6bdae51ac10cd06bb5b2f3a72841c714c8ed" +
- "bc56998fe2fefb9bf69e172fdf54b2ab138ae59372c52a67e93882a3000f" +
- "d966992aa2250c6ff93e9cac89645d70625d79332ade5dab7eb1adbe7dce" +
- "5a013fb65ad32fe22ed16fb9bb35eca1f37a0433c320e8752f8fc4b7618c" +
- "5e4df2efece832e259ad98b895c474e47d0e3fc488bea8f717a17de0dcf7" +
- "597fb8fe12e62246296f9a887dcc3a700820c190a55a4931a7d44bd3bb2e" +
- "ab6c8a8126f1be93790cebabc1d69e01796e6cc80e7c16bbc82fb333fb21" +
- "c774ab7db843242838e82d8e1cb8ccab385e67a4271fe7031d74b6e8edcc" +
- "8ed585d1c05a365c7665899c1dbc561151d3b44bceace77c4f53c0e0f6f7" +
- "74d42f9ad3e56f1c2a8d53879d695f895690afb4698472a3d52d67159313" +
- "133c87823fe0500eb68fe286f8b9a2f59f12785d026dc97bdbf793c7d1eb" +
- "155f1f136aae66c256583e987f718afbe733e0a5ce30d021493fb84e2242" +
- "5b18754d126235ef80335004fa84f88361a584753df409360cd8bd45bace" +
- "8f48156bec66577bf2c685089f5ac7e7ec76c0df068fbaa47661f8517f92" +
- "e14723b3b278f151816537a7212c96bd340a00c15c9c9bc9a2a5d163655d" +
- "84b38073e2be9217cad97d362d89d4baf3ce0a8d8562f19a8c97a9aaf5e7" +
- "77d60456360ffb77b30f177d2809052020d141697ecf9cb65f42b9190caf" +
- "6540b2c82f6e5a8482934a6a1a5711a8c24546cd8ba432068404eae5a827" +
- "2e09efc3c6037af4feaac0a46329229b010ecac6b9f077a9b076bb6d9ce1" +
- "38401eb38d124baa11507a994185295020bf9b754fcf78430db9253f5929" +
- "87c46c0f8589c4e463b15a3840b1cea795e24cf6b20f29a630136e0589b3" +
- "8dd7fbe5ea21da72c88bd8e56473586822aa3765660a45a988df9b8eb8e8" +
- "141939d3e4cc637c5d788064d40a9f7c734e43fdf8d7189a5d76700d9743" +
- "fe0122944663afdb88c5201318ca782f6848b742ddebe7463fd4a32280ac" +
- "1cf8311e9137d319de05ce9cd85abab24c5364041c14d3b4ce650400498e" +
- "122166eccc12784b7ac3b262ac0b198ffc26eeed9a5da5374f7a2a53c87a" +
- "78c217ea1fbf8d38f62511657b73109f31691aef14d82ce6e1010eae9e6f" +
- "a419e5c1c16c0cc70651eb3374c03549a1bc7d3ed42d60f886102c798dbc" +
- "ba56f0a2b3b9b412530c35f5f7ed06311ee14571f9c26ed9c81ef38ff000" +
- "2f5ef3aab7351e32049a6ef8f48a43da1d84402d229df513dfaf1b2e4043" +
- "6ce68c70ebeddd7477c9164f0dce45a6fc5de050f52ec269659d5854bcae" +
- "f7762ed7400713c27a4d523eaf8c136c4a1ca00b9e9e55902daf6cdf8528" +
- "c22ca1f2fa7ce87902d75a6850e1a5a4592497be1bb401878f18b189b0e2" +
- "c59d10705bfabde3cd2da01eb452006b294108d5d42e88e9e15424d8cd0b" +
- "8ab43a6c546b3dbf52e47b59cde6a3e417b0395220b6d63736d429da3458" +
- "9a2524f1629320206fa7f1d8a041e17222c4a5814561937e1030e6375c77" +
- "9dc988bb928bbdbe2c2eb20111639725d82b5d7192cd3e4acc27581f0ba7" +
- "286cff41f97aa5a52ea0083de5057fd2ba985aa738e4d03fcf11ebab1d97" +
- "e2ac77d1c2beb8799150a421a07b3777d0b850f24194b8309135b13da6c7" +
- "e38653a711e407a1811290fbb7bc15d8b12efc6916e97ead41e042a44721" +
- "e9cde3388073d921595bcddcac758dc675173f38242e65e4a284aaa7e8fa" +
- "6adddaf00bc46428ab2d8601205b8895bcedfc80ca0aa4619ed6bb082ddf" +
- "33ec04fa5d417f33fcdd238c6b11320c5a08f800e0f350b75d81e3bcbd15" +
- "58a1eab87a3c8c2ffd7ba1d7e754e607cf98ba22a3fc766c45bd6f2569b4" +
- "84639e6611714119d188a24a5e963089a16ed34e20b9f154cad8ac6031dd" +
- "7a3a885afc2ae5e003ae8d4e4aabdb3e51dfc423b8cf4ed9ae2010072cbb" +
- "b1108c7da1ff075e54ed827a0963ac5523ecdf3fc5eee7b4d1a6773764ec" +
- "5c30f41690523fd70d895edb7ca6a1806d54240c4c7b43410da73503a323" +
- "90d9070ed30da3a2fb5eccd40d083be7cf8bf40b4279f819cf795b6f075b" +
- "5a67a10a06a6076d0d83c72efea05f244901c4b5fd9eb380432519311baf" +
- "8c81f6325df4d37ff4d30d318f904ebb837ec76b341dd00a8f247cf0bbe9" +
- "6f3784dc8f5feb344958fdf1a9ececb105f8770826db1f17a5281e997951" +
- "d3c60cc28fc3e66ffeb5dbac315f98f6d240208043f28dee963d843e68ab" +
- "57d847f76ae2f96ce6e37f377ef5dfef2176ecd7440ce4dadcec2231b606" +
- "e4a80420fb3ed135640e1f05d6bd58b8dce062dd7d36b885d424f6318e5e" +
- "a0753efbb33bbc7360d2b5dfab3ae0d5e000b8d31f2ba0f5fd8b34f96b55" +
- "28fff35e769461d0f03cf3bfdf0b801dcbbf2838180cb9b108e06c353e3f" +
- "0b9ef61678cfed1ea37ae76bccb5ef5957ac2c8e8f4794c8145a15f1cc88" +
- "bfb0881080326c481b373c3bc9b07a9b60a0c8bd5fa4f6f90145590a5227" +
- "6fcc0ccc2375d0ccb571d414d1b0c38b4e02c39db4d701c5e25e90785ef4" +
- "d26f35edd8c4b96455bdca7245cfefd9cfbd2f319615e5fdf07bb9564fa0" +
- "44bb35a58391d02e3927780b4076bc0893dfcb4b63a32cd7a541a4a8c253" +
- "0349c6e96e378dbeb66dedf87d813d0b744452c1c4088507dca722193827" +
- "9e2dfa24e4a409de494acf654f44262db9206a7717fa434ac4fdc6a6eb5b" +
- "1fd5a193b6043bc4327c8c09fd6822eaa9df37bbcac1077754a295621601" +
- "267b68733b62dadc2563f1700af180141f29899e2689dbbe9745ba8477f4" +
- "352921900b403a01c9dd042a8c1b0e0489959fb0b0a8431c97b41e202204" +
- "212ebfa00c593399dbd14d7aec07b8292d2e40b48f05fcd54a15da4a24d7" +
- "2759e409f4c7b5b98fce4abac6c30e4872d92efa1f96479ec30f21699825" +
- "50fa60584f5a09051a00f8e7dbb3853e66ca3f05fbfe43bef9b120a25a01" +
- "eb436ba8ecda715201eda72e517d628f883386c1503aa8b8e75610f7155e" +
- "9f916335ab6d6f0f9589b6220cd2b81c2c937dc065d3d14a7df8cc916cd0" +
- "0ce1bb53fd9c8974298d3bd316f3658aa8cc6904f073a1472149e4b08c64" +
- "5e11abe0428ccb6174df2103edd735965d6454b543d3f01410f77053f65e" +
- "c1d1aee56fdd3af23bcd4e1a7fcc4e600c4831007c33fe5f0c8300f686eb" +
- "9b4d1e4f08fe4ddc8a90be14dc3a5a88ff96716509341d5db24c0d016863" +
- "998b1859c5021df815a6f1ca9845f1a8e99dbad132b406227c5897a1bdf3" +
- "e698962f799133ff4429decbef6ce036296facf38e4812fec102b76c6d30" +
- "beba1b70722254fafbc471096153478c971db7d96263660209265cb10f13" +
- "b34b5fd55c4abe818a5f9715d8a85094e2946b7a001b47f629e26c636d86" +
- "4968ad2ab616dfe28840bd60b4b9855c8dbe1cb873fcbc4577b5fefeb8bb" +
- "4832039867dc35db9c036c83bc204396e3474ddfe806c77c65c936f488b6" +
- "7c1028739562d7bb055d21441af29ae2921290e548dccf8a56021385422b" +
- "15da6b232b24151309a75a00296d11aa1952a1513110b0faa93d1d8cd9ae" +
- "fa9f1c59377ec9165b2c9e07cbde40db7b81bca6d58fc28bae8f473cd0e9" +
- "a2420e0b943a83d284108626c24ac570b1d6c1ab971e71f43fbd6c00e171" +
- "238141a6dc987a60385c3a04dd147a2f8e80dfe727b104c0fdd80b326f59" +
- "0b9f86fd7b2fd1122a390979889eabd803ab57159c8509a1443eb6789382" +
- "090a770ae4eba03306f96e50e19a7d44c584ccc230d104548946efca4520" +
- "d61de5f473e2f4eada6c8ce9c7ee975eb4f63c0483cb775ed7d3cf690a61" +
- "7d6656d683a8512707d81ca5ba176a42bcffcfa692129f292607d2a47536" +
- "ccaeb464c9272d6f3816074b712af602470088b253deba18771e5f67734b" +
- "587707cdd06f35264b2262fd253c25b5d38ee7db287610e5398062b7a34e" +
- "6e4cf7447d00873b930ad148fd96f0ab18771bc468b874bb109924101c84" +
- "c4e239ecc7687d875e4d94a1a973620ca61e35a872c2e2e61a502169f1bb" +
- "4e5ff5fa2bff657be6195b3e2c7151a52fc0096d98e7f08f5a98f570aee1" +
- "7b4275f1356e87e080ce0e1b9bbabe7dea48b5903bc390ce23472ad64a89" +
- "41c3247bfd23ea90b2dee09085571bad85568040105e098f993bb37e43c3" +
- "e6d511171c77cfc450570dfb9fc6a3930ef43c03f8213f6203d545d791c7" +
- "d3fa42d5dde1655038d35c5dfacc12e9dee24fe833977549eda68ae8b508" +
- "be277e743921b584f9dfa0eefbd8bf3c23f51efdef7f7487001d29e8097b" +
- "ba63289cfca743023d1668555a46fe6d5b7421377414df1e9ef135480622" +
- "22e2e9a7baa618d88f407517f6317b6a0ba3384ace16d68631d59ea169d5" +
- "092d20afc1a481b82be5e734bb092953a0a94702bae1a0f48d2a22b9a05f" +
- "f64493b7b2e984f27582b1eb937fddf8512c49830435d146dcc291a4118d" +
- "5dc638b99cdcbcc5860de7a92c5b13cbd1e01e051f01af40afe124346320" +
- "d3626bf9d8f7850744e032a993c276fd388718237740c6caf260fca60b8d" +
- "d846102e3262b6e05ceca00c6affe938fac1847350865fc858d3ddd1d130" +
- "71d1221ce7c5d575587fcba580e544b74d877ed5ca92763ef0ca0d7bfa08" +
- "d57a0216b2a01a2b9ec74b8430051e0074862b7be25b6766ab520f2eb75d" +
- "eeb979c28f03795f6f1e4b8410beab19a20febc91985b8a7c298534a6598" +
- "f2c5b0dc5de9f5e55a97791507bc6373db26",
- },
-}
diff --git a/ssl/test/runner/prf.go b/ssl/test/runner/prf.go
index 96e7f24..73251c6 100644
--- a/ssl/test/runner/prf.go
+++ b/ssl/test/runner/prf.go
@@ -11,6 +11,8 @@
"crypto/sha1"
"crypto/sha256"
"hash"
+
+ "golang.org/x/crypto/hkdf"
)
// Split a premaster secret in two as specified in RFC 4346, section 5.
@@ -391,7 +393,7 @@
// addEntropy incorporates ikm into the running TLS 1.3 secret with HKDF-Expand.
func (h *finishedHash) addEntropy(ikm []byte) {
- h.secret = hkdfExtract(h.hash.New, h.secret, ikm)
+ h.secret = hkdf.Extract(h.hash.New, ikm, h.secret)
}
func (h *finishedHash) nextSecret() {
@@ -418,7 +420,11 @@
x = x[len(label):]
x[0] = byte(len(hashValue))
copy(x[1:], hashValue)
- return hkdfExpand(hash.New, secret, hkdfLabel, length)
+ ret := make([]byte, length)
+ if n, err := hkdf.Expand(hash.New, secret, hkdfLabel).Read(ret); err != nil || n != length {
+ panic("hkdfExpandLabel: hkdf.Expand unexpectedly failed")
+ }
+ return ret
}
// appendContextHashes returns the concatenation of the handshake hash and the